Actions β
An action is a step inside a workflow. Once the trigger fires, GCM walks through the connected actions in order, executing each one. The full catalog is grouped into five categories.
Member actions β
These read or write the member table.
| Action | What it does |
|---|---|
find_member | Look up a member by phone, email, or custom criteria. Result available to later actions. |
find_members_by_segment | Find all members matching a filter (returns a list to loop over). |
create_member | Insert a new member record. |
update_member | Change one or more fields on a member. |
change_membership_type | Convert visitor β member, etc. |
mark_member_lost | Set lost_at. |
recover_member | Clear lost_at. |
delete_member | Soft-delete. |
assign_unit / remove_from_unit | Org-unit assignment. |
assign_group / remove_from_group | Small-group assignment. |
assign_ministry / remove_from_ministry | Ministry assignment. |
enroll_school / graduate_school / remove_from_school | School program lifecycle. |
add_note | Append a note to the member profile. |
Communication actions β
These send messages.
| Action | What it does |
|---|---|
send_message | Send via WhatsApp / SMS / email to a recipient. |
send_notification | Send an in-app or web-push notification to staff. |
Both let you pick from a template or compose inline. Merge tokens fill in dynamic data.
TIP
Always prefer templates over inline messages for production workflows. Editing a template later updates every workflow that uses it.
Flow-control actions β
These control how the workflow walks the graph.
| Action | What it does |
|---|---|
condition | Branch on a boolean β true / false outputs |
split | Run multiple branches in parallel |
wait_delay | Pause N minutes / hours / days before continuing |
wait_until | Pause until a specific date/time |
wait_event | Pause until another event fires |
go_to | Jump to another node (loop / skip) |
for_each | Loop over a list β the previous action's output |
The condition operators are rich: is, is_not, contains, greater_than, less_than, is_empty, matches_regex, is_exactly_n_days_ago, is_between_days_ago, is_today, is_within_last_n_days, is_in_next_n_days, is_during_business_hours, and several more.
Data actions β
These manipulate data without changing members directly.
| Action | What it does |
|---|---|
set_variable | Store a value for use in later actions |
aggregate | Count / sum / average over a list |
math_operation | Add, subtract, multiply, divide |
lookup | Read a single field from a related table |
Integration actions β
These reach outside GCM.
| Action | What it does |
|---|---|
send_webhook | POST to an external URL with a custom payload |
create_task | Create a task in your team task-tracker |
The webhook action is the escape hatch. If you need to talk to Zapier, Slack, your church management Google Sheet, or any other system, this is the way.
Configuring an action β
Click any action node to open the config panel on the right. Every action has at minimum:
- Display name β what shows on the canvas.
- Action-specific config β recipient picker for messages, field selector for updates, etc.
- Error handling β what to do if the action fails (retry, skip, abort the run).
Most config fields support merge tokens, so you can build dynamic actions like "send a message to whoever the trigger's member's shepherd is" without writing code.
Error handling β
Each action can be configured for failure. Options:
- Retry β try again up to N times with backoff.
- Skip and continue β log the error, move to the next action.
- Abort the run β stop the workflow here.
The defaults are sensible:
send_messageβ retry 3 times then skip.update_memberβ abort on failure (data consistency).send_webhookβ retry 3 times then skip.
Idempotency β
Where possible, actions are idempotent β running them twice with the same input has the same effect as running once. This matters for retries and for accidental double-triggers. send_message in particular uses an idempotency key (workflow run ID + action ID + member ID) so the recipient never gets duplicates if the underlying call retries.
Custom actions β
Custom action types are not user-configurable in v1. If you need behavior that's not in the catalog, use send_webhook to reach an external function. Email us if you have a recurring pattern that should be built in.
Common questions β
Can an action talk to a different organization's data? No. All actions are scoped to the workflow's organization via current_org_id(). Even if you crafted a webhook payload to query another org, RLS would refuse.
Can I delete a node mid-graph? Yes β select and press delete. The lines reconnect to whatever node was upstream.
What if my workflow gets stuck on a wait_delay? The run sits in waiting state until the delay elapses. You can manually cancel from the runs page if needed.
Next steps β
- Triggers β what fires the workflow.
- Multi-step & delays β sequence actions over time.
- Monitoring runs β debug failures.