# Retention

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

> Retention keeps Customers by catching silence early, saving once, and winning back once.

Retention keeps [Customers](/business/nouns/customer) by catching silence early, saving once, and winning back once.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each quiet Customer hears from the Startup once before they cancel, each cancellation takes one step and leaves a reason, and each confirmed outcome becomes proof with Consent. |
| Reads | [Customer](/business/nouns/customer), [Subscription](/business/nouns/subscription) |
| Leaves | [Message](/business/nouns/message), [Issue](/business/nouns/issue), [Evidence](/business/nouns/evidence), [File](/business/nouns/file), [Consent](/business/nouns/consent), [Page](/business/nouns/page) |
| Runs in | Each Startup |

## Accountable
[Success Manager](/agents/customer/success-manager), [Customer Team](/agents/customer).

Responsible: [Success Manager](/agents/customer/success-manager), [Customer Lead](/agents/customer/customer-lead).

Consulted: [Product Lead](/agents/product/product-lead).

Informed: [Content Lead](/agents/marketing/content-lead).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Silence watch](/workflows/processes/retention/silence-watch) | every day | [Customer Team](/agents/customer) |
| [Save and win back](/workflows/processes/retention/save-and-win-back) | on [`Subscription.unsubscribed`](/business/events/Subscription.unsubscribed) | [Customer Team](/agents/customer) |
| [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) | on [`Order.confirmed`](/business/events/Order.confirmed) | [Customer Team](/agents/customer) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Silence watch](/workflows/processes/retention/silence-watch) | 1. Find Customers inactive for twice their usual interval. | [Success Manager](/agents/customer/success-manager) | [Customer.list](/business/nouns/customer/list) | None |
| [Silence watch](/workflows/processes/retention/silence-watch) | 2. Send one Message that offers help with the last failed step. | [Success Manager](/agents/customer/success-manager) | [Message.create](/business/nouns/message/create) | None |
| [Silence watch](/workflows/processes/retention/silence-watch) | 3. Open an Issue when the silence traces to a defect. | [Success Manager](/agents/customer/success-manager) | [Issue.create](/business/nouns/issue/create) | None |
| [Save and win back](/workflows/processes/retention/save-and-win-back) | 1. Confirm the cancellation in one step. | [Success Manager](/agents/customer/success-manager) | [Message.create](/business/nouns/message/create) | None |
| [Save and win back](/workflows/processes/retention/save-and-win-back) | 2. Ask one question about the reason and record the answer as Evidence. | [Success Manager](/agents/customer/success-manager) | [Evidence.create](/business/nouns/evidence/create) | None |
| [Save and win back](/workflows/processes/retention/save-and-win-back) | 3. Offer a full export of the Customer’s data. | [Success Manager](/agents/customer/success-manager) | [Collection.export](/business/nouns/collection/export) | None |
| [Save and win back](/workflows/processes/retention/save-and-win-back) | 4. Try once to win the Customer back after the reason is fixed. | [Success Manager](/agents/customer/success-manager) | [Message.schedule](/business/nouns/message/schedule) | None |
| [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) | 1. Record the outcome’s number, dated and sourced to the Customer’s own records, as Behavior-grade Evidence. | [Success Manager](/agents/customer/success-manager) | [Evidence.create](/business/nouns/evidence/create) | None |
| [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) | 2. Ask the Customer’s Consent to show it. | [Success Manager](/agents/customer/success-manager) | [Consent.create](/business/nouns/consent/create) | None |
| [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) | 3. With Consent, compile a case study Page, a quoted line and an ad angle. | [Content Lead](/agents/marketing/content-lead) | [Page.create](/business/nouns/page/create) | None |
| [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) | 4. Start the Review requests Play and a customer-referrals invite. | [Marketing Lead](/agents/marketing/marketing-lead) | [Play.apply](/business/nouns/play/apply) | None |
| [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) | 5. Update the Story’s authority from the new number. | [Marketing Lead](/agents/marketing/marketing-lead) | [Story.update](/business/nouns/story/update) | None |
| [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) | 6. Open the Proof gate once three Behavior-graded outcome numbers exist. | [Marketing Lead](/agents/marketing/marketing-lead) |  |  |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | Every day | Starts [Silence watch](/workflows/processes/retention/silence-watch) |
| In | On [`Subscription.unsubscribed`](/business/events/Subscription.unsubscribed) | Starts [Save and win back](/workflows/processes/retention/save-and-win-back) |
| In | On [`Order.confirmed`](/business/events/Order.confirmed) | Starts [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) |
| Out | `Message.created` | Raised by step 2 of [Silence watch](/workflows/processes/retention/silence-watch) |
| Out | `Issue.created` | Raised by step 3 of [Silence watch](/workflows/processes/retention/silence-watch) |
| Out | `Evidence.created` | Raised by step 2 of [Save and win back](/workflows/processes/retention/save-and-win-back) |
| Out | [`Collection.exported`](/business/events/Collection.exported) | Raised by step 3 of [Save and win back](/workflows/processes/retention/save-and-win-back) |
| Out | [`Message.scheduled`](/business/events/Message.scheduled) | Raised by step 4 of [Save and win back](/workflows/processes/retention/save-and-win-back) |
| Out | `Consent.created` | Raised by step 2 of [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) |
| Out | `Page.created` | Raised by step 3 of [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) |
| Out | [`Play.applied`](/business/events/Play.applied) | Raised by step 4 of [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) |
| Out | `Story.updated` | Raised by step 5 of [Fan out an outcome](/workflows/processes/retention/fan-out-outcome) |

## Plays
- [Usage upsell](/workflows/customer/plays/usage-upsell)
- [Next outcome](/workflows/customer/plays/next-outcome)
- [Annual prepay](/workflows/customer/plays/annual-prepay)
- [Agent step](/workflows/customer/plays/agent-step)
- [Customer referrals](/workflows/plays/customer-referrals)
- [Portfolio cross-sell](/workflows/plays/cross-sell)
- [Signal expansion](/workflows/customer/plays/signal-expansion)
- [Made with](/workflows/plays/made-with)
- [Review requests](/workflows/plays/review-requests)

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

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `retention.quietFactor` | `number` | `2` | Reach out when a customer is quiet for twice their usual gap | [Setting.update](/business/nouns/setting/update) |

## Failure
A failed step retries; when retries run out, the Action goes to the [Success Manager](/agents/customer/success-manager).

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | Reaching out after seven silent days keeps more Customers to month three than waiting for a cancellation. |
| Measure | [Month-3 retention](/agents/customer#month-3-retention) over 90d, at least 100 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on retention
```

**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
Reach out when a customer is quiet for twice their usual gap
```

**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":2,"key":"retention.quietFactor"}'
```

**SDK**

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

await $.Setting.update({ id: 'setting_1', value: 2, key: 'retention.quietFactor' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":2,"key":"retention.quietFactor"}'
```

**MCP**

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

## Example
A dental office stops sending reminders for 2 days, and [Silence watch](/workflows/processes/retention/silence-watch) offers help with its broken calendar sync. A music teacher cancels over group lessons; when group booking ships, one [Message](/business/nouns/message) invites her back.