# Budget

URL: /workflows/processes/budget · Id: `process:budget`

> Budget compares each month’s spend with its Budget, forecasts the next six months, and asks the Founder to approve every change to a Budget.

Budget compares each month’s spend with its Budget, forecasts the next six months, and asks the [Founder](/agents/founding/founder) to approve every change to a Budget.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each month ends with spend compared to its Budget, a six-month forecast, and every Budget change approved by the Founder. |
| Reads | [Budget](/business/nouns/budget), [Transaction](/business/nouns/transaction) |
| Leaves | [Forecast](/business/nouns/forecast), [Budget](/business/nouns/budget), [Approval](/business/nouns/approval) |
| Runs in | Each Startup |

## Accountable
[Finance Lead](/agents/finance/finance-lead), [Finance Team](/agents/finance).

Responsible: [Finance Lead](/agents/finance/finance-lead).

Consulted: [Treasurer](/agents/finance/treasurer), [Marketing Lead](/agents/marketing/marketing-lead).

Informed: [Founder](/agents/founding/founder).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Monthly budget](/workflows/processes/budget/monthly-budget) | on [`Period.closed`](/business/events/Period.closed) | [Finance Team](/agents/finance) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Monthly budget](/workflows/processes/budget/monthly-budget) | 1. Record each Budget’s actual spend for the closed Period. | [Finance Lead](/agents/finance/finance-lead) | [Budget.update](/business/nouns/budget/update) | None |
| [Monthly budget](/workflows/processes/budget/monthly-budget) | 2. Forecast cash and runway six months ahead at trailing rates. | [Finance Lead](/agents/finance/finance-lead) | [Forecast.create](/business/nouns/forecast/create) | None |
| [Monthly budget](/workflows/processes/budget/monthly-budget) | 3. Propose next month’s Budgets and ask the Founder to approve any change. | [Finance Lead](/agents/finance/finance-lead) | [Approval.create](/business/nouns/approval/create) | None |
| [Monthly budget](/workflows/processes/budget/monthly-budget) | 4. Send the Founder spend against Budget and the forecast. | [Finance Lead](/agents/finance/finance-lead) | [Message.create](/business/nouns/message/create) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | On [`Period.closed`](/business/events/Period.closed) | Starts [Monthly budget](/workflows/processes/budget/monthly-budget) |
| In | On [`Order.paid`](/business/events/Order.paid) | Wakes this Process, the first time only. A Startup takes its first outside payment. |
| Out | `Budget.updated` | Raised by step 1 of [Monthly budget](/workflows/processes/budget/monthly-budget) |
| Out | `Forecast.created` | Raised by step 2 of [Monthly budget](/workflows/processes/budget/monthly-budget) |
| Out | `Approval.created` | Raised by step 3 of [Monthly budget](/workflows/processes/budget/monthly-budget) |
| Out | `Message.created` | Raised by step 4 of [Monthly budget](/workflows/processes/budget/monthly-budget) |

## Plays
No Play names this Process.

## Controls
No Control names this Process or a Workflow of it.

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `budget.varianceAlert` | `number` | `10` | Tell me when any budget runs 10% over | [Setting.update](/business/nouns/setting/update) |

## Failure
A failed step retries; when retries run out, the Action goes to the [Finance Lead](/agents/finance/finance-lead).

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | A monthly Budget with a six-month forecast keeps the Startup default alive more often than spending by request. |
| Measure | [Default alive](/agents/founding#default-alive) over 90d, at least 6 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on budget
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/processes/process_1/enable \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

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

await $.Process.enable({ process: 'process_1' })
```

**CLI**

```bash
npx startup-builder do Process.enable --json '{"process":"process_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Process.enable({ process: 'process_1' })"
  }
}
```

## Enable
On by default for every Product Template. [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

**Ask**

```text
Tell me when any budget runs 10% over
```

**API**

```bash
curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":10,"key":"budget.varianceAlert"}'
```

**SDK**

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

await $.Setting.update({ id: 'setting_1', value: 10, key: 'budget.varianceAlert' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":10,"key":"budget.varianceAlert"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Setting.update({ id: 'setting_1', value: 10, key: 'budget.varianceAlert' })"
  }
}
```

## Example
A [SaaS](/products/templates/saas) ends the month with ads at $2,300 against a $2,000 [Budget](/business/nouns/budget). The [Finance Lead](/agents/finance/finance-lead) sends the [Founder](/agents/founding/founder) the overrun and a forecast of 14 months of runway. One [Approval](/business/nouns/approval) keeps next month’s ad Budget at $2,000.