Skip to content

Give it a goal

Name the result and your budget: your agent shows the plan and its price, works inside it, and brings back a receipt for every call.

Dry run
Free: the plan and its estimate, nothing spent
Reference
Goal mode
First call
Goal.pursue
Goal.pursue
You, to your agent

Book 5 calls with property managers this month from cold email, sending only from my warmed domain. Spend up to $40, and show me the plan first.

curl -X POST "https://api.sb/leaseline.app/goals/pursue?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"objective":"Book 5 calls with property managers this month from cold email. Send only from the warmed domain.","by":"2026-11-26","budget":{"amount":40,"currency":"USD"}}'
npx startup-builder do Goal.pursue --try --data '{"objective":"Book 5 calls with property managers this month from cold email. Send only from the warmed domain.","by":"2026-11-26","budget":{"amount":40,"currency":"USD"}}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Goal.pursue({ objective: 'Book 5 calls with property managers this month from cold email. Send only from the warmed domain.', by: '2026-11-26', budget: { amount: 40, currency: 'USD' } })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Goal.pursue({ objective: 'Book 5 calls with property managers this month from cold email. Send only from the warmed domain.', by: '2026-11-26', budget: { amount: 40, currency: 'USD' } })
  1. The Key Result: Meeting.booked, 5, by 2026-11-26.
  2. Read “property managers” from the Offer’s ICP: 20 to 400 units, owners and operations leads. “Cold email” is email only. “Warmed domain” is the 2 warmed Mailboxes at 25 a day each: 50 a day, a hard limit.
  3. Lead with Renewals, from the message test’s readout: a Decision with its source.
  4. Build 400 checked Prospects: Build a verified list, about $5.20.
  5. Reach them in 3 touches: Personal first touch, about $5.44, first touches paced over 8 sending days, follow-ups on days 3 and 8.
  6. Answer about 20 replies and book: Answer every inbound, about 32¢; Meeting.book, free.
  7. Brief each call: Account brief × 5, about 55¢.
  8. Keep 150 more Prospects in reserve, about $4.00, if replies run under 3% by day 6. Expected: $11.61, at most $16.00, over 3 to 4 weeks.
Estimate$11.61 of $40.00

Planning is free. You see the plan and its price before anything runs.

Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

The reference for every call on this page is Goal mode.

Two goals, spent well under budget

A founder with no customers has two questions first: who do I write to, and what do I write about. These two goals answer them.

The first asked Build a verified list for 50 verified heads of operations, with a $4 budget. The second asked the Keyword opportunity map for 20 keywords a new site can win, with $1.

Each stopped the moment it had what was asked. A budget is a ceiling, never a target: the agent spends nothing to use it up. Each cent below has a row on its receipt.

50 verified heads of operations (or COO / VP Operations / Director of Property Operations) at US residential property management companies managing roughly 100–1,000 units.
Achieved
50 of 50 verified
Spent
$0.29 of $4.00
Calls
136
Agent time
21 minutes
Took
One sitting
Find 20 winnable keywords for salesbuilder.dev (AI agents that get a founder their first customers).
Achieved
20 of 20 keywords
Spent
$0.12 of $1.00
Calls
78
Agent time
6 minutes
Took
One sitting

It plans before it spends

A goal is a hub Goal with one Key Result, due within 31 days. The agent works through the call’s agentic Function, whose budget is the most it may spend.

It starts from the call’s default program, the one a Workflow runs with every input set. Free counts size each step before anything is bought.

Each phrase of yours is a hard rule it never relaxes. A filter it adds to get there, such as a headcount range standing in for unit count, is soft, and the plan says so.

In try mode the plan comes back with its estimate, and nothing is spent. To run that exact plan, pass it back as plan.

  1. Read your words: each phrase becomes a hard rule, and any filter the agent adds is marked soft.
  2. Plan from the default program of the Workflow, agent task or Service the sentence matches, sized by free counts.
  3. Price each step at its unit price, and add one priced contingency step for the likeliest shortfall.
  4. Ask at most one question, and only when a reading would change the price by more than twice or the result by more than half.
  5. Return the plan and its estimate for $0. Nothing runs until you call it again with send or do.

It runs inside the budget and changes course on the record

The budget is a limit on the goal’s Action, checked before every call. When the goal is met, it stops. When the next call fits what is left, it makes it.

When the next call does not fit, it stops and opens an approval with its projection: “43 of 50 found. About 61¢ more finds the last 7. Your budget has 18¢ left.” A person answers it; the agent never does.

Every change of course is a Decision that supersedes the plan, with the options it weighed and its reason. A fallback between routes is the platform’s job and records no Decision.

It may change on its ownIt never
How many rows, pages or candidates it readsRelaxes a phrase of yours
The order of the work, such as checking emails in fit order to stop at the targetRaises its own budget, or answers its own approval
A soft filter it added, widened when too few results come backCalls a Play, or acts outside your standing approval
The route, when one fails: an API to the browser agent, one call to its partsSpends ad money past spend, or carries on past by
When it stops: early, when the goal is met or no supply is left at any pricePasses by on a step: whether a step reads or follows a rule is fixed in the composition

The receipt shows every call and why

The receipt is a view over one Action. It opens on the Decisions, then gives one line per call: how many ran, what they cost, and what came back. Every row sits in a fold beneath, and the totals equal the sum of the rows.

Agent minutes and wall-clock days are two figures. A goal that waits on replies runs for weeks on a few minutes of agent time. Ad spend sits beside the budget, never inside it: the site bills it to your own account.

The agent’s own model cost sits on its own line as agentUsd, so you can see what the planning cost apart from the work. It is usually 2¢ to 10¢ a goal.

ColumnWhat it holds
#The row, numbered from 1 within the goal; a Decision cites rows by this number
CallThe Verb it ran, with any option that changes its price, such as ContactPoint.verifyEmail({ depth: 'deep' })
SubjectWhat the call was about: a person, a term, a domain
CostWhat that call cost, in dollars at the precision it needs, such as $0.000495; a miss or a catch-all check is $0
RunningThe total so far, which the next call is checked against
OutcomeWhat came back, typed: counted, listed, found, none found, deliverable, risky, catch-all, invalid, no reading
DomainOn a find: whether the address sits at the person’s company domain, and the Decision that handled it when it does not
WhyWhy it made the call; a change of course cites its Decision

Five goals, worked

The two goals above each ran one call. Three more ran several. One wrote and indexed answer pages until AI answers named Leaseline. One ran a message test on $100 of ad spend, paused two losers early, and asked for $50 more. You said no.

The third is this page’s Run it: Goal.pursue booked five calls with property managers in 19 days and 95 agent minutes. It built the list, wrote the first touches, answered the replies and briefed each call. On day 6 it changed segment, as a Decision, because the larger companies had not replied.

Each call’s own page carries its goal’s plan, its Decisions and its full receipt. Directory submissions carries one more, where the agent switches routes when an API refuses.

Get Leaseline named in AI answers for the 10 questions small landlords ask most about tracking rent.
Achieved
10 of 10 questions answered by an indexed page
Spent
$1.94 of $15.00
Calls
107
Agent time
60 minutes
Took
21 days
Find out which message gets small landlords to start a trial. Put up to $100 into ads.
Achieved
1 of 1 winning message, likely
Spent
$0.28 of $5.00
Ad spend
$100.00 on your account
Calls
41
Agent time
14 minutes
Took
5 days

The 50-lead goal, call by call

The 50-lead goal, call by call

The receipt of Build a verified list in goal mode. Run for real, it found 50 of 50 verified, and six Decisions explain every change of course.

Decisions

  1. D1, rows 1 to 5size four queries for free, then buy 150 rows from the closest one.All real estate matched 5,150 people. Adding the keyword “property management” brought it to 882, the nearest fit to your sentence, so row 5 bought from that query.
  2. D2, rows 54 to 57find 4 addresses again, by name and the current company’s domain only.The first find for these 4 people returned an address at another company, such as gwinnettcounty.com for a partner at tmg-atl.com. An address at a past employer bounces or reaches the wrong person.
  3. D3, rows 105 to 112 and 136send 9 catch-all and risky results to ContactPoint.verifyEmail({ depth: 'deep' }), at $0.004 each.A catch-all domain accepts every address, so the standard check cannot confirm the mailbox. All 9 came back deliverable.
  4. D4, rows 113 to 116find 4 addresses again, leaving out the route that produced each one.The check called them invalid. One came back new and valid; the other 3 stay off the list, each with its reason below.
  5. D5, rows 118 to 123re-size four narrower queries for free, then buy the 51 rows of “Leasing Residential Real Estate”.The second page of the first query came back empty. That industry was the most precise match, and small enough to read whole.
  6. D6keep 10 addresses at a domain other than the company’s, such as choicenewyork.com for choice-ny.com.Each checked deliverable, and none sat at a past employer on the person’s profile, which is what D2 tests for.

By call

CallCallsCostOutcomes
Prospect.count8$08 counted
Prospect.find3$0.057383 listed
ContactPoint.findEmail62$0.17260 found · 2 none found
ContactPoint.verifyEmail54$0.0264 invalid · 41 deliverable · 7 risky · 2 catch-all
ContactPoint.verifyEmail({ depth: 'deep' })9$0.0369 deliverable
Spent136$0.29of $4.00, $3.71 left

Agent time 21 minutes, in one sitting.

Every call, 136 rows

Loading the rows.

The 20-keyword goal, call by call

The 20-keyword goal, call by call

The receipt of the Keyword opportunity map in goal mode, including the switch to search-box suggestions when related terms had nothing for founder phrasing.

Decisions

  1. D1, rows 8 to 16switch from related terms to phrase match and search-box suggestions.Related terms had no reading for founder phrasing such as “how to get first customers”. Phrase match and suggestions returned 205 rows and 52 suggestions for the same words.
  2. D2, row 17measure the 63-term shortlist in one batch.Difficulty is priced by the batch of up to 1,000 terms, so 63 terms cost one batch. The 19 terms with no reading cost nothing.
  3. D3, row 78read salesbuilder.dev’s own authority as the baseline.At an authority of 1, a term is winnable only where page one already holds weak or user-written pages, which is what the soft slots column counts.

By call

CallCallsCostOutcomes
Keyword.find10$0.0048 listed · 2 no reading
Keyword.find({ mode: 'suggestions' })6$0.00516 listed
Keyword.measure1$0.0221 measured
Keyword.search28$0.004228 read
Domain.benchmark33$0.0886133 read
Spent78$0.12of $1.00, $0.88 left

Agent time 6 minutes, in one sitting.

Every call, 78 rows

Loading the rows.

A goal that works becomes a Workflow, then a Play

When every change of course on a receipt can be written as a rule, the receipt offers “Make this a Workflow”. Each Decision becomes a declared rule, such as “if fewer than 50 are valid, read 200 more companies, at most twice”.

The draft deploys as your own call, priced before it runs (Compose your own). “Keep doing this every week” is a Play’s job, not a goal’s, so the receipt offers the Play instead.

From the receiptWhat it offersThe call
Every Decision can be a ruleA Workflow of your own, with the Decisions as rulesMCP do with { define: { verb, steps } }, then deploy
You want it every weekThe Play whose Tactic the plan matchesPlay.apply
A segment rule workedThe rule saved to your customer sentenceICP.update

Four types carry a goal from sentence to receipt

Every field, the two ways in, streaming and failure are on the reference page.

TypeWhat it is
GoalModeInputgoal, budget, and optional spend, by, ask and plan, beside the call’s own inputs
GoalPlanWhat try returns: how it read each phrase, the priced steps, the estimate, at most one question
GoalResultThe call’s own output, whether the goal was met and why it stopped, and the receipt
ReceiptEvery call, every Decision, every approval, and the budget spent and left

    Contents