Triggers & Conditions
An automation subscribes to exactly one signal. The trigger is a signal type plus, for some types, a value. The builder offers suggestions for event names and page paths from the property’s own recent traffic, so you pick rather than type.
Triggers
Section titled “Triggers”A form is submitted
Section titled “A form is submitted”Value: a form from the picker, or blank for any form on the property.
Fires once per session when a submission passes the spam scorer. Submissions scored as spam never trip an automation; submissions the scorer only flagged do, and arrive with is_flagged: true in the payload. The submission’s answers ride along in data.form_submit, which is what makes form automations useful to Slack, webhooks and the contact action.
An event fires
Section titled “An event fires”Value: the event name, required.
Matches the exact, case-sensitive name you send from the tracker or the API:
signals('purchase', 4999, { plan: 'pro' }); // trigger value: purchaseThe event’s value and meta arrive in data.event.
A page is viewed
Section titled “A page is viewed”Value: the path, required. The path only, exactly as it appears after your domain: /thank-you, not https://example.com/thank-you and not /thank-you?ref=x.
Fires on the first view of that path in a session.
A purchase is recorded
Section titled “A purchase is recorded”Value: none.
Fires when revenue or cost lands on a session, from any source: the Shopify orders/paid webhook, signals.revenue() or signals.acquisition() in the tracker, or POST /v2/property/session/acquisition on the API.
A visitor is identified
Section titled “A visitor is identified”Value: none.
Fires when an anonymous session is linked to a contact. A session is linked at most once, so this fires at most once per session by construction.
A contact is created or updated
Section titled “A contact is created or updated”Value: created only, updated only, or either (blank).
Fires when a contact record changes through the tracker, the API, a form automation, or Shopify. The event name in the payload is created or updated.
The condition
Section titled “The condition”Optionally, an automation only runs when the tripped session has completed a conversion you name. Pick any conversion on the property.
With a condition set, the run waits about 60 seconds after the signal (instead of 5) and asks the conversion engine whether that session completed the funnel. If it did, the actions deliver and data.conversion carries the conversion’s id and name. If it did not, the run is invalidated with the reason conversion_not_completed and nothing is sent.
This is the same evaluation the conversion’s own reports use, so an automation never claims a conversion the funnel would not.
A typical pairing:
WHEN a page is viewed: /order/confirmationIF session completed "Checkout"THEN post to Slack #ordersOnce per session
Section titled “Once per session”The (automation, session) pair is unique. The first matching signal opens the run; later matches on the same session do nothing. If you need one message per event rather than per session, give each event a distinct name or carry a counter in its meta and let your endpoint handle it.
Why a run is invalidated
Section titled “Why a run is invalidated”| Reason | Cause |
|---|---|
conversion_not_completed | The condition was set and the session had not completed that conversion when assessed |
conversion_missing | The conversion named in the condition has been deleted |
bot_session | The session was classified as a bot |
session_missing | The session could not be loaded when the run was processed |
listener_removed | The automation was deleted or disabled between the signal and the run |
no_executors | The automation has no actions |
Invalidated runs show in the log with their reason. They do not count as failures and never trigger auto-disable.
What the trigger puts in the payload
Section titled “What the trigger puts in the payload”Every delivery carries the trigger that opened the run:
"trigger": { "event_type": "form_submit", "event_value": "64f1c2e9a1b2c3d4e5f60718"}event_type is one of form_submit, event, page_view, acquisition, identify, contact. event_value is the configured value (form id, event name, page path, contact change) or null. The same value is sent as the X-SnipForm-Event header on webhook deliveries. See Send a webhook for the full envelope.