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

# Open Deals: what moves them on

> Open Deals: what qualifies one, who owns it, how long it waits and the call that moves it on.

An open [Deal](https://startupbuilder.dev/business/nouns/deal) has a buyer and a value, and waits to be qualified. Most wait 6 days.

## It moves on when
| To | When | The call | Event |
| --- | --- | --- | --- |
| [Qualified](/revenue/deals/status/qualified) | a value, a close date and a dated next step are set | <Op verb="Deal.advance" /> | `Deal.advanced` |
| [Lost](/revenue/deals/status/lost) | the buyer says no, with a reason | <Op verb="Deal.lose" /> | `Deal.lost` |

## Who owns it
| Title | What it does here |
| --- | --- |
| [SDR](/capabilities/how-your-agents-act#sdr) | opens it from an Interested reply or a form, through <Op verb="Lead.qualify" /> and <Op verb="Lead.assign" /> |
| [AE](/capabilities/how-your-agents-act#ae) | takes it once <Op verb="Deal.assign" /> sets `owner` to a person |

## How long it sits
| Median days in it | Deals | Stall line | Past it now |
| --- | --- | --- | --- |
| `6 d` | `8` | `12 d` | `1` |

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

## The call that moves it

```text title="Qualify an Open Deal · Ask"
Which open deals are ready to qualify, and what is missing? Move Birchway Properties on.
```

```ts title="Qualify an Open Deal · SDK"
import { $ } from 'startup-builder'

const { deals } = await $.Deal.list({ where: 'status = "Open"', sort: 'statusSince' })   // oldest first
await $.Deal.advance({ deal: 'deal_36' }, { mode: 'try' })   // Open to Qualified
// 422 · Birchway Properties did not move to Qualified: closesOn and nextStep are empty.
// stage-fields: Fill each field the refusal names, then move the Deal on again. · then Deal.update
await $.Deal.update({ id: 'deal_36', closesOn: '2026-11-14', nextStep: 'Demo with the 4 owners on Oct 22' }, { mode: 'try' })
return await $.Deal.advance({ deal: 'deal_36' }, { mode: 'try' })   // again, with both fields filled
```

```json title="Qualify an Open Deal · Response · sample"
{
  "deal": {
    "$id": "https://api.sb/leaseline.app/deals/deal_36",
    "$type": "Deal",
    "status": "Qualified",
    "value": {
      "amount": 348,
      "currency": "USD"
    },
    "closesOn": "2026-11-14",
    "nextStep": "Demo with the 4 owners on Oct 22",
    "statusSince": "2026-10-19T09:41:00Z",
    "owner": "worker_3"
  }
}
```

## When it won’t move

```json title="422 · sample"
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "Birchway Properties did not move to Qualified: closesOn and nextStep are empty.",
  "checks": [
    {
      "check": "stage-fields",
      "status": "fail",
      "observed": "closesOn, nextStep",
      "doc": "/code/refusals#check-stage-fields",
      "fix": "Fill each field the refusal names, then move the Deal on again.",
      "then": "Deal.update"
    }
  ]
}
```

## Plays that unstick it
| Play | What it does |
| --- | --- |
| [Instant response](/plays/instant-response) | Answers every form and email within 5 minutes from your own pages, books the call, starts the trial or hands it to the right person. |
| [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. |
| [Buying committee](/plays/buying-committee) | Writes to 3 or more roles at each named company, one a week, and hands each engaged company to your AE within a day. |
| [Outbound calling](/plays/outbound-calling) | A disclosed voice agent calls back anyone who asks within 60 seconds and answers your number; a person dials every cold call. |