Skip to main content
Merve
Create organisation
Sign inSign up
AI Sales

Design the Outreach Pipeline

AXOL Academy logoAXOL Academy·Published 6 October 2026

Design the Outreach Pipeline

What you'll be able to do after this guide: design the outreach stages as a set of queues defined by CRM fields, decide which agent owns each field, and avoid the most common way multi-agent pipelines break.

Fields are the queues

Each outreach agent finds its work by filtering CRM fields, and finishes by changing them. A company at Review with a blank connection status is waiting for a first touch. A person at Connected with no message date is waiting for a message. Nothing else connects the agents.

Company status, connection status, clock dates and deal stages, showing which agent writes each value

The outreach stages

StagePicks upDoesLeaves behind
3 First touchReview companies whose contact has a profile URL and a blank connection statusCreates a short first-touch task (for example "send a connection request") for a person; on the next run, reconciles the tasks they completedOnce the person confirms: connection status Request Sent, and the date the request was made
4 Acceptance checkPeople at Request SentCompares them with a connections export a person downloads from the platform, for example weeklyConnection status Connected
5 MessagePeople at Connected, company at Review or Contacted, outside cooldownRuns every safety gate, drafts the message for a person to sendAfter the send is confirmed: last message date, company Contacted, deal moved to Contacted
6 Email taskRequest still pending after 7 days; routed to the first channel but untouched for 7 days; or no way to reach them on the first channelCreates one email task with the draftA task, and a marker note so the same contact is never tasked twice
7 Deal syncPeople messaged in the last 3 daysReads replies that reach the CRM (synced emails, and social replies a person logs); a genuine reply becomes a dealA deal at the right stage and a comment summarising the reply

A person carries out actions on social platforms

Several of these stages involve a social platform. Most platforms' terms don't allow bots to connect, message or collect data, so in this design the agents never act on, or read from, the platform directly. Instead:

  • Agents choose who, run the checks and prepare the words, then create a task for a person.

  • The person does the action on the platform and completes the task, adding a short note if anything was different (for example, "they'd already replied").

  • The next run reconciles: it writes dates and statuses only for actions the person confirmed.

  • Acceptances come from a connections export the person downloads, and replies reach the CRM through synced email or a note the person adds.

The agents still do the slow work (selection, research, safety checks and drafting). The person spends a few minutes on the actions.

Rule 1: one field, one meaning, one owner

Every field that acts as a queue or a clock must have exactly one meaning, and ideally one agent that writes it. Write a simple ownership table and put it in every outreach spec:

FieldMeaningWritten byNever written by
connection_statusWhat happened on the social channelStages 3 and 4Stages 5, 6, 7
connection_requested_atWhen the request was first sentStage 3, onceEveryone else
last_touch_dateWhen we last interacted in any light wayStages 3, 4 and 5, after a person confirms the actionStages 6 and 7
last_message_dateWhen we last sent a direct messageStage 5, after a confirmed sendStages 4, 6, 7
prospect_status: ContactedA conversation existsStages 5 and 7, or a person after sending an email taskStage 6 (an email task isn't a conversation)
Deal stage ContactedFirst message sentStage 5 onlyStage 7
Deal stages Responded to ProposalMapped from the real replyStage 7 onlyStage 5

The story behind Rule 1

Our email task agent used to time its seven-day wait from a general "last touch" date. That worked while only the first-touch agent wrote the field. Then we added a weekly re-engagement step for pending prospects to the acceptance check, and it updated the same date. Every re-engagement pushed the seven-day deadline back a week. A prospect who never accepted would never get an email.

The fix was a dedicated date, connection_requested_at, written once by the first-touch agent at the moment of sending and never changed. The email task agent reads only that. The general touch date now means only "when did we last touch them", which is all it can safely mean when several agents write it.

Rule 2: clocks are write-once, and a blank clock is a skip

Any date that starts a countdown must be written once and never overwritten. If an agent finds the clock blank, it must skip the record and name it in the summary, not guess a date. A guessed date decides when a real person gets contacted.

When you introduce a new clock field, ship the agent that writes it first. Then backfill old records only where the old field still means the same thing. Then switch the readers over.

Rule 3: tell each agent what it must not touch

An agent that finds a field it doesn't understand will invent behaviour around it. Our first-touch agent once found a "messaging snoozed until" date that belonged to the message stage. It wasn't mentioned in its instructions, so it cautiously treated the field as "skip this company", and quietly shrank its own pool. The fix was one line in its spec: "This field is not yours. Never read it, never write it, never let it exclude a candidate."

Every outreach spec should have a "fields you must not write" list and a "fields you can ignore" list, each with the reason.

Rule 4: widen the downstream stage first

Before letting an upstream stage send a new kind of prospect onwards, make sure the next stage can handle it. When we let Segment B prospects into the first-touch stage, the message stage didn't yet have a Segment B version. Those prospects would have connected and then stalled: connected, never messaged, and out of the email route too. Build the downstream branch, then open the gate.

Rule 5: give each agent a snooze field

An agent that runs many times a day re-checks the same candidates every run. If a company can't be messaged for a structural reason (for example, you have no relevant page to point them to), it will be rejected again and again, filling the CRM with notes. A company-level "snoozed until" date, written by the agent that snoozes, stops this. When you clear a snooze, set it to empty, not to today: an agent filtering on "snoozed until today or later" will still skip a company snoozed until today.

Next: Safety Rules for Outreach.