Skip to content
Expedify
Building AI Agents for Sales, Onboarding and Support

Module · M3 · Make it count: the pipeline

Move the deal: stages that mean something

Lesson 9 of 16 · 9 min

Most pipelines lie. Not deliberately — they lie because a stage was set by optimism rather than evidence. Somebody had a good call, felt encouraged, and dragged the card one column to the right. Multiply that by a year and the forecast is fiction.

An agent will do exactly the same thing, faster and at volume, unless you stop it.

The one idea. A stage is a claim about reality. "Payment Pending" asserts that this person intends to buy. If nobody can point at the sentence where they said so, the claim is false and the pipeline is now wrong in a way nobody will notice for a quarter.

The stages, and what each one actually claims

The eight stages in the seeded pipeline.

Enquiry

The claim it makes
They asked us something.
What proves it
The message exists. That is all.

Preview Engaged

The claim it makes
They consumed something free and came back.
What proves it
They say they finished a free lesson.

Considering

The claim it makes
They are comparing, not browsing.
What proves it
They asked about fit, price or timing.

Payment Pending

The claim it makes
They intend to buy.
What proves it
They said they will, or asked how to pay.

Enrolled

The claim it makes
Money has changed hands.
What proves it
A payment record — not a sentence.

Active Learner

The claim it makes
They have started.
What proves it
Consumption data.

Certified

The claim it makes
They finished and passed.
What proves it
A credential was issued.

Lapsed

The claim it makes
They stopped.
What proves it
Absence, over a defined window.

Preview Engaged is the one most CRMs do not have, and it is the most valuable. It is free to collect, it is the highest-intent signal a content business owns, and it separates someone who read your pricing page from someone who spent forty minutes with your product. If you take one stage from this lesson, take that one.

The build

Desk — move the deal on evidence

The model proposes a stage and quotes its evidence. A node decides whether that claim is allowed to move anything.

NoYes

Scroll for all 7 steps →

Three things are deliberate here. The classifier is given the permitted stage values and told to quote the words that prove its choice — if it cannot quote them, it does not have evidence. It also returns certain, which is its own admission of whether it read or inferred. And evidence_gate is a node, not a sentence in a prompt: an uncertain classification cannot move a deal, whatever the model would prefer.

One more: it is told that when in doubt, choose the earlier stage. A deal behind reality is a smaller problem than a pipeline reporting revenue nobody committed to.

Two conversations, two outcomes

Same person, same workflow, minutes apart.

It moves.

"I finished the free 'Your First AI Agent' course last night, all eight lessons. Really enjoyed it. What would you recommend I do next?"

stage

Value
Preview Engaged

certain

Value
yes

evidence

Value
"I finished the free 'Your First AI Agent' course last night, all eight lessons."

Path taken

Value
evidence_gate → find_deal → move_deal

The deal moved to Preview Engaged, and the quoted sentence was written onto the record as stage_evidence. Anyone who later asks why this deal is at this stage can read the answer off the deal itself.

It refuses to move.

"Thanks for the recommendation — the agents course looks like exactly what I need and I'll definitely be doing it. Just need to sort a couple of things out first."

stage

Value
Payment Pending

certain

Value
no

Path taken

Value
evidence_gate → ask_human

Deal

Value
unchanged

Read that carefully, because it is the whole lesson. "I'll definitely be doing it" would move this deal in most CRMs. It is the single most encouraging sentence a salesperson hears all week. The model reached for Payment Pending too — and then flagged that it was inferring rather than reading. The gate honoured that, the deal stayed put, and a human got a task with the reasoning attached.

Enthusiasm is not evidence. "Definitely", "for sure", "just need to sort a few things out" — these are the sentences that fill a pipeline with deals that never close. The tell is the second clause: an intention with a condition attached is a condition, not an intention.

Two things this build had to get right

  1. A deal's stage has no native field. It can only be set through json_data, as {"stage_name": "..."}. There is no stage input to fill in.
  2. The deal id comes from a query, never from the model. find_deal joins deals to contacts on the email the classifier READ, and returns the id. The first version of this workflow had no lookup at all and tried to update a deal called 'None'. The model may choose which person; it may not author an identifier.

Try it

  1. Write down what each of your stages claims. If two people on your team describe one differently, that stage is already meaningless.
  2. For each, name the evidence that proves it. If the evidence is "the rep thinks so", that is the stage that is lying.
  3. Add a Preview Engaged equivalent if you have anything free. It is the cheapest high-intent signal you will ever collect.
  4. Feed your classifier the most encouraging message you received this month, and see whether it moves the deal.

Next: the deal is honest. Now — when should the desk stop and get a human? That is lesson 10.