Sequences and steps
The Sequence tab has two interchangeable views that edit the same underlying steps: List view, a straightforward step-by-step editor, and Canvas view, a visual node builder for sequences with branching logic. Switching between them doesn't lose your work — both read and write the same campaign steps.
On this page
List view
List view is the default. A toolbar shows the step count, the view toggle, Sequence Copilot, and Add step; below it, every step is a collapsible row.
Clicking a row expands it in place to preview whichever variant tab is selected; the pencil icon opens the full step editor. The badge (A, or a range like A–C) shows how many variants that step has. When a campaign is live, adding a follow-up only queues it for leads who already received the prior step and are still eligible; if the campaign is paused, step edits save immediately but nothing sends until you resume it. Deleting a step is blocked while the campaign is Active — you have to pause first.
No steps yet
Add your first email step to start building this sequence
Add stepThe step editor
Editing a step opens a full-screen editor: a narrow variants/timing sidebar on the left, the subject and body editor and a live preview side by side in the middle, a score/analysis bar pinned along the bottom, and the AI Assistant panel along the right edge.
Variants
Wait days
Same thread
Subject
Body
Smart Fields on this template
✦ Headcount > 500Saw Acme Systems is hiring SDRs
Hi Sarah, I wanted to reach out about your growing team's outbound…
Same thread is disabled on Step 1 (it always starts a new thread) and only toggleable on follow-ups. Preview isn't a button you click — the panel on the right sits beside the editor at all times and re-renders as you type, with a lead picker and Gmail/Outlook client tabs so you can check how the resolved copy actually looks before saving. The bottom bar is a live spam/quality score — green at 80+, amber at 60+, red below that — next to word, link, and variable counts, and it flags risky words with a suggested alternative when it finds any, giving you a live read on spam risk right as you write.
Merge tags and spintax
Two different syntaxes resolve at send time, and they're deliberately different shapes so neither can ever be mistaken for the other:
- Merge tags with fallbacks — single braces,
{firstName|there}— pulls in the contact's real first name if one exists; if it's blank, the literal fallback text after the|is used every time. Recognized fields arefirstName,lastName,company,email,name, and any workspace custom field by its own key. - Spintax — double braces,
{{Hi|Hey|Hello}}— picks one option at random on every single send, with no fallback concept at all. Spintax groups can nest — an inner group resolves first, and the result is spun again as part of the outer one — and each|-separated option is equally likely, with no limit on how many you list.
{name} is a convenience field, not a raw contact column: it resolves to the contact's first name if one exists, and falls back to their email address otherwise — it's never blank, so writing {name|fallback} is redundant. A merge tag left with no fallback at all, like a bare {firstName}, renders as an empty string when the field is blank, not any implicit word like "there" — write {firstName|there} explicitly if you want that.
Merge tags and spintax are told apart by their braces, not by guessing at word content — a single-brace block is always a merge tag, a double-brace block is always spintax, full stop. There's no "is this word a real field name" check involved anymore, so a spintax option that happens to match a field name (like {{email|test@example.com}}) still spins normally between its two literal options instead of silently collapsing into merge-tag-with-fallback behavior. One more edge case worth knowing: a merge tag's fallback can itself contain a literal | — {company|the team, or whoever's reading this} takes everything after the first | as fallback text verbatim, it does not turn into a multi-option spin.
Smart Fields
A merge tag swaps in one value per contact. A Smart Field goes a step further: it evaluates a condition and swaps in one of two literal blocks of text — a Then and an If none — depending on whether that condition is true for the contact. Where {firstName|there} always resolves to the same shape of output, a Smart Field lets the sentence itself branch.
Click Smart Field — it sits next to the merge-tag chip row under both the Subject and Body fields — to open the builder. It's disabled until the step has been saved at least once; a Smart Field attaches to a specific step (or variant), so there has to be a step row in the backend for it to attach to.
Field type
Field
72% of active leads have this field (144 of 200)
Operator
Value
Then — shown when the condition matches
If none — fallback when it doesn't
There are three field-type modes:
| Mode | What it checks | Notes |
|---|---|---|
| Built-in | firstName, lastName, company, email, name | The same fixed fields merge tags use |
| Custom / enrichment | Title, Seniority, Company Industry, Company Headcount, Founded Year, LinkedIn URL, Company Description | A live coverage line shows {percentage}% of active leads have this field as soon as a field is picked, and the dropdown only lists fields that actually have data somewhere in the workspace |
| Tag | Whether the contact has a specific workspace tag | Presence-only — no operator or value, just "has the tag" or not |
For Built-in and Custom/enrichment fields, the operator set is:
| Operator | Meaning |
|---|---|
= | Equals |
contains | Contains |
> | Greater than |
< | Less than |
before | Before date |
after | After date |
Every Smart Field follows the same Then / If-none pattern: Then is the text inserted when the condition is true (or the tag is present), If none is the fallback inserted otherwise — both are required, there's no such thing as a Smart Field with only one branch. Saving inserts a {smart:<id>} token at the cursor, a third bracket shape alongside single-brace merge tags and double-brace spintax, so it can never be confused with either. Once inserted, existing Smart Fields on that template show as chips underneath the field — clicking one reopens the builder to edit or delete it.
To learn the pattern rather than read about it, open the builder's ? icon: it offers four quick-start templates (by headcount, founding year, seniority, and industry) plus a tag-based one, and a Play demo button that fills the form in for you step by step.
Smart Fields live in both step editors — List view's step modal and Canvas view's per-node edit panel — and whichever ones exist on a step's active variant show up as a short summary line on that step's Canvas card, e.g. "Smart Field: Headcount > 500" or "Smart Field: Has tag VIP".
Variants
Each step supports up to 5 variants, labeled A through E, each with its own subject and body. Add variant appends the next free letter; the variant tabs appear once a step has more than one.
Per-variant analytics and winner selection do exist — just not on this page. Analytics' campaign workbench breaks each step's performance down by variant (sent, replied, bounced, and more) and has a manual Set as winner action per variant. Setting a winner deactivates every other variant on that step going forward — leads reaching this step afterward only get the winning copy; sends that already went out aren't rewritten, and there's no minimum sample size required before you can set one. Winner selection is always a manual click — there's no AI or threshold-based auto-pick to do it for you. Since any active variant can still go out to a real lead, treat each one as production-ready copy, not a scratchpad draft.
The AI Assistant panel
The step editor's right-hand rail carries a separate, always-present AI Assistant panel — distinct from Sequence Copilot, which drafts a whole sequence up front. The panel works on the one step already open in front of you, and its actions share one monthly quota of their own, separate from Copilot's: 30 generations/month on Starter, 100 on Growth, 300 on Scale, and unlimited on Agency and Self-Hosted plans.
Campaign context
Outbound scheduling tool for agencies…
VP Sales at Agency · Client scheduling
Generate step
Launch issues
Spam-sounding phrase
Suggest rewrite
Campaign context is captured once per campaign, not once per step — company description, target ICP (job title, company type, company size), your offer, and a tone, the same tone options Sequence Copilot uses. Every panel feature below reuses this same saved context, so you're not asked to re-describe your offer on every step; clicking Edit reopens the same form to update it.
Rewrite selection takes whatever text you've highlighted in the subject or body field and sends back an AI-rewritten version, shown as a before/after with Accept and Discard — nothing is applied to your draft until you accept it. Suggest rewrite is the same underlying rewrite call, offered automatically next to each flagged issue under Launch issues below — one click rewrites just the flagged phrase in place of asking you to select it yourself.
Launch issues doesn't run a new AI-invented quality score — it's the same spam-word detection and variable-coverage checks already shown in the bottom score bar, plus any campaign-level blockers from preflight, all surfaced together in the rail with a View in preflight link for anything that needs fixing outside this step.
Rewrite selection, Suggest rewrite, and Generate step all draw from one shared monthly quota, separate from Sequence Copilot's own generation limit: 30/month on Starter, 100/month on Growth, 300/month on Scale, and unlimited on Agency and Self-Hosted plans. Copilot's quota covers drafting whole sequences; this panel's quota covers everything you do to one step at a time.
Rehearse
Rehearse renders this step's actual current subject and body against a real sample of the campaign's own contacts — not an AI call, so it costs nothing and doesn't touch any generation quota. It's a live check of what your merge tags, spintax, and Smart Fields will actually resolve to for real people, using the exact same rendering the single-lead preview already uses, so a rehearsed result can never disagree with what preview shows for that same contact.
A stepper next to the Rehearse button sets the sample size from 3 to 10 contacts, sampled at random from the campaign's real, already-loaded lead list; a campaign with fewer contacts than the sample size shows all of them and says so. Resample draws a fresh random set at any time.
Dana Okafor
Saw Nimbus Robotics is hiring SDRs
No name or email on file
Saw {company} is hiring SDRs
Each contact's card shows the fully resolved subject and body plus a table of every merge variable this step uses — the real value if the contact has one, or "Fallback / blank" if it doesn't. Below that, an Enrichment section states plainly what's available for any gaps found: a contact missing an email can be filled in through Email Enrichment at its real cost of $0.05 per attempt (not guaranteed to find a result); any other missing field simply has no priced enrichment product today, stated the same way rather than left unexplained. A contact with no gaps at all just shows "No gaps — nothing to enrich."
Generate step
Generate step turns a one-line brief into three genuinely different full drafts for the step you're editing — a faster way to explore angles than writing each one by hand. Type what the step should be about and click Generate; ForgeSend first shows a real cost estimate before anything runs.
Ready to generate 3 drafts
- · Problem-led
- · Trigger-led
- · Direct-value
Estimated cost ceiling: $0.0142 (real per-token price, worst case)
The estimate's cost ceiling is a real number, not a placeholder guess — ForgeSend counts the actual tokens the generation prompt will send and prices the worst case against the full output budget, so the real charge is usually lower than what's shown, never higher. Confirming runs one AI call that plans and writes all three drafts together, handed to a full-canvas comparison view in place of the editor:
Saw {company} is hiring SDRs
Use this angleSaw {company} is hiring SDRs
Use this angleSaw {company} is hiring SDRs
Use this angleEvery draft is scored with the exact same spam-word and variable-coverage checks as the step editor's own score bar and preflight — never a separate AI-invented quality score. Clicking Use this angle applies that draft's subject and body to the step; the two you didn't pick aren't lost — they're saved under Other angles back in the rail, ready to reuse later.
Which three angles you're offered isn't fixed — ForgeSend only proposes what your campaign's real data can actually support:
| Angle | When it's offered |
|---|---|
| Problem-led | Always available |
| Trigger-led | Only when a real field like seniority, industry, headcount, or job title is populated for a genuine majority of the campaign's active contacts — never offered against a mostly-empty list |
| Proof-led | Only when your offer or company context already contains a real, quantifiable stat — a percentage, a multiplier, a currency figure, or a concrete count with an outcome. ForgeSend never invents a statistic to unlock this angle |
| Direct-value | Always available |
| Diagnostic | Always available |
Direct-value and Diagnostic are the two guaranteed fallbacks, so there are always at least three real angles to choose from even when Trigger-led and Proof-led aren't supported; when your brief itself reads as exploratory (e.g. it asks a question or reads unsure), Diagnostic is offered ahead of Direct-value. Any angles saved to Other angles persist on the step even after you close and reopen the editor.
Canvas view
Canvas view opens as a full-screen overlay over the builder — a drag-and-drop node editor built for sequences with branching, not just a straight list. A left-hand palette offers four node types.
Send an email to the lead
Branch on reply sentiment, clicks, or opens
Used with conditions — coming soon
Finish the sequence
Drag nodes to canvas · Connect via handles · Pan on empty space
Per-step wait days (set in the step editor) are the only supported delay mechanism today. Automation Wait appears in the palette as a preview of a future automation feature — it's disabled from being dragged onto the canvas. An older saved canvas that already has one still displays and can be edited, but the canvas won't save while any Automation Wait node is present.
An Email Step node on the canvas shows a green top accent, a Step N badge, the subject line, a 2-line body preview, and a footer reading either "Send immediately" or Wait N days.
Noticed {company} is scaling the sales team
Hi {firstName|there}, I wanted to reach out about…
If the step has any Smart Fields on its active variant, the card adds one more line below the timing footer — a sparkle icon and a ·-joined summary of each one, in the same condensed form the step editor's own chips use (e.g. Headcount > 500, or Has tag VIP for a tag-based check).
An End node is a plain terminal marker — red top accent, a stop icon, and a static "Sequence complete" caption; it has no editable fields, and nothing may connect after it.
Branching on Condition nodes
A Condition node is where branching actually happens. Placing one and picking a condition type reveals a list of colored, individually-connectable outcomes.
Reply sentiment
Only three condition types exist, and each has its own fixed outcome set — there's no generic yes/no branch:
| Condition type | Outcomes |
|---|---|
| Reply sentiment | Interested, Not interested, Out of office, Objection, Question, No reply, Unclassified |
| Clicked link | Clicked, Not clicked |
| Opened email | Opened, Not opened |
A Condition node produces no email of its own — it tags the step before it, and each outcome connects onward to its own independent chain of steps. Connections between nodes are dashed, animated lines that turn green when selected; hovering one reveals a small × button to delete just that connection. Branches can fan out from a Condition node, but they can never reconverge back onto the same downstream node — that's flagged as an error before you can save.
How branching actually runs
Branching isn't just a compiled diagram — it's a real, currently-executing mechanism. After a branched step sends, ForgeSend schedules a check rather than the next email immediately: once that step's wait days have fully elapsed (plus a small fixed buffer), a background job picks it up — checked once a minute, not instantly — and looks at what the lead actually did:
- Clicked link and Opened email are read from real tracking data on that specific send.
- Reply sentiment is read from the AI classification already applied to inbound replies in Reply Box. If the most recent reply hasn't been classified yet, ForgeSend fires one AI reclassification attempt on the spot before falling back to Unclassified — it doesn't just give up on the first pass.
— and only then creates the next send job down whichever outcome matches. If a reply comes back Out of office or Unclassified, ForgeSend pauses that lead for human review rather than guessing, and a human can resume it down a chosen outcome immediately or, for OOO with a detected return date, schedule it to resume automatically once that date arrives.
On a campaign created by duplicating another one, a branch step can occasionally land on a child step that's blocked by ForgeSend's cross-campaign duplicate-content guard, since the clone's content may already have gone out from the original. That's not a dead end: ForgeSend records the blocked step as skipped, auto-resolves any Condition sitting on it to a "no action taken" outcome (not clicked / not opened / no reply — never a positive outcome for content that was never actually sent), and keeps walking forward until it finds a step that's genuinely eligible or the branch runs out. A lead only ever visibly stalls once the whole remaining branch has been exhausted this way, not on the first blocked step it meets. This only applies to duplicated campaigns — a first-run campaign never hits this guard.
Sequence Copilot
Sequence Copilot drafts a full sequence from six required inputs: company context, a target ICP, your offer, a goal, and a tone, plus two more controls that shape the output. Company context comes either from a website URL — Fetch turns it into a description automatically — or a manual description you type yourself; either way, some company context and an offer are both required before Generate sequence unlocks.
Sequence Copilot
Company context
ICP job title
Company type
Company size
Offer
Goal
Tone
Sequence length
Spintax variations
12 of 50 AI generations used this month
Generate sequenceFour goals (Book a meeting, Get a reply, Drive to a link, Re-engage cold leads) and four tones (Professional, Conversational, Direct, Challenger) are available, alongside sequence length (2–7 steps) and spintax variations per block (2–4, how many {{a|b}}-style options Copilot writes into each spun line). Generation is metered per workspace per month by plan — 20/month on Starter, 50/month on Growth, unlimited on Scale, Agency, and Private Deployment — and usage shows as {used} of {limit} AI generations used this month when a plan limit applies. Regenerate this step (single-step regeneration) counts against the same monthly total, not a separate one. Copilot output — including spintax variations it writes in — is a draft: review the copy and branching before the campaign reaches launch review.
Where to go next
Next: Scheduling