Six composable step types, fail-closed if/else lanes and wait-for-event with a timeout. Author from the visual builder, an AI prompt, the API or an MCP agent — every path runs the same validation.
Drop steps onto the canvas, wire them together and let contacts move through in real time. Every trigger enrolls a contact and walks them node by node until they finish or exit — no black boxes, no guesswork.
Each step does one thing and composes cleanly with the rest — enough grammar to model onboarding, retention, dunning or a product tour.
Send a designed template with merge tags resolved per contact. Every send tracks opens and clicks at the step level.
Pause the contact for a fixed duration — minutes, hours or days — before the next step fires. Perfect for pacing a sequence.
Split the flow two ways on a rule. Yes and No lanes run side by side so both outcomes are always visible.
Hold until a custom event arrives — or move on when a timeout expires. Great for "did they finish setup?" gates.
Mutate the contact inline — unsubscribe, set a custom field or add a tag — without leaving the flow.
Gate the path on the contact's current state. Only matching contacts continue; the rest exit cleanly.
When a branch can't evaluate — a missing field, an event that never fired — the contact takes the No lane by default. No silent sends to people who don't qualify, no accidental blasts down the wrong path.
Hold a contact at a step until they do the thing you care about — create a project, place an order, invite a teammate. Set a timeout so no one waits forever, and the flow keeps moving when the deadline passes.
// contact is paused at wait · project.created await deckle.events.track({ email: 'ada@acme.com', event: 'project.created', properties: { template: 'starter' }, }) // → flow resumes; otherwise timeout 3d fires
An enrollment funnel counts contacts through Enrolled → In progress → Completed → Exited with a live completion rate. Every Email step reports its own open and click rate, and a live view pins exactly where contacts are right now.
Start from a proven pattern and rewire it to your product. Every template opens straight into the builder — clone, tweak, ship.
Draw a flow on the canvas, describe it to the AI, POST it through the REST API, or let an MCP agent build it for you. However it's created, the same validation runs before a single contact enrolls.
await deckle.automations.create({ name: 'trial-onboarding', trigger: { type: 'event', event: 'trial.started' }, steps: [ { type: 'email', template: 'welcome' }, { type: 'wait', event: 'project.created', timeout: '3d' }, { type: 'branch', on: 'activated' }, ], }) // validated identically to the visual builder
Free to start, no credit card. Send from your verified domain.