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

# Proposed Deals: what moves them on

> Proposed Deals: what closes one, who owns it, how long it sits, and the stall line that marks a quiet one.

A proposed [Deal](https://startupbuilder.dev/business/nouns/deal) has its [Quote](https://startupbuilder.dev/business/nouns/quote). It ends won or lost, and the stall line marks one that goes quiet.

## It moves on when
| To | When | The call | Event |
| --- | --- | --- | --- |
| [Won](/revenue/deals/status/won) | the buyer accepts the Quote | <Op verb="Deal.win" /> | `Deal.won` |
| [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 |
| --- | --- |
| [AE](/capabilities/how-your-agents-act#ae) | closes it, and holds every Discount approval under your Limit |
| [You, as head of sales](/capabilities/how-your-agents-act#founder) | approves a price below the floor |

## How long it sits
| Median days in it | Deals | Stall line | Past it now |
| --- | --- | --- | --- |
| `11 d` | `3` | `22 d` | `1` |

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

## The call that moves it

```text title="Close a Proposed Deal · Ask"
Which proposals are stuck, and which can we close today? Mark Maple Street Homes won.
```

```ts title="Close a Proposed Deal · SDK"
import { $ } from 'startup-builder'

const { deals } = await $.Deal.list({ where: 'status = "Proposed"', sort: 'statusSince' })   // Oakmont Rentals has sat 26 days, past the 22-day stall line
await $.Deal.update({ id: 'deal_24', nextStep: 'Call Oakmont Rentals’ owner on Oct 21 about the start date' }, { mode: 'try' })   // a dated next step lifts the stall
return await $.Deal.win({ deal: 'deal_27' }, { mode: 'try' })   // Maple Street Homes signed
```

```json title="Close a Proposed Deal · Response · sample"
{
  "deal": {
    "$id": "https://api.sb/leaseline.app/deals/deal_27",
    "$type": "Deal",
    "status": "Won",
    "value": {
      "amount": 348,
      "currency": "USD"
    },
    "closesOn": "2026-10-19",
    "statusSince": "2026-10-19T10:12:00Z",
    "owner": "worker_3"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_15",
    "operation": "Deal.win",
    "status": "done",
    "mode": "try"
  }
}
```

## When it won’t move
```json title="The stall Stop on Oakmont Rentals · Not live yet, gaps #2 · sample"
{
  "name": "Campaign.paused",
  "data": {
    "reason": {
      "limit": "stalled-deal",
      "observed": "26 d in Proposed, no dated next step",
      "bound": "22 d",
      "window": "statusSince"
    },
    "on": "deals/deal_24"
  }
}
```

| Stop | Pauses | Fix | Then |
| --- | --- | --- | --- |
| `stalled-deal` · Not live yet, [gaps #2](/code/reference#not-live-yet) | every send to the Deal until a person acts | Agree a dated next step with the buyer, or lose the Deal with its reason. | <Op verb="Deal.update" /> |

## Plays that unstick it
| Play | What it does |
| --- | --- |
| [Risk-reversal offers](/plays/risk-reversal-offers) | Takes the risk off the buyer: a written results-or-free bar, a 14-day top-tier trial with no card, a one-press refund and free data moves. |
| [Paid pilot](/plays/paid-pilot) | Runs your product on the buyer’s own data for a fee, against pass marks no higher than they already saw, signed before it starts. |
| [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. |
| [Closer handoff](/plays/closer-handoff) | Hands a large Deal that stalled twice to a commissioned closer, paid only on collected revenue, and tests it against the Deals your agent keeps. |