# Spend $200 to test faster

URL: /start/guides/spend-200-to-test-faster · Id: `guide: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](/start/guides/find-out-if-anyone-wants-this) · [Open a bank account](/systems/finance/open-a-bank-account)

**Before it runs**

- Who says yes: You. Your agent shows you the run and waits for your [Approval](/business/nouns/approval).
- You leave the chat: Never: it all happens in the chat.
- First question at Idea: “Send them to the waitlist or to a deposit page?”
- First question at Building: “Which page should the ads send people to?”
- First question at Live: “Which Offer should the ads sell?”
- What it costs: Up to $200, paid by a card capped at that amount.
- To undo it: Stop the Experiment; no ad spend starts after it stops.

## What you get
- 1 budget of $200 with a stop rule (DemandBudget)
- 1 Hypothesis with the number that settles it (Hypothesis)
- 2 ad variants, each with its own headline (Variant)
- 1 Experiment that splits traffic and counts signups per variant (Experiment)
- 1 card capped at $200 that pays the ad network (Card, on Stripe's Issuing Card)
- 1 readout when the money or the time runs out (Readout)

## Your agent does
**For agents**

- Guide: `guide:spend-200-to-test-faster`, status `beta`. Page: [/start/guides/spend-200-to-test-faster.md](/start/guides/spend-200-to-test-faster.md).
- Approval: ask the founder first. Show the run, then wait for their Approval; a refusal ends it.
- Leaves the chat: never.
- Needs first: [Find out if anyone wants this](/start/guides/find-out-if-anyone-wants-this), [Open a bank account](/systems/finance/open-a-bank-account).
- Run: call the steps in order, each through the API, SDK, CLI or MCP tab below; a later step passes the `$id` an earlier one returns. Each value marked example is the sample business’s: pass the founder’s own.

| Step | Verb | Inputs (type, required, this guide’s value) | Returns |
| --- | --- | --- | --- |
| 1 | [`DemandBudget.create`](/business/nouns/demand-budget/create) (`verb:DemandBudget.create`) | `amount` money, required: example `{"amount":200,"currency":"USD"}`; `tier` string, required: example `"$100"`; `target` string, required: example `"40 waitlist signups at $5 or less each"`; `stopRule` string, required: example `"Stop at $200 spent or after 14 days, whichever comes first."` | `demandBudget` DemandBudget |
| 2 | [`Hypothesis.create`](/business/nouns/hypothesis/create) (`verb:Hypothesis.create`) | `statement` text, required: example `"Ads that name missed lease renewals bring waitlist signups at $5 or less each."`; `kind` string, required: example `"loop"`; `threshold` string: example `"40 waitlist signups at $5 or less each, within 14 days"` | `hypothesis` Hypothesis |
| 3 | [`Experiment.create`](/business/nouns/experiment/create) (`verb:Experiment.create`) | `variants` json, required: example `[{"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."}]` | `experiment` Experiment |
| 4 | [`Hypothesis.test`](/business/nouns/hypothesis/test) (`verb:Hypothesis.test`) | `hypothesis` Hypothesis (an id), required: the `$id` step 2 returns; `experiment` Experiment (an id), required: the `$id` step 3 returns | `hypothesis` Hypothesis |
| 5 | [`Experiment.start`](/business/nouns/experiment/start) (`verb:Experiment.start`) | `experiment` Experiment (an id), required: the `$id` step 3 returns | `experiment` Experiment |

Returns: the last call answers with `experiment` and its `action`, whose `status` is `done`, `pending` (waiting on an Approval or a Worker), `failed`, `canceled` or `refused`:

```json
{
  "api": "https://api.sb/leaseline.app",
  "experiment": {
    "$id": "https://api.sb/leaseline.app/experiments/experiment_1",
    "$type": "Experiment",
    "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."
      }
    ]
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Experiment.start",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Stop the test at $100”, or “Send the ads to the deposit page instead”.

Calls: `DemandBudget.create` → `Hypothesis.create` → `Experiment.create` → `Hypothesis.test` → `Experiment.start`

Ask:

```text
Spend $200 to test faster.
Run some ads to the listening page.
Buy a little traffic to see who signs up.
```

API:

```bash
# 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"
```

SDK:

```ts
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 })
```

CLI:

```bash
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"'"}'
```

MCP:

```json
{
  "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:

| State | Calls | Asks first |
| --- | --- | --- |
| [Idea](/business/lifecycle/states/idea) | [`DemandBudget.create`](/business/nouns/demand-budget/create), [`Hypothesis.create`](/business/nouns/hypothesis/create), [`Experiment.create`](/business/nouns/experiment/create), [`Hypothesis.test`](/business/nouns/hypothesis/test), [`Experiment.start`](/business/nouns/experiment/start) | Send them to the waitlist or to a deposit page? |
| [Building](/business/lifecycle/states/building) | [`DemandBudget.create`](/business/nouns/demand-budget/create), [`Experiment.create`](/business/nouns/experiment/create), [`Experiment.start`](/business/nouns/experiment/start) | Which page should the ads send people to? |
| [Live](/business/lifecycle/states/live) | [`DemandBudget.create`](/business/nouns/demand-budget/create), [`Experiment.create`](/business/nouns/experiment/create), [`Experiment.start`](/business/nouns/experiment/start) | Which 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](/systems/experiments), [Ads](/systems/ads), [Spend management](/systems/spend)
- Nouns: [Demand Budget](/business/nouns/demand-budget), [Hypothesis](/business/nouns/hypothesis), [Experiment](/business/nouns/experiment), [Variant](/business/nouns/variant), [Card](/business/nouns/card), [Readout](/business/nouns/readout)
- Events: [`Hypothesis.tested`](/business/events/Hypothesis.tested), [`Experiment.started`](/business/events/Experiment.started), [`Experiment.concluded`](/business/events/Experiment.concluded)
- Stripe objects: `Issuing Card`

The [Demand Budget](/business/nouns/demand-budget) holds the money and the stop rule; $200 sits in the `$100` tier, so it buys that tier's [Plays](/business/nouns/play). The [Experiment](/business/nouns/experiment) settles the [Hypothesis](/business/nouns/hypothesis) it tests. Nothing is spent until you approve, and the card refuses any charge past $200.