# Start a business

URL: /business/start-a-business · Id: `guide:start-a-business`

> Say what the business does and what it charges, and get a Startup with its app, Site, domain, Offer, Stripe account, Teams, Roles and Systems.

One sentence creates a [Startup](/business/nouns/startup) from a [Startup Template](/business/nouns/startup-template) and builds it: `Startup.create` records the business, and [`Startup.build`](/business/nouns/startup/build) provisions what it declares.

**Before it runs**

- You leave the chat: Never: it all happens in the chat.
- First question at Idea: “Who is it for, and what does it charge?”
- First question at Live: “Start from this business, or from a template?”

## What you get
- 1 business named Leaseline, moved from Idea to Building (Startup)
- 1 brand: name, logo, colors and voice (Brand)
- 1 app your customers sign in to (App)
- 1 site at leaseline.app with pricing, sign-up and terms (Site)
- 1 domain with its DNS records and certificate (Domain)
- 1 Offer at $29 a month, ready to publish (Offer)
- 1 Stripe account in the business’s name, claimed in one step (Stripe's Account)
- 1 product and monthly price on Stripe (Stripe's Product and Price)
- 4 Interfaces to the business: API, SDK, CLI and MCP server (Interface)
- 10 Teams, from Product to Legal (Team)
- 38 Roles, an agent named in each (Role)
- 56 Processes, each owned by a Role (Process)
- 67 Systems: billing, ledger, CRM, support and the rest (System)
- 1 connect providers runs on the first day (Workflow)
- 1 publish terms runs on the first day (Workflow)
- 1 staff roles runs on the first day (Workflow)

## Your agent does
**For agents**

- Guide: `guide:start-a-business`, status `live`. Page: [/business/start-a-business.md](/business/start-a-business.md).
- Approval: none. Run it when the founder asks.
- Leaves the chat: never.
- 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 | [`Startup.create`](/business/nouns/startup/create) (`verb:Startup.create`) | `name` string, required: example `"Leaseline"`; `idea` text: example `"Tracks lease renewals for small property managers, $29 a month."` | `startup` Startup |
| 2 | [`Startup.build`](/business/nouns/startup/build) (`verb:Startup.build`) | `startup` Startup (an id), required: the `$id` step 1 returns | `startup` Startup |

Returns: the last call answers with `startup` 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",
  "startup": {
    "$id": "https://api.sb/leaseline.app/startups/startup_1",
    "$type": "Startup",
    "name": "Leaseline",
    "idea": "Tracks lease renewals for small property managers, $29 a month."
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Startup.build",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Call it Renewly instead”, or “Charge $49 a month for up to 500 units”.

Calls: `Startup.create` → `Startup.build`

Ask:

```text
Start a business that tracks lease renewals for small property managers, $29 a month.
Make me a business for landlords who keep missing renewal dates.
Turn my idea into a business: renewal reminders for managers with up to 200 units.
```

API:

```bash
# 1. Startup.create
STARTUP=$(curl -X POST https://api.sb/leaseline.app/startups \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Leaseline","idea":"Tracks lease renewals for small property managers, $29 a month."}' | jq -r '.startup["$id"] | split("/") | last')

# 2. Startup.build
curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/build \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

SDK:

```ts
import { $ } from 'startup-builder'

const startup = await $.Startup.create({ name: 'Leaseline', idea: 'Tracks lease renewals for small property managers, $29 a month.' })
await $.Startup.build({ startup: startup.$id })
```

CLI:

```bash
STARTUP=$(npx startup-builder do Startup.create --json '{"name":"Leaseline","idea":"Tracks lease renewals for small property managers, $29 a month."}' | jq -r '.startup["$id"] | split("/") | last')
npx startup-builder do Startup.build --json '{"startup":"'"$STARTUP"'"}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "const startup = await $.Startup.create({ name: 'Leaseline', idea: 'Tracks lease renewals for small property managers, $29 a month.' })\nreturn await $.Startup.build({ startup: startup.$id })"
  }
}
```

## Change it
- Call it Renewly instead.
- Charge $49 a month for up to 500 units.
- Sell to agencies as well as landlords.
- Use the Solo SaaS template instead.

## Under the hood
- Systems: [Sites](/products/site/sites), [Billing](/systems/billing), [Ledger](/systems/ledger), [CRM](/systems/crm), [Support](/systems/support)
- Nouns: [Startup](/business/nouns/startup), [Brand](/business/nouns/brand), [App](/business/nouns/app), [Site](/business/nouns/site), [Domain](/business/nouns/domain), [Offer](/business/nouns/offer), [Team](/business/nouns/team), [Role](/business/nouns/role)
- Events: `Startup.created`, [`Startup.built`](/business/events/Startup.built)
- Stripe objects: `Account`, `Product`, `Price`