Skip to content

Spend $200 to test faster

Say "spend $200 to test faster" and get ads sent to your page, a card capped at $200, a stop rule, and a readout of what worked.

Once a few people sign up on their own, buy a little traffic to learn faster. The spend stops at $200 or 14 days, and a readout says which headline worked.

Needs Find out if anyone wants this · Open a bank account

What you get

  • 1budget of $200 with a stop ruleDemandBudget
  • 1Hypothesis with the number that settles itHypothesis
  • 2ad variants, each with its own headlineVariant
  • 1Experiment that splits traffic and counts signups per variantExperiment
  • 1card capped at $200 that pays the ad networkCard, on Stripe's Issuing Card
  • 1readout when the money or the time runs outReadout

Your agent does

DemandBudget.create → Hypothesis.create → Experiment.create → Hypothesis.test → Experiment.start
You, to your agent

Spend $200 to test faster.

Run some ads to the listening page.

Buy a little traffic to see who signs up.

# 1. DemandBudget.create
curl -X POST https://api.sb/leaseline.app/demand-budgets \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount":{"amount":200,"currency":"USD"},"tier":"$100","target":"40 waitlist signups at $5 or less each","stopRule":"Stop at $200 spent or after 14 days, whichever comes first."}'

# 2. Hypothesis.create
HYPOTHESIS=$(curl -X POST https://api.sb/leaseline.app/hypotheses \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"statement":"Ads that name missed lease renewals bring waitlist signups at $5 or less each.","kind":"loop","threshold":"40 waitlist signups at $5 or less each, within 14 days"}' | jq -r '.hypothesis["$id"] | split("/") | last')

# 3. Experiment.create
EXPERIMENT=$(curl -X POST https://api.sb/leaseline.app/experiments \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"variants":[{"name":"renewals","note":"Headline: Never miss a lease renewal again.","measure":"Waitlist signups per dollar spent."},{"name":"hours","note":"Headline: Get back the hours you spend chasing renewals."}]}' | jq -r '.experiment["$id"] | split("/") | last')

# 4. Hypothesis.test
curl -X POST https://api.sb/leaseline.app/hypotheses/$HYPOTHESIS/test \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"experiment":"'"$EXPERIMENT"'"}'

# 5. Experiment.start
curl -X POST https://api.sb/leaseline.app/experiments/$EXPERIMENT/start \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

await $.DemandBudget.create({ amount: { amount: 200, currency: 'USD' }, tier: '$100', target: '40 waitlist signups at $5 or less each', stopRule: 'Stop at $200 spent or after 14 days, whichever comes first.' })
const hypothesis = await $.Hypothesis.create({ statement: 'Ads that name missed lease renewals bring waitlist signups at $5 or less each.', kind: 'loop', threshold: '40 waitlist signups at $5 or less each, within 14 days' })
const experiment = await $.Experiment.create({ variants: [{ name: 'renewals', note: 'Headline: Never miss a lease renewal again.', measure: 'Waitlist signups per dollar spent.' }, { name: 'hours', note: 'Headline: Get back the hours you spend chasing renewals.' }] })
await $.Hypothesis.test({ hypothesis: hypothesis.$id, experiment: experiment.$id })
await $.Experiment.start({ experiment: experiment.$id })
npx startup-builder do DemandBudget.create --json '{"amount":{"amount":200,"currency":"USD"},"tier":"$100","target":"40 waitlist signups at $5 or less each","stopRule":"Stop at $200 spent or after 14 days, whichever comes first."}'
HYPOTHESIS=$(npx startup-builder do Hypothesis.create --json '{"statement":"Ads that name missed lease renewals bring waitlist signups at $5 or less each.","kind":"loop","threshold":"40 waitlist signups at $5 or less each, within 14 days"}' | jq -r '.hypothesis["$id"] | split("/") | last')
EXPERIMENT=$(npx startup-builder do Experiment.create --json '{"variants":[{"name":"renewals","note":"Headline: Never miss a lease renewal again.","measure":"Waitlist signups per dollar spent."},{"name":"hours","note":"Headline: Get back the hours you spend chasing renewals."}]}' | jq -r '.experiment["$id"] | split("/") | last')
npx startup-builder do Hypothesis.test --json '{"hypothesis":"'"$HYPOTHESIS"'","experiment":"'"$EXPERIMENT"'"}'
npx startup-builder do Experiment.start --json '{"experiment":"'"$EXPERIMENT"'"}'
{
  "name": "do",
  "arguments": {
    "code": "await $.DemandBudget.create({ amount: { amount: 200, currency: 'USD' }, tier: '$100', target: '40 waitlist signups at $5 or less each', stopRule: 'Stop at $200 spent or after 14 days, whichever comes first.' })\nconst hypothesis = await $.Hypothesis.create({ statement: 'Ads that name missed lease renewals bring waitlist signups at $5 or less each.', kind: 'loop', threshold: '40 waitlist signups at $5 or less each, within 14 days' })\nconst experiment = await $.Experiment.create({ variants: [{ name: 'renewals', note: 'Headline: Never miss a lease renewal again.', measure: 'Waitlist signups per dollar spent.' }, { name: 'hours', note: 'Headline: Get back the hours you spend chasing renewals.' }] })\nawait $.Hypothesis.test({ hypothesis: hypothesis.$id, experiment: experiment.$id })\nreturn await $.Experiment.start({ experiment: experiment.$id })"
  }
}

The same sentence does more as the business grows:

StateCallsAsks first
IdeaDemandBudget.create, Hypothesis.create, Experiment.create, Hypothesis.test, Experiment.startSend them to the waitlist or to a deposit page?
BuildingDemandBudget.create, Experiment.create, Experiment.startWhich page should the ads send people to?
LiveDemandBudget.create, Experiment.create, Experiment.startWhich Offer should the ads sell?

Change it

  • Stop the test at $100.
  • Send the ads to the deposit page instead.
  • Try LinkedIn instead of Google.

Under the hood

Systems
Experiments, Ads, Spend management
Nouns
Demand Budget, Hypothesis, Experiment, Variant, Card, Readout
Events
Hypothesis.tested, Experiment.started, Experiment.concluded
Stripe objects
Issuing Card

The Demand Budget holds the money and the stop rule; $200 sits in the $100 tier, so it buys that tier's Plays. The Experiment settles the Hypothesis it tests. Nothing is spent until you approve, and the card refuses any charge past $200.