Reopen closed-lost deals when the blocker moves
A Kestrel build, tested on test data in our own Attio workspace, not client work. The play reads every deal lost in the last 12 months with its notes, finds the sentence that states the real objection, and runs one cheap check per objection type to see whether the blocker moved. Deals where it moved go on a reactivation list with the evidence, an angle and a task. The rest are parked with a recheck date. The 5 lost deals and their notes were written by us on real companies, and nothing was sent.
Works ifYou lose deals for reasons that expire: a freeze, a missing feature, a contract, a champion on leave.
Built asDeepline PlayMonthly schedulecapped at $0.30 a run
Get the prompt for your coding agentThe system
Attio
Deals lost in the last 12 months
Lost date from the stage history.
Attio
Notes on each deal
No owner, champion absent
New hire since the loss
Budget
Funding after the loss
Freeze, contract, leave
Date rules
Missing feature
Your changelog
Counts only if shipped after the loss.
Deal
real_objection and blocker_moved
Queued
Trigger signal, angle, task
Parked
Recheck date in the signal
The signal
The thing that blocked a lost deal is no longer true.
Why it predicts a purchase
The buyer already saw the product and told you why they stopped. When that reason goes away, the follow-up can name it, which gives them a reason to reply that a cold email doesn't have.
How it works
Pull lost deals with their real lost date
A deals query takes every deal whose stage became Lost in the last 12 months, using the date the Lost stage started in Attio's stage history. The notes on each deal come from the notes endpoint, spaced out because it is limited to 10 calls a second.
Find the real objection
The notes are split into numbered sentences. Jev picks the sentence that states the real reason, then a second question types it: no owner, freeze, missing feature, competitor contract, champion absent, budget or other. Below 0.6 confidence the objection is unknown and nothing is spent.
Check whether the blocker moved
One check per type. A Crustdata person search for a RevOps seat filled after the loss, or a new senior hire when the champion is away. A funding date after the loss for budget. Date rules for a freeze (90 days), a leave (120 days) and a competitor contract (the window opens 90 days before it ends). Your changelog for a missing feature. Crustdata bills per returned row and empty results are free.
Write the verdict to Attio
The deal gets real_objection with the quoted sentence, and blocker_moved. A moved deal goes on the Reactivation list as Queued with the trigger signal and an angle, plus one task for the owner. A parked deal gets the recheck date in its trigger signal.
Build notes
- The seed set every test deal to Lost on the day it ran, so every date rule counted from today and nothing could fire. Lost dates now come from the stage history, and the test deals got their story dates once through Attio's attribute history endpoint, the same write a CRM migration makes.
- A changelog entry first counted as a moved blocker when it shipped any time before today. It now has to have shipped after the loss.
- A PredictLeads tech-detection check was piloted and dropped. On small sites its first-seen dates show when it started crawling the site, not when the company adopted a tool.
- The play reads deal notes only, and the test notes were two short notes per deal that we wrote. The 5/5 shows the method works on clear notes. It is not an accuracy rate on real deals, and call transcripts would give it more to read.
Questions
The CRM already has a lost reason. Why read the notes?
The dropdown is often the polite answer. On one test deal the dropdown said Budget and the follow-up note said nobody would own the tool until a RevOps lead was hired. The play quotes the sentence from the notes and stores it as real_objection next to the dropdown, and the check that follows depends on that sentence.
How does it know a missing feature has shipped?
No data provider knows what you shipped, so the play reads your release notes as a file with an id, a shipped date, a title and a description per entry. Jev picks the entry that delivers what the notes said was missing, and it only counts when it shipped after the deal was lost.
More builds
All builds →Turn a vertical database into a 3-touch outbound engine
A vertical database already lists your buyers with contacts, and a founder will make the closing calls.
Turn website visitors into qualified leads
You already identify companies visiting your site.
Build lists from data you already own
You have a CRM or database you have never fully worked.
The next step