Build it
1
Start from a play, or from scratch
Forking a built-in play gives you a working trigger and flow as a draft you own. Starting blank gives you an empty canvas.
2
Configure the trigger
For a business preset (Token acquired, Swap completed, Liquidity added, and the rest), you supply just one thing: the token or contract to watch. The on-chain detail is set for you. Only the generic On-chain event trigger asks you to name a raw event. See Triggers and Conditions.
3
Lay out the flow
Add action, wait, and branch blocks and connect them in order. The flow runs left to right, following the connections out of the trigger.
4
Validate
Validation flags blocking errors, which you must fix, and softer warnings, which you can leave. It won’t let you publish something broken.
5
Preview
Preview estimates how many wallets currently match the trigger, with sample profiles. Run this before publishing. A trigger matching zero wallets is the most common cause of a silent automation.
6
Publish
Publishing creates the live version. Without it, nothing runs (more on this below).
The building blocks
Seven blocks make up a flow:The messaging blocks
The three messaging blocks (send email, send in-app, launch campaign) send to the contact who triggered the flow by default, or to a specific list of wallets you name. Content is personalized per recipient, so an in-app push supports the same merge variables as email, like{{ greeting_name }}.
- Send email uses a saved template, or a subject and body you type in. It needs at least one of those.
- Send in-app uses a title and body, with an optional button (give it both a label and a link for the button to show).
- Launch campaign kicks off a campaign you’ve already built, aimed at the recipient.
Wait
Pause the flow before the next step: a number of seconds, minutes, hours, or days, or “until 9:00am in this timezone.” Waiting contacts are parked and picked back up when the time comes, so a long wait costs you nothing while it sits.Add tag
Tag the contact, one tag or several at once. Useful for marking who’s been through a flow so you can segment or suppress on it later. (There’s no “remove tag” step.)Call a webhook (for developers)
The webhook block pings one of your own endpoints partway through a flow, so your systems can react to what happened. It’s the one developer-flavored block: it needs a publichttps URL, and it hands your endpoint the contact’s context. The full detail, payload shape, retries, and the security rules, is in Webhooks. This block sends out; to start an automation from your own system, see Contract-Based Flows.
Drafts and validation
The builder keeps your work-in-progress draft separate from the saved flow, so you can leave a block half-finished and come back to it. Saving to the main flow validates first, and a few things block a save: an empty flow, no trigger, an email step with nothing to send, a wait with no duration, or a branch with only one path out. A block that isn’t connected to anything is a warning, not an error, the flow still publishes, but that block never runs.Publish
When a step has trouble
Steps retry automatically a few times before giving up, and each step only re-runs the one that failed, not the ones before it, so nobody gets a duplicate email on a retry. Different steps handle trouble differently:- Send email skips, and the flow moves on, if your sending is paused or every recipient is suppressed. It only retries when some recipients exist but the sends error out.
- Send in-app quietly drops wallets with no in-app session. It only fails if there’s nobody left to send to.
- Launch campaign, add tag, and webhook retry, then give up if they keep failing.
Watching an entry
Every contact that enters an automation is an entry, and each entry records what happened as it moved through the flow. This is how you answer “did this fire, and where did it stop.” An entry is running, waiting (paused on a wait), completed, or failed, and its history shows when it was created, which steps it reached, which ran, and which were skipped and why (for example “sending paused” or “everyone suppressed”). When an email step sent nothing, check for a skip reason before assuming the trigger is broken. When an automation finishes, it also emits anautomation.completed webhook event your systems can subscribe to.
Automation stats (entries, conversions, revenue) are derived from send and delivery records. “Entries” counts trigger matches; conversion and revenue are inferred from event names and metadata, so treat them as directional rather than as an accounting source.
Best practices
- One trigger, one outcome. Add branches only after the primary path is verified.
- Preview before publishing so you know the trigger matches a non-zero audience.
- Name automations after trigger plus action, “Mint → welcome series” beats “Automation 3”.
- Avoid overlapping automations targeting the same wallets on the same event.
- Test with a real event, then check the entry’s history to confirm each step fired.

