Flows: the visual automation builder
Flows are visual automations: a trigger (what starts it) followed by steps (what happens). Build them at Automations → Flows — either as a clean top-to-bottom tree (Guided) or on a free-form canvas you drag and wire (Sandbox). Same flow, two views.
The core design principle: the AI stays the closer. Flows handle the structured opening moves — deliver the link, tag the lead, notify your team — and then hand the conversation to the AI, which takes over completely.
01Which platforms automations run on
Automations run on Instagram and Facebook — the platforms that deliver the inbound events flows react to (comments, DM keywords, story replies, and quiet-lead follow-ups). Story-reply triggers are Instagram-only.
LinkedIn, Reddit and X (Twitter) are posting channels, not DM-automation channels: you publish to them from the Content Studio, but they don't run DM funnels — those platforms don't provide the inbound DM signal a flow needs to fire. Post everywhere; run your DM funnels on Instagram and Facebook.
02Triggers (what starts a flow)
- Someone comments a keyword on your post or reel (optionally a specific post).
- Someone DMs a keyword.
- Someone replies to your story.
- Someone @mentions you — in a comment or a caption (Instagram).
- A lead goes quiet — no reply for a window you choose (with built-in anti-spam fences: it only fires when you spoke last, only for reasonably fresh conversations, and only once per lead per flow).
- Another tool sends a lead here — a private webhook URL unique to the flow; your CRM or any external tool POSTs a lead in and the flow starts. See Integrations.
One flow runs per conversation at a time — a lead can't be in two flows at once.
03How keywords are matched
Keywords match on whole words, not fragments. If your keyword is BOT, a comment saying "robot", "chatbot" or "bottle" will not trigger the flow — only someone actually saying bot does. Matching ignores capitals, so BOT, Bot and bot are the same keyword, and the keyword can sit anywhere in the sentence ("send me the bot pls" counts).
Leaving the keyword list empty means "every message", which is a genuinely different trigger — use it for a general greeter, not for an offer.
⚠️ On a comment trigger, empty keywords means every comment on every post. If that flow also posts a public reply, you'll be replying publicly under every single comment you receive — so SetterStack asks you to confirm before that one goes live. Add a keyword if you only want to answer people who opt in.
If two live flows could both match, the more specific one wins: a flow pinned to one post beats a flow that watches every post, and a keyword flow beats an empty-keyword catch-all. So a broad "reply to every comment" flow will no longer quietly swallow the keyword campaign you built afterwards.
04What a commenter actually sees
A comment and a DM are two different surfaces, and SetterStack treats them that way:
the DM ("sent you a dm 👀"). Short, no pitch, no explaining. The real message is the one that lands in their inbox, where you have room.
chill public acknowledgement. Still no pitch — everyone scrolling the post reads it.
- They commented your keyword → the public reply's only job is to point at
- They commented something else (on a flow with no keyword set) → a brief,
Public replies are capped short automatically and will never contain a link or a price, because those belong in the DM and Meta down-ranks comments carrying links.
One placement rule: Instagram only allows plain text on the message that opens a DM from a comment. So the first message of a comment-triggered flow can't carry images, buttons or a carousel — put a short text step first, then everything else in the message after it.
05Story mentions & shoutouts
When someone reshares or tags your post in their story, that's a shoutout — not a sales lead. Your AI setter recognizes it and won't try to qualify or pitch them (nobody wants a hard pitch for tagging you). Instead, catch it with a "Someone replies to your story" flow and give it a light, warm touch — a 🙏 or a quick "appreciate the shoutout!" — so tags get acknowledged, never sold to. Real DMs, where someone actually asks about what you do, still get worked and qualified normally.
06Steps you can use
- Send a DM — your exact message. Can also carry media — upload an image (≤8MB) or video (≤25MB, MP4/MOV), or paste a public URL — plus tappable buttons (up to 3 — link buttons or ones that send a reply back into the flow) or quick replies (up to 13 suggestion chips). Buttons and quick replies can't be used together in one message. It can also send a carousel — see below. (The size limits are Instagram/Facebook's own DM caps, so anything that uploads is guaranteed to send.) One thing to know about link buttons: Instagram in a web browser shows a button card as just its caption, so a lead reading DMs on instagram.com may not see the button. If they reply that the link didn't come through, SetterStack re-sends it as a plain text link (when Instagram allows links on your account at that moment), which every client displays.
- Reply to their comment — a public comment reply, either exact text or AI-written in your persona's voice (kept short, no links or prices on the public surface).
- Reply to the mention — a public reply when someone @mentions you (Instagram) — exact text or AI-written.
- Hand to AI — the AI takes over the conversation completely. This ends the flow: from here the conversation is the AI's.
- Wait — until they reply, or for a set time.
- Split on what they say — the AI reads the lead's reply and picks one of your labelled paths (e.g. Interested / Not sure / No reply).
- Split on a condition — a Yes / No branch on a fact about the lead: whether they have a tag, are qualified, are in a specific pipeline stage, or came from a particular lead source.
- A/B split — randomly send leads down different paths by weight (e.g. 50/50) to test two openers or offers against each other.
- Add / remove tag, Move pipeline stage — organize leads as they move.
- Set a field — save a value onto the lead's contact record (e.g.
source = instagram-promo). Shows in the CRM and syncs to GHL. - Notify the team — bell notification, plus Slack/Discord ping if connected.
- Hand to human — flags the conversation for a person and pauses automation.
- Call a webhook — send the lead's info to an external URL mid-flow.
- Go to — jump a lead to any other step in the same flow, drawn as a curved connector back to the target. Use it to loop (e.g. "not sure" → wait → back to the split to re-ask) or to funnel several branches into one shared path without rebuilding it. Loops are safe: the engine caps how many times a single lead can jump, so a flow can never run forever.
07Carousels: swipeable cards in a DM
A Send a DM step can send up to 10 cards the lead swipes through, each with its own image, title, subtitle and buttons. It's the closest thing to a landing page that lives inside the DM — no tap away, no page load.
Add cards under Carousel in any Send a DM step:
won't save.
(landscape), so put the important part in the middle.
the flow so the next step can branch on which card they tapped.
- Title — required on every card, up to 80 characters. A card without one
- Subtitle — optional, up to 80 characters.
- Image — upload one or paste a public URL. Instagram crops to 1.91:1
- Buttons — up to 3 per card. Either a link, or a reply that feeds back into
You don't need any message text — a carousel on its own is a complete message. Add a line above it only if the cards need a setup.
A carousel replaces buttons. If a step has both, only the carousel sends. Quick replies are different — those still appear underneath the cards, so a "Not sure yet" chip is a good escape hatch for anyone who doesn't want to swipe.
One placement rule: a carousel can't be the first message of a comment-triggered flow. Instagram only allows plain text to open that DM. Put a short Send a DM step first ("Just sent it 👇"), then the carousel right after — which reads better anyway.
What to put on the cards
button on each. The card they tap tells you what they want without asking.
a different branch — the lead self-sorts and the flow answers accordingly.
- A menu of offers. One card per service, price on the subtitle, "Book"
- Proof. One card per result or testimonial, then a final card with the CTA.
- A qualifier. "Which sounds like you?" with 3–4 cards, each button feeding
Keep it to 3–5 cards unless you have a real reason for more. Ten cards of swiping is a lot to ask of someone who sent you one word.
08Story replies vs. reshares
A story trigger fires on two different things, and they deserve different messages:
- They typed a reply to your story — a real response you can answer.
- They reshared or tagged you without writing anything — a shout-out.
Thanking someone for "replying" when they only reshared reads like a bot. Use the condition step → "They typed a reply (not just a reshare)?" to split them: the Yes lane answers what they said, the No lane just says thanks.
09Restricting a flow to one post
The Restrict to a post ID box on a comment trigger accepts either the id from the post's Instagram URL or the internal one — both work, so a paste from either place matches.
10Two ways to build: Guided or Sandbox
Toggle between two views of the same flow at the top of the builder — the choice is remembered per flow.
- Guided — a clean top-to-bottom tree with inline "+" buttons. The simplest way to build a straight funnel.
- Sandbox — an open canvas you can pan and zoom, laid out like n8n. You can:
- Drag steps in from the left palette — drop one onto a step to attach after it, onto the trigger to make it run first, or on empty space to append.
- Drag steps around to arrange them — your layout is saved with the flow and comes back exactly as you left it.
- Wire a jump — drag from a step that ends a path to any other step to loop or converge (it becomes a Go-to).
- Build branches — a Split shows each of its paths as a labelled drop-zone to build into.
- Right-tools on every step — hover for the ⋯ menu: Duplicate, Delete this action (keeps steps below), or Delete all actions from here.
It's the same flow either way — switching back to Guided just shows it as a tree; nothing about the flow changes.
11Draft → Live
Every flow starts as a Draft and sends nothing. Publishing runs a validation pass (empty messages, unreachable steps, misplaced splits are caught). Flip to Live when ready; flip back to Draft any time to pause new entries.
One rule worth knowing before you publish: if your flow waits for their reply, it must have something that can act on one — a Hand to AI step (or a human handoff / notify). Otherwise your flow asks someone a question and then nobody answers them, which is worse than never messaging at all. Publishing will stop you with:
This automation waits for their reply but nothing handles it — add a "Hand to AI" step, otherwise everyone who replies gets ignored.
Flows that never wait for a reply — deliver a link, tag someone, and stop — are unaffected. That's a perfectly good design; the rule only applies when you've said you're expecting an answer.
Each flow in the list shows when it was created, and the ⋮ menu on the right lets you edit, duplicate, or delete it. Duplicates are born as Drafts with their own webhook token, so copying a Live flow never fires anything by surprise. Deleting a flow exits any leads currently walking it cleanly.
12Test before you trust
Test it simulates a lead walking through your flow — including which branch they'd take — without sending anything real. The simulator is explicit about what it can't fake (waits are skipped; live AI classification happens only in production).
13See what actually happened
Each flow has a per-lead execution log — What happened — showing every step taken for every lead who entered, including anything that was blocked and why. The Stats toggle overlays per-step counts on the canvas so you can see where leads drop off.
14Classic rules
Simple keyword→DM rules from before the flow builder live under the Classic rules tab and keep working. New automation should be built as flows — they're strictly more capable.
Each classic rule has an "Only for people who aren't leads yet" checkbox — turn it on to skip the rule for anyone the AI has already marked a lead, so a keyword rule aimed at new commenters doesn't keep re-firing on someone already in your funnel.
Ready to use this?
It's live in your workspace right now.
