Every custom automation starts with a trigger — the event that kicks off the flow. Pick one when you create an automation. You can't change a trigger later — you'd delete and rebuild.

Trigger picker on the builder canvas

Triggers fall into six categories.

Customer triggers

TriggerFires when…
Customer createdA new customer is added — from a call, a booking, an import, or by hand.
Customer updatedAny customer field changes (name, phone, email, address, notes).
Tag assigned to customerA tag is added. Optional config: scope to a specific tag ("VIP") — leave blank to fire on any tag.

Job triggers

TriggerFires when…
Job scheduledA job is placed on the schedule (from any source — office, mobile, booking, AI Receptionist).
Job status changedThe job status moves. Optional config: fire only on a specific target status ("Completed").
Job completedShortcut for the common case — the job is marked complete.
Tag assigned to jobSame as customer-tag but on a job record. Optional per-tag filter.

Appointment triggers

Appointment-level, not job-level. Multi-day jobs have multiple appointments — each fires its own event.

TriggerFires when…
Appointment scheduledA specific visit is placed on the schedule.
Appointment completedA specific visit is marked complete.

Estimate / invoice / payment triggers

TriggerFires when…
Estimate sentYou send an estimate to the customer.
Estimate approvedThe customer approves the estimate via the public link.
Invoice issuedYou send an invoice.
Invoice paidThe invoice is fully paid (last payment brings the balance to zero).
Payment receivedAny payment lands — fires per payment, not per invoice. Partial payments still fire this.

Membership triggers

TriggerFires when…
Membership createdA customer is enrolled in a plan.
Membership renewedAn active membership renews (auto or manual).

Inbound webhook

Every automation with an inbound-webhook trigger gets a unique URL. Anything that can POST JSON can fire it — Zapier, Make, a form on your website, a script.

The JSON body becomes available downstream as {{body.*}}. See Triggering automations from an inbound webhook.

Choosing between trigger and filter

Some triggers overlap — Job status changed with a "Completed" filter looks a lot like Job completed. Rule of thumb:

  • If a dedicated trigger exists (Job completed, Invoice paid), use it. Cleaner and cheaper.
  • If you need to react to a specific status other than the dedicated one (e.g. Job status changed → Cancelled), use the general Job status changed and set the target status in the trigger config.

What's not a trigger today

  • Customer opens an email — not tracked as an event.
  • Customer clicks a link in an SMS — not tracked.
  • A specific date on the calendar (e.g. "every October 1") — not yet. Workaround: send yourself an inbound-webhook cron from another tool.
  • Voice call events (missed call, completed call) — not yet exposed to Automations. Handled by AI Receptionist follow-ups.
  • Field-tech clock in / out — not yet.