←Attio plays
Your own data

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 for · Kestrel · Attio test workspace
AttioJevDeeplineCrustdataTypeScript

Built asDeepline PlayMonthly schedulecapped at $0.30 a run

Get the prompt for your coding agent

The system

~/builds/attio-closed-lost-reactivation
01Source

Attio

Deals lost in the last 12 months

Lost date from the stage history.

Attio
5 test deals

Attio

Notes on each deal

Attio
10 notes
Jev picks the sentence, then the typeunder 0.6 confidence = unknown, nothing spentJev
02What changed

No owner, champion absent

New hire since the loss

Crustdata

Budget

Funding after the loss

Crustdata

Freeze, contract, leave

Date rules

90 days120 daysrenewal minus 90

Missing feature

Your changelog

Counts only if shipped after the loss.

Jev
Did the blocker move?no = park with a recheck date
03Attio write-back

Deal

real_objection and blocker_moved

Attio

Queued

Trigger signal, angle, task

2

Parked

Recheck date in the signal

3
A reopen with a reason, and a recheck date for every deal that isn't ready.

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

01

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.

02

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.

03

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.

04

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 →
Your own data

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.

Open→
Your own data

Turn website visitors into qualified leads

You already identify companies visiting your site.

Open→
Your own data

Build lists from data you already own

You have a CRM or database you have never fully worked.

Open→

The next step

Let's get started.