URL: /revenue/deals/status/lost · Id: `page:/revenue/deals/status/lost`

# Lost Deals: what moves them on

> Lost Deals: the reasons ranked, who owns them, and the call that re-opens one when its reason is answered.

A lost [Deal](https://startupbuilder.dev/business/nouns/deal) keeps its reason. It re-opens as a new Deal when a shipped fix or [Offer](https://startupbuilder.dev/business/nouns/offer) term answers that reason.

## It moves on when
| To | When | The call | Event |
| --- | --- | --- | --- |
| A new Open Deal | a shipped change or Offer term answers its lost reason, and lead reactivation writes to them | <Op verb="Deal.create" /> | `Deal.created` |

## Who owns it
| Title | What it does here |
| --- | --- |
| [AE](/capabilities/how-your-agents-act#ae) | records the reason with <Op verb="Deal.lose" /> |
| [SDR](/capabilities/how-your-agents-act#sdr) | re-opens it through lead reactivation, counted on Deals and trials opened |

## How long it sits
| Deals | Window | Median days to get here | Stall line |
| --- | --- | --- | --- |
| `14` | 90 days | sales cycle, Not live yet, [gaps #2](/code/reference#not-live-yet) | none: it is a final Deal status |

| Lost reason, ranked | Deals | ARR lost | The Play that answers it |
| --- | --- | --- | --- |
| `price` | `5` | `−$5,827 ARR` | [Risk-reversal offers](/plays/risk-reversal-offers) |
| `no-decision` | `3` | `−$3,087 ARR` | [Buying committee](/plays/buying-committee) |
| `missing-capability` | `2` | `−$694 ARR` | [Lead reactivation](/plays/lead-reactivation) |
| `timing` | `2` | `−$694 ARR` | [Lead nurture](/plays/lead-nurture) |
| `competitor` | `1` | `−$347 ARR` | [Switch kit](/plays/switch-kit) |
| `no-fit` | `1` | `−$347 ARR` | [Positioning tournament](/plays/positioning-tournament) |

The stall line is twice the median, read from each Deal’s `statusSince` · sample

## The call that moves it

```text title="Re-open a Lost Deal · Ask"
Which lost deals can we re-open now? Re-open the one whose missing feature shipped, and record why the last one was lost.
```

```ts title="Re-open a Lost Deal · SDK"
import { $ } from 'startup-builder'

const { events } = await $.Event.list({ where: 'name = "Deal.lost" and at >= "2026-07-21"', limit: 14 })   // each with its free-text reason
const reopened = await $.Deal.create({ organization: 'organization_9', value: { amount: 348, currency: 'USD' }, nextStep: 'Bulk renewals shipped Oct 9: show it to Cedar Grove on Oct 24' }, { mode: 'try' })   // lead-reactivation re-opens a Deal once a shipped change answers its reason
return await $.Deal.lose({ deal: 'deal_29', reason: 'Went with the tool their property manager already uses', lostReason: 'competitor' }, { mode: 'try' })   // the typed reason beside the free text · Not live yet, gaps #2
```

```json title="Re-open a Lost Deal · Response · sample"
{
  "deal": {
    "$id": "https://api.sb/leaseline.app/deals/deal_29",
    "$type": "Deal",
    "status": "Lost",
    "value": {
      "amount": 348,
      "currency": "USD"
    },
    "statusSince": "2026-10-19T11:30:00Z",
    "lostReason": "competitor"
  }
}
```

## When it won’t move
| Needs | Today | Mark |
| --- | --- | --- |
| a typed lost reason beside the free text | <Op verb="Deal.lose" /> with a free-text `reason` | Not live yet, [gaps #2](/code/reference#not-live-yet) |

## Plays that unstick it
| Play | What it does |
| --- | --- |
| [Lead reactivation](/plays/lead-reactivation) | Writes once to each old Lead nobody works, only when something new answers what they asked, from their last contact at the Startup. |
| [Lead nurture](/plays/lead-nurture) | Follows up each unbought Lead with notes keyed to what they did, most in month one, until they buy, reply or go quiet 90 days. |
| [Switch kit](/plays/switch-kit) | Wins your rival’s users with an importer tested on its exports and a dry run they see first, stating no rival fact without a source. |
| [Positioning tournament](/plays/positioning-tournament) | Tests three ways of saying what you do, as ads that differ in one phrase, and counts only signups that fit and act. |