Skip to content

Booked first calls

Held first calls with buyers who fit, a budget owner confirmed on each, billed per held meeting against a monthly target you set.

Kind
Service
Price
$90 per held meeting
Your time
40 minutes
Approval
You do a step
Meeting.deliver
You, to your agent

Deliver 12 held first calls with US property managers this month, $90 each, and show me the plan first.

curl -X POST "https://api.sb/leaseline.app/meetings/deliver?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"goal":"Deliver 12 held first calls with US property managers this month, $90 each, and show me the plan first.","budget":{"amount":1080,"currency":"USD"}}'
npx startup-builder do Meeting.deliver --try --data '{"goal":"Deliver 12 held first calls with US property managers this month, $90 each, and show me the plan first.","budget":{"amount":1080,"currency":"USD"}}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Meeting.deliver({ goal: 'Deliver 12 held first calls with US property managers this month, $90 each, and show me the plan first.', budget: { amount: 1080, currency: 'USD' } })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Meeting.deliver({ goal: 'Deliver 12 held first calls with US property managers this month, $90 each, and show me the plan first.', budget: { amount: 1080, currency: 'USD' } })
Response
{
  "mode": "try",
  "stored": false,
  "estimate": "About $28.53 per 12 held meetings",
  "bills": "$90 a held meeting",
  "sample": {
    "account": "Harborview Property Management",
    "person": "Dana W., Director of Operations",
    "budget owner": "confirmed on the call",
    "state": "held, accepted",
    "sourced": "Cold email"
  }
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

What you get

  • 12 held meetings · Held first calls with buyers who fit, a budget owner confirmed on each, billed per held meeting against a monthly target you set. · Meeting
  • held[] · Each held meeting: the account, the person and title, the budget owner you confirmed, and the Play that sourced it.
  • credited[] · No-shows and meetings you disqualified within 48 hours, each with its reason; none is billed.
  • progress · Held against the target, with the lists, sends and replies behind it.
  • bill · Accepted meetings times the price: what the month owes.

Connect once: Gmail, Google Calendar. How long: The calendar month; the first calls land in week two, after the first sends.

Trigger

It runs when you call it, or on any Trigger you set.

TypeScript
await $.Workflow.create({ verb: 'Meeting.deliver', trigger: { schedule: 'weekly' } })

Steps

Your agent does these steps, one row per step; each step’s check is part of its row and its price.

StepVerbReturnsPriceApproval
1. Build the month’s listsAudience.buildAbout 1,000 checked work emails, each at the right company, none already a contactAbout $13.81Runs on its own
2. Write and send personal first touchesProspect.reachA first email to each person whose opening line quotes their own evidence, then two follow-upsAbout $13.25Goes out on its own
3. Answer every reply within 5 minutesLead.respondEach reply answered from your pages, with a call offered to each positive oneAbout 36¢Runs on its own
4. Book the callMeeting.bookA first call at a time both calendars hold freeFreeRuns on its own
5. Brief you before each callDeal.briefWhy they might buy now, the objection to expect and the question that finds the budget ownerAbout $1.11Runs on its own
6. Read who attendedCollection.queryEach meeting held when both sides joined for 10 minutes or more, else a no-show booked againFreeRuns on its own
7. You confirm the budget owner on the callLead.qualifyThe title match and the budget owner, recorded on the lead; a meeting you disqualify within 48 hours is creditedFreeYou do this step

Calls: Audience.build, then Prospect.reach, then Lead.respond, then Meeting.book, then Deal.brief, then Collection.query, then Lead.qualify.

About $28.53 per 12 held meetings, each time it runs, capped at $40.00.

Example: give it a goal

Deliver 12 held first calls with US property managers this month, $90 each, and show me the plan first.

The plan it shows runs 7 steps, priced before it spends anything; Run it above shows the result it returns.

When something fails

Each failure, and what happens next
WhenThen
The month ends under the targetThe work continues at no charge into the next month until the target is met; only accepted meetings are ever billed.
A mailbox nears its bounce thresholdIt rests itself and the other inbox carries the day; sends never move to your main domain.
A booked meeting is a no-showIt is never billed, and the agent offers the person two new times the same day.
You disqualify a meeting after 48 hoursIt stays accepted and billed; the reason still trains the next list.

Each step retries three times, then falls through to the next route; one item's failure lands in skipped with its reason, never failing the call. Before a step would cross maxCost it stops and returns what it has, with a resume link. Each step's idempotency key is the call's key plus the step and the item: leaseline-meeting-deliver-1-<step>-<item>.

What it promises

TermThis Service
DoneA held first call at an account that fits your customer sentence, with a person whose title matches, and a budget owner confirmed on the call.
Counted byMeeting.held
Billed$90 a held meeting, on acceptance
Target12 held meetings a month, fixed when you order.
Accepted whenYou confirm the budget owner on the call. A meeting you do not disqualify within 48 hours is accepted.
CreditedNo-shows, and any meeting you disqualify within 48 hours with a reason.
RemedyContinued work at no charge until the target is met: more lists, more first touches and more follow-ups, inside the same sending limits.
EvaluatorCode reads Meeting.held from the calendar and checks the account and title against your sentence; you confirm the budget owner.
WindowThe calendar month. A meeting booked in the month and held within 14 days counts toward it.
Assuranceattested, the weakest check on the way to done
Oversightperforms-step, because high-stakes

November, Leaseline’s first full month, ordered at a target of 12.

CountWhat happened
12Ordered
10Delivered
12Booked from 1,000 first emails, 34 replies and 19 positive replies.
2No-shows: never held, never billed, and both booked again.
1Disqualified by you within 48 hours: the person had no say over the budget. Credited.
3Still owed on the target of 12, so the work continues into December at no charge.
9Accepted, billed 9 × $90 = $810

Change it

AskCompiles to
Count only meetings with an owner or COO.Meeting.deliver
Raise the target to 20 next month and add LinkedIn as a second channel.Meeting.deliver
Brief me two hours before each call instead of the night before.Deal.brief
TypeScript
import { $, Service } from 'startup-builder'

export default Service({
  name: 'meeting-deliver',
  verb: 'Meeting.deliver',
  input: { icp: 'string', titles: 'string[]', target: 'integer', offer: 'string', calendar: 'string', mailboxes: 'string[]' },
  maxCost: 40,
  builtFrom: ['Audience.build', 'Prospect.reach', 'Lead.respond', 'Deal.brief'],
  oversight: { posture: 'performs-step', reason: 'high-stakes' },          // you take the call
  contract: {
    done: 'Meeting.held', accept: { by: 'founder', within: '48h', silence: 'accept' }, assurance: 'attested',
    bills: { usd: 90, per: 'held meeting' }, target: 12, credits: ['no-show', 'disqualified-within-48h'], remedy: 'continue-until-target',
  },
  execute: async (ctx, { icp, titles, target = 12, offer, calendar, mailboxes }) => {
    while ((await ctx.count('Meeting.held', { accepted: true })) < target) {
      const list = await ctx.step('list', () => $.Audience.build({ icp, titles, size: 100, maxCost: 2 }))
      await ctx.step('reach', () => $.Prospect.reach({ audience: list.$id, offer, ask: 'a 20-minute call', mailboxes, maxCost: 3 }))
      await ctx.waitFor('Prospect.reached', { audience: list.$id })                   // replies route to Lead.respond, then Meeting.book
    }
  },
})

Extend it with extends: 'Meeting.deliver' and base(), or compose your own from these steps.

Works with

Plays that order it: Benchmark rows, Cold email, LinkedIn outbound, Proof-of-work outreach, Warm intros.

Built fromKindIts own price
Build a verified listWorkflowAbout $1.38 per 100 checked emails
Personal first touchAgent taskAbout $1.33 per 100 people
Answer every inboundAgent taskAbout 1.1¢ an inbound
Account briefAgent taskAbout 9.3¢ a brief

It serves Reach out. It deepens Outbound and Demand generation.

For agents

For agents: the guide, its approvals, retries and lookups
FactValue
GuideMeeting.deliver
Guide approvalask
GoalDeliver 12 held first calls with US property managers this month, $90 each, and show me the plan first. It may change counts, the order of steps, soft filters and the route a read takes, and it stops early when the goal is met. It never relaxes your words, raises its own budget, answers its own approval, calls a Play or acts outside your standing approval.
RetryThree times with backoff, then the next route; the same idempotency key never charges, sends or posts twice
Idempotency keyleaseline-meeting-deliver-1
LookupsA find: input asks unless exactly one record fits
Step
1. Build the month’s lists
2. Write and send personal first touches
3. Answer every reply within 5 minutes
4. Book the call
5. Brief you before each call
6. Read who attended
7. You confirm the budget owner on the call

The amounts live once, on the hub (approvals).

Who does each step, and how it is checked
StepFunctionDoerCheckerAssuranceInputs
1. Build the month’s listscodeCodeCode reads each address’s check result and its domain against the account’s own before the row joinsmeasured$0.icp, $0.titles
2. Write and send personal first touchesagenticThe SDR agentA second model checks every fact in each message against the row before it sendsgraded$1.audiences, $0.offer, $0.mailboxes
3. Answer every reply within 5 minutesagenticThe SDR agentA Lead.created read-back for every routed reply, timed from the replymeasured$2.replies
4. Book the callcodeCodeA Meeting.booked read-back from both calendarsmeasured$3.positive, $0.calendar
5. Brief you before each callagenticThe AE agentA second model checks each fact in the brief against its sourcegraded$4.meetings
6. Read who attendedcodeCodeThe calendar’s attendance and the conference join log, read 15 minutes after the slotmeasured$4.meetings
7. You confirm the budget owner on the callhumanYouCode reads your qualification back onto the lead; silence for 48 hours accepts the meetingattested$6.held

The doer is never the checker, and the weakest assurance on the path is the whole call’s.

Under the hood

Under the hood: the Systems, Nouns and Events it touches
KindWhat it touches
SystemsCRM, Scheduling
NounsAudience, Prospect, Lead, Meeting, Deal, Collection
EventsMeeting.booked, Collection.queried, Lead.qualified

Reference

Inputs, outputs, its Event and its errors
NameTypeDefaultMeaning
icpstringRequiredYour customer sentence. Every meeting is at an account that matches it.
titlesstring[]RequiredThe buyer titles that count, in the buyer’s own words.
targetinteger12Held meetings this month. Fixed when you order; the work continues at no charge until it is met.
offerOfferRequiredWhat the first touches offer; no message claims what it cannot do.
calendarCalendaryour connected calendarWhere the calls are booked, in the hours you set.
mailboxesMailbox[]your two warmed inboxesCold first touches send from 2 inboxes on a warmed second domain, such as tryleaseline.app, 25 a day each after a 14-day ramp.

Emits Meeting.delivered. Refuses with max-cost before it spends, and with the Data calls and Accounts groups (refusals).

Contents