Skip to content

Automations

An automation is three things: a trigger (one tracked signal), an optional condition (the session completed a conversion), and up to ten actions. When the signal fires on a session, every action delivers independently and you can see each delivery in the run log.

Automations live at Property > Automations in the dashboard (https://app.snipform.io/property/{property}/automations).

WHEN a form is submitted (trigger: signal + value)
IF the session completed "Demo booked" (condition, optional)
THEN post to #sales in Slack (action 1)
send a webhook to my CRM (action 2)
create a contact (action 3)
TriggerValueFires when
A form is submitteda form, or any formA non-spam submission lands on the property
An event firesexact event namesignals('purchase') runs with that name
A page is viewedexact pathA visitor lands on /thank-you
A purchase is recordednoneRevenue or cost lands on a session (checkout webhook, tracker, API)
A visitor is identifiednoneAn anonymous session is linked to a contact
A contact is created or updatedcreated, updated, or eitherA contact record changes

Every trigger is a specific signal. There is no “all traffic” trigger. See Triggers and conditions for matching rules and the condition.

  • Post to Slack - a Block Kit message in a connected channel, with the details that matter.
  • Send a webhook - the full signed envelope, POSTed to your HTTPS endpoint and retried.
  • Trigger a Zap - a flattened payload for a Zapier catch hook.
  • Create a contact - turn a form submission into an identified contact linked to its session.

Webhook and Zapier actions are available on paid plans. Slack needs a connected channel first (Integrations).

A session trips an automation at most once. The pair (automation, session) is unique, so a visitor who views /pricing five times fires a “page is viewed” automation once. The second and later matches are free no-ops.

Bot sessions never trip automations. Outright spam form submissions never reach them either; submissions the spam scorer only flagged do, and the contact action lets you decide what to do with those.

SituationDelay before the first delivery
No conditionAbout 5 seconds after the signal (enough for the event to be queryable)
With a conversion conditionAbout 60 seconds, so the session’s conversion state has settled before it is assessed

Each action retries on its own: an immediate attempt, then again after 2 minutes, then after 15 minutes. Three failures mark that delivery failed; the other actions on the same run are unaffected.

An automation that keeps failing is auto-disabled once both of these are true: 15 consecutive failed deliveries, and the first of those failures was at least 3 days ago. A weekend outage on your endpoint does not kill an automation. Re-enabling resets the counters.

You can pause and resume any automation yourself. Deleting one deletes its run history too.

Every trip is a row with one of four states:

StateMeaning
In progressThe signal matched and the run is queued or delivering
DeliveredEvery action landed
FailedAt least one action exhausted its retries
InvalidatedAssessed and found irrelevant: the condition was not met, the session was a bot, the automation was removed, or it had no actions

Under each row, every action shows its attempts, HTTP status, response time, and the error or note it came back with.

The Test button on an automation queues a run with a representative sample payload instead of a real session. The payload carries "test": true at the top level so your endpoint can tell. Slack and webhook actions really deliver; the contact action reports “Test run - no contact created” and writes nothing.

An automation with a webhook action gets a signing secret (whsec_...) the moment it is created. It is shown once, in the success message after you save. Every delivery from that automation is signed with it. If you lose it, create a new automation.

Some integrations register automations of their own. The Google Ads conversion send, for example, appears in the list with a note saying which integration owns it. You can see its run log but not edit or delete it; turning the feature off in the integration removes it.