Back to landing
Product · Workflow Engine

One source in.
A graph of intent out.

Workflows are how you wire campaigns together, who gets in, what happens to them, when to pause, when to hand off. Twenty-plus nodes you can stack, branch, and react with. Plus one wildcard that takes a prompt.

Small AI-first outbound agencies— Outreach
Can you convert the last node with a manual step in between?
01:08 PM
U
Done - I've replaced the inline AI message with a craft → review → send pattern. Claude drafts the discovery message first, you review/edit/approve it manually, and only then does it get sent.
01:08 PM
Do you see reactive nodes? I feel like the wait 4 days + "accepted connection" if could be replaced by that reactive node.
01:09 PM
U
Yes - the linkedin:reactive node is perfect here. It parks the lead and waits for the LinkedIn connection-accepted event to fire, then automatically advances. Removes the arbitrary 4-day wait. I've updated the workflow.
01:09 PM
2 sources
Lead Source
Entry Point
347 leads
Manual → Campaign Pool
View Profile
LinkedIn
Wait 2 Days
Flow
Connection Request
LinkedIn
Wait for Acceptance
LinkedIn
Draft Discovery Message
AI
Human Review
Send Message
LinkedIn
01 · How you start one

Three ways in. Same editor on the other side.

However you scaffold, you land in the same canvas, so the skill you build on a template carries over to a blank one, or one the agent wrote for you.

With AI
Describe the outcome you want. The agent lays out a workflow. Same interface as campaign creation - chat on one side, live workflow on the other.
From template
Pick from curated workflows - cold outreach, inbound reply, event follow-up, conference warm-up. A reasonable default you can edit from.
Blank canvas
Drop straight into the editor with just a Source node. For people who already know what they want to build.
02 · The source node

Every workflow has one Source.
It does more than it looks.

Stack as many providers as you want. Cap per day. Exclude leads by rule. Choose whether to fill in order or by score. Nothing about who enters the workflow is hidden behind a modal.

Source node configuration
Daily cap 80
Providers (stacked, in order)
1
Enterprise SaaS ICP - Dynamic
score > 70, not-yet-contacted
dynamic
2
Clay export - Nov 12
428 leads
static
3
Zapier · webinar signups
trailing 7 days
webhook
Processing order
Exclusions
In another campaign ICP < 50 Competitor domains Unsubscribed
What the node feeds forward · today
Dynamic · ICP > 7042 candidatesClay export428 candidatesZapier webhook7 candidatesDaily cap80 / 80→ into workflow
03 · Lead lists

Static is a snapshot.
Dynamic is a query.

Two list types, one for handpicked imports, one for live audiences that recompute themselves. A workflow source can take either, and a dynamic list can reference other dynamic lists up to three levels deep.

Static lists
Snapshot · manual curation

A fixed set of leads you added explicitly. Leads stay until you remove them. Order is by insertion time.

How leads get in
  • CSV import
  • Manual add
  • Webhook push
  • Workflow output
  • Apollo / LinkedIn sync
Dynamic lists
Saved filter · auto-refresh hourly

A saved query, not a stored list. Evaluates include/exclude sources plus rules, recomputes on its own.

INCLUDE Clay export · Nov 12
EXCLUDE Already contacted
WHERE icp_score > 70
Last refresh 14m agoNests 3 levels deep
04 · The node library

Twenty-plus nodes. Six categories.

Grouped by what they actually do, not where they live in the UI. Every node is either an action, a decision, a pause, or a bridge to something outside CampaignStack.

LinkedIn actions
Every action a human could take on LinkedIn.
All nine run inside a real browser session - same session rules, same safety caps as a human would hit. Not an API that'll get your accounts restricted.
Profile View
Visits the lead's profile.
Post Like
Likes their most recent post.
Post Comment
Comments on the latest post.
Connection Request
No note, static note, or AI-generated.
Send Message
Direct message, template or AI-written.
Inbox Read
Reads the latest thread activity.
Research & Message
Browses then DMs in one session.
Refresh Relationship
Checks 1st/2nd/3rd degree before acting.
Handle Signal Intent
Default reply when a lead engages.
AI / Craft
Generate content without opening a browser.
Pure generation - no browser session, no LinkedIn action cost. The output is consumed by the next node (or a Review node). Voice is per-account, same as the Signal Agent.
Craft Connection Note
≤ 300 chars, personalized.
Craft Message
Full outreach message.
Craft Comment
Relevant reply to their latest post.
Reply to Conversation
Contextual follow-up on an existing thread.
Autonomous Agent
Free-form prompt → up to 5 actions.
Flow control
The boring but necessary three.
Wait breaks up sequences. Filter drops leads that no longer fit. Condition branches. Nothing fancy - but without them the graph is linear and stupid.
Wait
Pause for a duration.
Filter
Drop leads that don't match.
Condition
yes / no branches.
Review
A human checkpoint, wired directly into the graph.
The Review node is its own step - not a setting on another node. You choose: auto-send, or craft \u2192 review \u2192 send in three explicit nodes. Reviews land in a shared queue; any teammate with access can approve, edit, or reject.
Review Content
Pause → approve / edit / reject → resume.
Reactive \u00b7 park & wait
Park the lead. Wake when LinkedIn says something.
A Reactive node sits and waits for an event - connection accepted, message received, timeout - then exits through the matching branch. This is how the graph models real conversations instead of pretending they're linear.
Reactive
Park → wake on event, 5 exit branches.
Reactive Responder
Agent reads the new message, decides.
External \u00b7 push outside CampaignStack
Get leads into the tools your team already uses.
Some of these ship today, some are on deck. The email integration is built on Instantly - you send, we log the send, replies aren't read back yet.
Webhook
POST the lead to any URL.
HubSpot
Create or update a contact.
Soon
Slack message
Notify a channel or DM.
Soon
Telegram
Send to a chat or channel.
Soon
Email (Instantly)
Send outbound email - replies not yet read back.
Soon
05 · Reactive, in detail

A reactive node has five ways out.

Most workflow tools pretend outreach is linear, send, wait, send again. Real conversations branch. Reactive nodes park the lead and fan out based on what actually happened.

Reactive node
status: waiting for event
7 leads parked · oldest 2d 14h
Sent message
AI responded to the lead.
Meeting scheduled
AI booked a meeting.
Needs human
AI escalated - too complex.
No action
AI was triggered but did nothing.
Timeout
Nothing happened in the window.
06 · The wildcard

The Autonomous node.
Write a prompt. It runs per lead.

Instead of drawing branches, write the behavior you want in plain language. The agent runs the prompt against each lead that reaches the node, interpreting your conditionals, filters, and stop rules. Up to five LinkedIn actions per lead, no browser calls off-platform.

Autonomous nodeRuns per-leadMax 5 actions · LinkedIn-only2000-char prompt Validated at save
Your prompt · written once
Visit the lead's LinkedIn profile to trigger a notification. Then read their most recent post and like it only if the content is relevant (outbound, lead gen, AI, agency growth, or business). Don't comment. End the session after these two actions.
The agent runs this prompt for every lead that reaches the node. Conditionals, filters, and stopping rules are all expressed in plain language - no branches to draw.
Execution trace · lead 1 of 2
Maya Chen
Maya Chen
Head of Growth, Orchard
Latest post
“Why outbound agencies are under-investing in AI tooling”
Profile View
Visited - notification dropped.
Read latest post
Topic: AI tooling for outbound. Classified as relevant.
Post Like
Liked.
Session end
Two actions taken, as specified.
07 · Execution

What's visible while it runs.

Every node is a queue. Every lead in it has a status. Nothing silent, nothing hidden, if something failed, you see it. If a lead's parked, you see how long.

Every node has its own queue. Every lead has a status.
Waiting
In the queue, ready to be processed.
Processing
An action is currently running.
Completed
Action finished - lead moves on.
Failed
Stays in the queue, no auto-retry.
Pending Review
Waiting for a human to approve or reject.
Waiting for Event
Parked until LinkedIn fires a trigger.

Build your first workflow.

Start from a template, have the agent scaffold one, or drop straight into a blank canvas.

Start free trial