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 ​