Who this is for. Anyone starting a new job. Find your case in the left column; the right column names the trigger and the setting that makes it work.
The decision table
| You want to run something when… | Use |
|---|---|
| a form is submitted | Entity event, Form Submissions, Completed, narrowed to the form. Not Created: a multi-step form creates the submission before it is complete |
| a record is created, edited or deleted in the admin or through the API | Entity event, Created, Updated or Deleted. For a delete, list what the job needs as Pre-Event properties |
| a field changes, or changes to a particular value | Entity event, Updated, with that field as a Pre-Event property and a condition that compares before and after |
| a page or post goes live, at once or on its scheduled date | Entity event, Updated, with {published} as the Pre-Event property and the condition on Detecting that a record went live |
| an order is paid | Entity event, Orders, Created and Updated, with {financialStatus} as the Pre-Event property and the became-paid condition |
| a shopper leaves a cart | Entity event, Carts, Abandoned |
| a product a shopper is waiting for is back in stock | Entity event, Products or Product Variants, Back in stock |
| another system tells you something happened | Web event, asynchronous: the caller gets an immediate acknowledgement |
| your front end or a partner needs an answer | Web event, synchronous, ending in an HTTP Response (Custom endpoints) |
| it is time: nightly, hourly, on a date | Recurring or scheduled execution, with the job's site set |
| another job reaches a certain point, or creates a record | A Trigger job action in that job. A record created by an asynchronous job starts no Created trigger |
| a record has not changed for a while, or a date in it passes (a renewal, an expiry, a reminder) | Use a schedule that selects the records whose date has passed, in a template with query and a real date (why a template) |
| thousands of records must be processed: an import, an export, a resync | A schedule that handles a chunk per run, not an entity event: see Event job or scheduled job |
More than one trigger
A job can have several triggers of different kinds: the warehouse job in the worked integration could be started by a payment event and by a retry schedule. Each run's event is then of a different kind, so a template that reads it must check which: a scheduled run has no record, a web event has no getRecord(). Where the work after the start is the same, a separate small job per trigger that hands over to one shared job with Trigger job is easier to read.