# Pricing

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

> Pricing sets each Offer’s model, value metric, and Price, and changes Prices for new buyers only.

Pricing sets each [Offer](/business/nouns/offer)’s model, value metric, and [Price](/business/nouns/price), and changes Prices for new buyers only.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each price change reaches new buyers only, after notice to existing Customers, with its Decision on record. |
| Reads | [Offer](/business/nouns/offer), [Price](/business/nouns/price) |
| Leaves | [Offer](/business/nouns/offer), [Experiment](/business/nouns/experiment) |
| Runs in | Each Startup |

## Accountable
[Product Lead](/agents/product/product-lead), [Product Team](/agents/product).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Price change](/workflows/processes/pricing/price-change) | on `Decision.created` where `about.type = 'Price'` | [Product Team](/agents/product) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Price change](/workflows/processes/pricing/price-change) | 1. Propose the new Price with its value metric and margin. | [Product Lead](/agents/product/product-lead) |  |  |
| [Price change](/workflows/processes/pricing/price-change) | 2. Test it as an Experiment only where weekly traffic reaches a readout. | [Analyst](/agents/marketing/analyst) | [Experiment.start](/business/nouns/experiment/start) | None |
| [Price change](/workflows/processes/pricing/price-change) | 3. Apply the Price to new buyers only. | [Product Lead](/agents/product/product-lead) | [Offer.update](/business/nouns/offer/update) | None |
| [Price change](/workflows/processes/pricing/price-change) | 4. Notify existing Customers before any change to their terms. | [Success Manager](/agents/customer/success-manager) | [Message.create](/business/nouns/message/create) | None |
| [Price change](/workflows/processes/pricing/price-change) | 5. Publish the updated Offer. | [Product Lead](/agents/product/product-lead) | [Offer.publish](/business/nouns/offer/publish) | Asks first |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | On `Decision.created` where `about.type = 'Price'` | Starts [Price change](/workflows/processes/pricing/price-change) |
| Out | [`Experiment.started`](/business/events/Experiment.started) | Raised by step 2 of [Price change](/workflows/processes/pricing/price-change) |
| Out | `Offer.updated` | Raised by step 3 of [Price change](/workflows/processes/pricing/price-change) |
| Out | `Message.created` | Raised by step 4 of [Price change](/workflows/processes/pricing/price-change) |
| Out | [`Offer.published`](/business/events/Offer.published) | Raised by step 5 of [Price change](/workflows/processes/pricing/price-change) |

## Plays
No Play names this Process.

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

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `pricing.noticeDays` | `integer` | `30` | Give customers 30 days notice before a price change | [Setting.update](/business/nouns/setting/update) |

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

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | A sibling Offer priced as a share of what the ICP pays today raises contribution margin without lowering conversion for new buyers. |
| Measure | [Contribution margin](/agents/finance#contribution-margin) over 30d, at least 30 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on pricing
```

**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
Give customers 30 days notice before a price change
```

**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":30,"key":"pricing.noticeDays"}'
```

**SDK**

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

await $.Setting.update({ id: 'setting_1', value: 30, key: 'pricing.noticeDays' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":30,"key":"pricing.noticeDays"}'
```

**MCP**

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

## Example
A lesson-booking app charges $19 a seat, priced per teacher. [Price change](/workflows/processes/pricing/price-change) raises it to $24 for new teachers. Existing [Customers](/business/nouns/customer) get 30 days of notice and keep $19 until their terms renew.