The usual pitch for marketing automation is that it saves time. That is true and it is the least interesting thing about it.
The real argument is timing. A shopper abandons a cart at 11pm on a Tuesday. Nobody is going to notice, look up what they left, and write to them — but an automation will, an hour later, with the right products in the message. Automation is the only way to be present at the moment intent is highest, for every customer, indefinitely.
This guide covers how flows are actually constructed, the six worth building first, and the production details — exit conditions, re-entry rules, identity — that decide whether a flow earns money or quietly embarrasses you.
The anatomy of a flow
Every automation, in every tool, is the same five parts. Understanding them separately is what lets you debug one.
| Part | What it does | Where it goes wrong |
|---|---|---|
| 1. Trigger | The event that starts enrollment — added to cart, started checkout, placed an order, subscribed, viewed a product | A flow does nothing at all until a matching event arrives |
| 2. Entry conditions | Filters applied at the moment of the trigger. "Started checkout and cart over $100" lets you justify an expensive channel for high-value carts only | Filtering on a field most contacts do not have |
| 3. Delays | The wait between steps — where most of the tuning happens | Timing copied from a template that was tuned for someone else's purchase cycle |
| 4. Branches | Conditional splits. The useful ones are simple: did they open the last message, is this their first order, is the cart above your threshold | Elaborate trees on data you cannot rely on. Two-way splits on facts beat them every time |
| 5. Exit conditions | The events that remove someone mid-flow | The most damaging mistake in the category — see below |
The six flows to build first
| Flow | Trigger | Exit | Messages |
|---|---|---|---|
| 1. Abandoned cart | Added to cart, no purchase since | Purchase | 2–3 over three days |
| 2. Abandoned checkout | Checkout started, not completed | Purchase | 2 — higher intent, shorter sequence |
| 3. Welcome series | Subscribed | First purchase (optional) | 3–5 over week one |
| 4. Post-purchase | Order placed | Order cancelled or refunded | 3–4 across delivery |
| 5. Browse abandonment | Product viewed repeatedly, no cart add | Cart add or purchase | 1 |
| 6. Win-back | Days since last order crosses your lapsed threshold | Any purchase | 2–3 over a few weeks |
What separates them is the message, not the mechanics.
- Cart is the largest single pool of recoverable revenue most stores have — Baymard Institute's aggregate of published studies puts abandonment at roughly seven in ten. Resist leading with a discount: a meaningful share of abandonment is distraction, not price, and those people convert on a plain reminder.
- Checkout is worth separating because the failure is usually mechanical — shipping cost at the last step, a payment method not offered, a forced account creation. Address that directly instead of repeating the product pitch.
- Welcome sets expectations, explains what makes the product different, shows proof, then gives a reason to buy. If someone purchases at message two, exit them or branch into post-purchase.
- Post-purchase does double duty: it builds the repeat purchase and deflects a real share of "where is my order" tickets. WhatsApp is often the better channel — utility-category messages are cheap and genuinely welcome.
- Browse should answer the unanswered question — sizing, materials, delivery time, returns — rather than repeating the price.
- Win-back needs a threshold set from your own repeat purchase interval, not a default.
Exit conditions: the part everyone skips
An abandoned-cart flow with no exit condition will, reliably, message customers about the thing they just bought. It is the fastest way to look like you are not paying attention, and it happens because exits are easy to forget: the flow works perfectly in testing, where you never complete a purchase.
Rules worth applying:
| Flow type | Must exit on | What it prevents |
|---|---|---|
| Any recovery flow cart, checkout, browse | Purchase — no exceptions | Chasing someone about the thing they just bought |
| Post-purchase | Cancellation or refund | "How are you enjoying your order?" to someone who returned it |
| Win-back | Any order | Treating a returning customer as lapsed |
| Everything promotional | Consider a global suppression for recent buyers | Someone who ordered yesterday getting a promotion today, whatever triggered it |
Re-entry rules and duplicate triggers
Two production problems that only appear once a flow is live.
Duplicate events. Platform webhooks are not guaranteed to fire exactly once. A fulfilment webhook can arrive twice, and a naive flow sends two shipping notifications. The fix is a short re-entry cooldown — an hour is usually enough — so a repeat trigger for the same contact is absorbed rather than acted on.
Re-entry policy. If a shopper abandons a cart in March and again in June, should they get the sequence twice? For cart recovery, yes — it is a new intent. For a welcome series, absolutely not. Set this per flow rather than accepting a default, and set a cooldown even where re-entry is allowed, or a shopper who repeatedly adds and removes items will get messaged repeatedly.
Identity: who can actually be enrolled
This is the constraint that surprises people most, and it explains most "why is my flow reaching nobody" questions.
What raises the identified share:
- Capture email early — a newsletter signup, an account, or a first-step checkout field, rather than only at payment.
- Make sure your tracking passes identity through. An event that fires but carries no email is invisible to enrollment even though it appears in your analytics.
- Stitch sessions. If a shopper identifies themselves at checkout, earlier events in the same session can be attributed to them retrospectively — which turns a browsing session into an enrollable one.
Check this number before you blame the flow. Events arriving and events carrying identity are two different measurements, and only the second one produces enrollments.
Common mistakes
- Building ten flows before validating one. Each live flow is something that can go wrong silently. Get two right, then add.
- No exit conditions. Covered above, and worth repeating because it remains the most common failure.
- Delays copied from a template. A template's timing was tuned for someone else's purchase cycle. Yours is different.
- Branching on data you rarely have. A split on a field that is empty for most contacts sends almost everyone down the default path — and you will not notice, because it still looks like it is working.
- Never auditing live flows. Catalogs change, templates get archived, integrations get disconnected. A flow that worked in January can be silently failing in June. Review each one quarterly.
- Overlapping flows. A shopper who abandons a cart during a welcome series can end up in both. Decide which one wins and enforce it, or they get four messages in a day.
How CampGain runs flows
In CampGain, a flow is an event-triggered campaign built on a visual canvas, separate from scheduled blast campaigns because the two behave differently.
- Start from a template or from scratch. Ready-made flows cover abandoned cart, abandoned checkout, welcome series, post-purchase, review request, win-back, and a transactional WhatsApp set for order confirmation, shipping, and delivery — each shipping with sensible timing and exit events already configured.
- Drag-and-drop graph builder. Message nodes, delays, and conditional splits on a canvas, so the flow you see is the flow that runs.
- Exit events on the trigger. Purchase exits a cart flow; cancellation and refund exit a transactional one. Configured on the flow, not bolted on per message.
- Re-entry cooldowns so duplicate platform webhooks do not produce duplicate messages.
- A readiness panel that checks a flow before you activate it — message nodes with no template chosen, channels with no connected provider, nodes nothing can reach, and abandonment flows with no exit event. Clicking a warning jumps to the node that caused it.
- Mixed channels in one journey. A flow can send email, then WhatsApp, then SMS, using the same merge variables and the same synced Shopify catalog throughout.
- Event ingestion built in — a storefront pixel and Shopify webhooks feed the events that trigger enrollment, with a live feed so you can confirm they are arriving and carrying identity before you go live.
See how flows and campaigns fit together.
Start with one
Build abandoned cart. Two messages, an exit on purchase, and a test where you enroll yourself and then complete the purchase to confirm the second message does not arrive.
Let it run for a month and measure revenue per enrollment. That single flow usually justifies the whole exercise — and it teaches you the mechanics you will reuse on every flow after it. For how these flows fit alongside scheduled sends, see our multi-channel campaign guide; for the audiences behind them, the segmentation guide.