Skip to content

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.

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.

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: purchase

The event’s value and meta arrive in data.event.

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.

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.

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.

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.

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/confirmation
IF session completed "Checkout"
THEN post to Slack #orders

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.

ReasonCause
conversion_not_completedThe condition was set and the session had not completed that conversion when assessed
conversion_missingThe conversion named in the condition has been deleted
bot_sessionThe session was classified as a bot
session_missingThe session could not be loaded when the run was processed
listener_removedThe automation was deleted or disabled between the signal and the run
no_executorsThe automation has no actions

Invalidated runs show in the log with their reason. They do not count as failures and never trigger auto-disable.

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.