Skip to content

Triggers

A trigger is what kicks off a workflow run. Every workflow needs at least one. GCM ships about two dozen built-in triggers covering members, attendance, giving, forms, schedules, and external webhooks.

Trigger groups

GroupWhen it fires
InstantRight when an event happens in the database (member created, donation recorded, etc.)
ScheduledOn a cron expression or one-off future date
ManualWhen an admin manually starts the workflow

Instant triggers (member)

TriggerFires when
member.createdA new member record is saved
member.updatedAny field on a member changes
member.deletedA member is soft-deleted
member.birthdayA member's date_of_birth matches today's date
member.marked_lostlost_at is set on a member
member.recoveredlost_at is cleared on a previously-lost member
member.type_changedThe member type changes (e.g. Visitor → Member)
member.unit_assignedA member is added to an org unit
member.unit_removedA member is removed from an org unit
member.group_assignedA member is added to a small group
member.group_removedA member is removed from a small group
member.ministry_assignedA member is added to a ministry
member.ministry_removedA member is removed from a ministry
member.school_enrolledA member starts a school program
member.school_graduatedA member completes a school program
member.school_removedA member is removed from a school program
member.note_addedA note is added to a member's profile
member.taggedA tag is added to a member

Instant triggers (attendance and giving)

TriggerFires when
attendance.markedA member is checked in to a meeting
attendance.removedAn attendance row is deleted
giving.recordedA donation is created (manual or online)
donation.refundedA donation is refunded

Instant triggers (other)

TriggerFires when
event.createdA calendar event is created
form.submittedA public form is submitted (e.g. visitor form)
webhook.receivedAn external system POSTs to your church's incoming-webhook URL

Scheduled triggers

TriggerWhen
scheduleRecurring cron — e.g. every Monday 9 AM
schedule.onceA single future moment
scheduled_queryPeriodic database query (e.g. nightly no attendance for 6 weeks check)

The schedule trigger uses standard cron syntax. We translate it to your church's timezone (set in Settings → Organization), so 0 9 * * 1 means "9 AM Monday in your church's local time."

Manual triggers

TriggerWhen
manualAn admin clicks the run-now button
manual_enrollmentAn admin enrolls one or more members directly

Useful for ad-hoc sends — e.g. a one-off "we have a service change tomorrow" message.

Trigger configuration

Most triggers have extra config:

  • Filters — only fire when extra conditions hold. E.g. member.created where member type is Visitor.
  • Org-unit scope — only fire for members in specific units.
  • Membership type scope — only fire for visitors, members, leaders, etc.

These filters are evaluated before a run is enqueued — non-matching events skip the workflow without creating a run row.

Subject and tokens

Every trigger fires with a subject — usually the member the event concerns. That subject is available throughout the workflow as merge tokens:

  • {{trigger.member.first_names}} — for a member trigger.
  • {{trigger.donation.amount}} — for giving.recorded.
  • {{trigger.attendance.meeting.name}} — for attendance.marked.

The token picker shows what's available based on the trigger you chose.

Multi-trigger workflows

A workflow can have multiple triggers that all funnel into the same action sequence. Common pattern:

  • Welcome new arrivals with both member.created and member.recovered as triggers, both leading to a "welcome" send.

The two triggers connect to a trigger junction node which fans out into the shared actions.

Frequency safeguards

Some triggers fire a lot. member.updated will fire every time anyone touches any field. To avoid runaway workflows:

  • Use trigger filters to narrow what's eligible (only when status changes).
  • Use rate-limiting on the workflow level — at most N runs per member per day.
  • Use idempotency keys on send-message actions so retries don't duplicate.

WARNING

The classic mistake: a workflow that updates a custom field on member.updated, causing an infinite loop. The builder warns you if you create this pattern; please pay attention to the warning.

Common questions

Can I trigger on a custom field change? Yes — use member.updated with a filter on the specific field key.

Why isn't my member.created workflow running for bulk-imported members? Bulk import skips workflow triggers by default to avoid messaging the world during migration. There's a checkbox on the import review screen to opt in.

Can a single event fire multiple workflows? Yes. Every workflow with a matching trigger fires independently. Order is not guaranteed.

Next steps