URL: /revenue/instant-response · Id: `page:/revenue/instant-response`

# Instant response: answer in 5 minutes

> Answer every form, email and chat within 5 minutes, route it to its owner and book the call.

Instant response answers every form, email and chat within 5 minutes, routes it to its owner and books the call. It costs $0.04 an answer and $0.06 a lookup (sample).

```text title="Ask"
Birchway Properties filled our demo form. Answer it within 5 minutes, route it to our AE and book the call. Do not send.
```

```ts title="SDK"
import { $ } from 'startup-builder'

await $.Lead.qualify({ lead: 'lead_47', offer: 'offer_2' }, { mode: 'try' })   // 2m 51s after the form: 340 units fits the $2,400-a-year Offer
await $.Lead.assign({ lead: 'lead_47', owner: 'worker_3' }, { mode: 'try' })   // to the AE, with the Handoff Brief
const { meeting } = await $.Meeting.book({ contact: 'contact_47', at: '2026-10-21T20:00:00Z' }, { mode: 'try' })   // Tue 15:00 Central, free on both calendars
return meeting
```

```json title="Response · sample"
{
  "meeting": {
    "$id": "https://api.sb/leaseline.app/meetings/meeting_12",
    "$type": "Meeting",
    "at": "2026-10-21T20:00:00Z",
    "agenda": "Birchway Properties: 340 units, 4 owners, renewals keep slipping",
    "contact": {
      "$id": "https://api.sb/leaseline.app/contacts/contact_47",
      "$type": "Contact",
      "name": "Rosa Medina"
    },
    "mode": "try"
  }
}
```

## What it does
| What you pay for | Price per unit (sample) | The call |
| --- | --- | --- |
| An answer drafted and sent from your Domain | $0.04 | <Op verb="Conversation.answer" /> |
| A lookup of who wrote in | $0.06 | <Op verb="Contact.enrich" /> |
| A Meeting booked | $0 | <Op verb="Meeting.book" /> |

## Run it
| Step | Call | What it does here |
| --- | --- | --- |
| <a id="step-1"></a>1 | <Op verb="Lead.qualify" /> | 2m 51s after the form: 340 units fits the $2,400-a-year Offer |
| <a id="step-2"></a>2 | <Op verb="Lead.assign" /> | to the AE, with the Handoff Brief |
| <a id="step-3"></a>3 | <Op verb="Meeting.book" /> | Tue 15:00 Central, free on both calendars |

## Set it up
| Check | On the day-0 Startup | Fix | Your time | Wait | Then |
| --- | --- | --- | --- | --- | --- |
| <a id="check-inbound-source"></a>`inbound-source` | fail | forward sales@ to your inbound address, or connect your form | 5 min | none | <Op verb="Integration.connect" /> |
| <a id="check-domain-authenticated"></a>`domain-authenticated` | fail | add the 3 DNS records shown | 10 min | until DNS resolves, often under 1 h | <Op verb="Domain.authenticate" /> |
| <a id="check-approved-pages"></a>`approved-pages` | fail | publish your pricing Page: answers quote only your own pages | 15 min | none | <Op verb="Site.publish" /> |
| <a id="check-role-unstaffed"></a>`role-unstaffed` | warn | staff the AE, or leave it: its routes come to you | 0 min | none | <Op verb="Role.staff" /> |

<div className="sbO-divider" role="separator" aria-label="Reference" data-divider="reference">Reference</div>

## The records
```json title="The Lead, after Lead.qualify · sample"
{
  "lead": {
    "$id": "https://api.sb/leaseline.app/leads/lead_47",
    "$type": "Lead",
    "status": "qualified",
    "interest": "Demo request: 340 units, 4 owners, renewals keep slipping",
    "owner": "worker_3",
    "fit": "strong"
  }
}
```

```json title="The Conversation, first answered in 2m 51s · sample"
{
  "conversation": {
    "$id": "https://api.sb/leaseline.app/conversations/conversation_29",
    "$type": "Conversation",
    "status": "open",
    "firstAnsweredAt": "2026-10-19T14:04:58Z",
    "respondBy": "2026-10-19T14:07:07Z"
  }
}
```

## Calls
| Call | What it does | What else happens | Event |
| --- | --- | --- | --- |
| <Op verb="Lead.qualify" /> | Qualify confirms a Lead matches an Offer’s ICP and opens a Deal for it. | — | [`Lead.qualified`](#event-lead-qualified) |
| <Op verb="Lead.assign" /> | Assign gives a Lead one owner Worker, by round robin, territory or ICP fit, as the Startup’s routing Policy says. | — | [`Lead.assigned`](#event-lead-assigned) |
| <Op verb="Meeting.book" /> | Book schedules a Meeting with a Contact at a time both calendars hold free. | — | [`Meeting.booked`](#event-meeting-booked) |
| <Op verb="Conversation.answer" /> | Answer replies in a Conversation through the Channel it arrived on and closes the reply Task it opened. | Runs the reply through every Guard before it leaves. | [`Conversation.answered`](#event-conversation-answered) |
| <Op verb="Contact.enrich" /> | Enrich fills a Contact’s missing fields from outside sources and marks each value with where it came from. | Meters each lookup against the Startup’s usage Limit. | [`Contact.enriched`](#event-contact-enriched) |

## Events
<a id="event-lead-qualified"></a>

```json title="Lead.qualified · StartupBuilder-Signature"
{
  "$id": "https://api.sb/leaseline.app/events/event_1",
  "$type": "Event",
  "name": "Lead.qualified",
  "at": "2026-10-22T12:00:00Z",
  "seq": 1,
  "data": {
    "deal": {
      "$id": "https://api.sb/leaseline.app/deals/deal_1",
      "$type": "Deal",
      "status": "Open"
    },
    "lead": {
      "$id": "https://api.sb/leaseline.app/leads/lead_1",
      "$type": "Lead",
      "status": "new"
    }
  }
}
```

<a id="event-lead-assigned"></a>

```json title="Lead.assigned · StartupBuilder-Signature"
{
  "$id": "https://api.sb/leaseline.app/events/event_1",
  "$type": "Event",
  "name": "Lead.assigned",
  "at": "2026-10-22T12:00:00Z",
  "seq": 1,
  "data": {
    "lead": {
      "$id": "https://api.sb/leaseline.app/leads/lead_1",
      "$type": "Lead",
      "status": "new"
    }
  }
}
```

<a id="event-meeting-booked"></a>

```json title="Meeting.booked · StartupBuilder-Signature"
{
  "$id": "https://api.sb/leaseline.app/events/event_1",
  "$type": "Event",
  "name": "Meeting.booked",
  "at": "2026-10-22T12:00:00Z",
  "seq": 1,
  "data": {
    "meeting": {
      "$id": "https://api.sb/leaseline.app/meetings/meeting_1",
      "$type": "Meeting",
      "at": "2026-10-22T12:00:00Z"
    }
  }
}
```

<a id="event-conversation-answered"></a>

```json title="Conversation.answered · StartupBuilder-Signature"
{
  "$id": "https://api.sb/leaseline.app/events/event_1",
  "$type": "Event",
  "name": "Conversation.answered",
  "at": "2026-10-22T12:00:00Z",
  "seq": 1,
  "data": {
    "conversation": {
      "$id": "https://api.sb/leaseline.app/conversations/conversation_1",
      "$type": "Conversation",
      "subject": "Example subject",
      "answeredAt": "2026-10-22T12:00:00Z"
    }
  }
}
```

<a id="event-contact-enriched"></a>

```json title="Contact.enriched · StartupBuilder-Signature"
{
  "$id": "https://api.sb/leaseline.app/events/event_1",
  "$type": "Event",
  "name": "Contact.enriched",
  "at": "2026-10-22T12:00:00Z",
  "seq": 1,
  "data": {
    "contact": {
      "$id": "https://api.sb/leaseline.app/contacts/contact_1",
      "$type": "Contact",
      "email": "dana@leaseline.app",
      "phone": "Example phone"
    }
  }
}
```

## Refuses when
| Check | Refuses | Fix | Then |
| --- | --- | --- | --- |
| [`inbound-source`](/code/refusals#check-inbound-source) <NotLiveYet gap="play-dry-run-codes" /> | an inbound Play with no form, ad or email source connected | Forward sales@ to your inbound address, or connect your form or ad source. | <Op verb="Integration.connect" /> |
| [`domain-authenticated`](/code/refusals#check-domain-authenticated) | a send from a Domain whose DNS records do not resolve | Add the 3 DNS records shown; it passes once they resolve, often within an hour. | <Op verb="Domain.authenticate" /> |
| [`approved-pages`](/code/refusals#check-approved-pages) <NotLiveYet gap="play-dry-run-codes" /> | a sentence that no approved Page and none of the Person’s own words back | Cut the sentence, or publish the Page that says it. | <Op verb="Site.publish" /> |
| [`claim`](/code/refusals#check-claim) | a term with no accepted terms Version, or money back that no Action keeps | Cut the line, or cite the Offer term that grants it. | <Op verb="Conversation.answer" /> |
| [`suppressed-contact`](/code/refusals#check-suppressed-contact) | a send or Sequence step to a Contact on a Suppression, from any Play | Leave them out: run the List again, which drops every suppressed Contact. | <Op verb="Collection.query" /> |

```json title="422 · sample"
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "Step two to Lakeside Rentals’ owner did not send: they asked us to stop on Oct 12.",
  "checks": [
    {
      "check": "suppressed-contact",
      "status": "fail",
      "observed": "Suppression suppression_6, unsubscribed 2026-10-12",
      "doc": "/code/refusals#check-suppressed-contact",
      "fix": "Leave them out: run the List again, which drops every suppressed Contact.",
      "then": "Collection.query"
    }
  ]
}
```


```json title="422 · sample"
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "Pinecrest Homes’ second visitor was not enrolled: no Consent on record for sales email.",
  "checks": [
    {
      "check": "suppressed-contact",
      "status": "pass"
    },
    {
      "check": "no-consent",
      "status": "fail",
      "observed": "no Consent for purpose sales-email",
      "doc": "/code/refusals#check-no-consent",
      "fix": "Record the Contact’s yes, with where they gave it, before the first send.",
      "then": "Consent.create"
    }
  ]
}
```


```json title="422 · sample"
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "The Tuesday cold email did not send: mail.leaseline.app has 1 of its 3 DNS records.",
  "checks": [
    {
      "check": "domain-authenticated",
      "status": "fail",
      "observed": "1 of 3 records resolve",
      "doc": "/code/refusals#check-domain-authenticated",
      "fix": "Add the 3 DNS records shown; it passes once they resolve, often within an hour.",
      "then": "Domain.authenticate"
    }
  ]
}
```

## Pauses when
| Stop | Pauses when | Fix | Then |
| --- | --- | --- | --- |
| [`unanswered-positive`](/code/refusals#stop-unanswered-positive) | a reply asking to meet that waits 60 minutes for a person | Answer the reply, then approve the resume. | <Op verb="Approval.approve" /> |
| [`kill-switch`](/code/refusals#stop-kill-switch) | you press it, or the injection Stop fires | Review what fired, then turn the Process back on. | <Op verb="Process.enable" /> |

```json title="Campaign.paused · unanswered-positive · Not live yet, gaps #2 · sample"
{
  "$id": "https://api.sb/leaseline.app/events/event_951",
  "$type": "Event",
  "name": "Campaign.paused",
  "at": "2026-10-19T16:45:00Z",
  "data": {
    "campaign": {
      "$id": "https://api.sb/leaseline.app/campaigns/cold-email",
      "$type": "Campaign"
    },
    "reason": {
      "limit": "unanswered-positive",
      "observed": "64m",
      "bound": "60m",
      "window": "60m"
    },
    "task": {
      "$id": "https://api.sb/leaseline.app/tasks/task_88",
      "$type": "Task"
    }
  }
}
```

## Plays that use it
| Play | What it does | Its Metric |
| --- | --- | --- |
| [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. | `inbound-meeting-rate` |

Metric it reaches: [First response time](https://startupbuilder.dev/agents/customer#first-response-time) (`first-response-time`).

## Hub guides it deepens
| On startupbuilder.dev | Id | What it holds |
| --- | --- | --- |
| [Inbound sales](https://startupbuilder.dev/workflows/processes/inbound-sales) | `process:inbound-sales` | the Process, its steps and its Roles |
| [Lead](https://startupbuilder.dev/business/nouns/lead) | `noun:lead` | the record, its fields and every call on it |
| [Conversation](https://startupbuilder.dev/business/nouns/conversation) | `noun:conversation` | the record, its fields and every call on it |
| [SDR](https://startupbuilder.dev/agents/sales/prospector) | `role:prospector` | the Role contract the seat fills |

## Example
| Leaseline, when | What happened | Cost (sample) |
| --- | --- | --- |
| 2026-10-19 14:02 | Rosa at Birchway Properties asks for a demo for 340 units | — |
| 14:04:58 | the SDR agent answers, qualifies her and routes her to the AE | $0.10 of Worker cost |
| 14:05 | Tuesday 15:00 Central is booked: one Meeting toward the $2,400-a-year Offer | $0 |