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 has its 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 | the buyer accepts the Quote | POST /{namespace}/deals/{deal}/win | Deal.won |
| Lost | the buyer says no, with a reason | POST /{namespace}/deals/{deal}/lose | Deal.lost |
Who owns it
| Title | What it does here |
|---|---|
| AE | closes it, and holds every Discount approval under your Limit |
| You, as head of sales | 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
You, to your agent
Which proposals are stuck, and which can we close today? Mark Maple Street Homes won.
curl "https://api.sb/leaseline.app/deals?where=status%20%3D%20%22Proposed%22&sort=statusSince" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
curl -X PATCH "https://api.sb/leaseline.app/deals/deal_24?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"nextStep":"Call Oakmont Rentals’ owner on Oct 21 about the start date"}'
curl -X POST "https://api.sb/leaseline.app/deals/deal_27/win?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"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
npx startup-builder do Deal.list --json '{"where":"status = \"Proposed\"","sort":"statusSince"}'
npx startup-builder do Deal.update --json '{"id":"deal_24","nextStep":"Call Oakmont Rentals’ owner on Oct 21 about the start date"}' --try
npx startup-builder do Deal.win --json '{"deal":"deal_27"}' --try{
"name": "do",
"arguments": {
"code": "const { deals } = await $.Deal.list({ where: 'status = \"Proposed\"', sort: 'statusSince' }) // Oakmont Rentals has sat 26 days, past the 22-day stall line\nawait $.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\nreturn await $.Deal.win({ deal: 'deal_27' }, { mode: 'try' }) // Maple Street Homes signed",
"mode": "try"
}
}Response200
application/json{
"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"
}
}
samplePreviewWhen it won’t move
{
"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 | every send to the Deal until a person acts | Agree a dated next step with the buyer, or lose the Deal with its reason. | PATCH /{namespace}/deals/{id} |
Plays that unstick it
| Play | What it does |
|---|---|
| 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 | 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 | 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 | 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. |
Compiled, not written: edit its page, then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.