URL: /capabilities/agents/csm · Id: `page:/capabilities/agents/csm`

# CSM

> Keeps each customer getting value: it notices silence, offers one save the Policy allows, and asks happy customers for referrals.

Keeps each [customer](https://startupbuilder.dev/business/nouns/customer) getting value: it notices silence, offers one save the [Policy](https://startupbuilder.dev/business/nouns/policy) allows, and asks happy customers for referrals.

- **File convention:** `agents/customer/success-manager.mdx`
- **Noun:** [`noun:role`](https://startupbuilder.dev/business/nouns/role)
- **Role:** [`role:success-manager`](https://startupbuilder.dev/agents/customer/success-manager)

```text title="Run it · Ask"
Take back Northgate’s cancel before the period closes, at the same terms, and show me the note first.
```

```ts title="Run it · SDK"
import { $ } from 'startup-builder'

const result = await $.try.Subscription.keep({ subscription: 'subscriptions/northgate-rentals' })
```

```json title="Run it · Response"
{
  "mode": "try",
  "stored": false,
  "subscription": {
    "$id": "subscriptions/northgate-rentals",
    "status": "active",
    "renewsAt": "2026-11-14T00:00:00Z"
  }
}
```

## Responsibilities
- Reaches out once when a customer goes silent for twice their usual interval.
- Makes cancelling one step, with one question and a full export.
- Offers one save from the Policy on a cancel, and wins a customer back once the reason they left is fixed.
- Asks customers who got an outcome for a review or a referral, one ask at a time.

## Verbs
| Verb | Object | Event |
| --- | --- | --- |
| `Subscription.keep` | [`noun:subscription`](https://startupbuilder.dev/business/nouns/subscription) | `Subscription.kept` |
| `Renewal.open` | [`noun:renewal`](https://startupbuilder.dev/business/nouns/renewal) | `Renewal.opened` |
| `Lead.nurture` | [`noun:lead`](https://startupbuilder.dev/business/nouns/lead) | `Lead.nurtured` |
| [`Message.schedule`](/code/apps/mailboxes/schedule) | [`noun:message`](https://startupbuilder.dev/business/nouns/message) | `Message.scheduled` |
| `Survey.create` | [`noun:survey`](https://startupbuilder.dev/business/nouns/survey) | `Survey.created` |
| `Collection.export` | [`noun:collection`](https://startupbuilder.dev/business/nouns/collection) | `Collection.exported` |

## Role contract
| Part | This seat |
| --- | --- |
| Purpose | Keep customers because the product keeps paying off for them. |
| Results | Expansion revenue; Save rate; customer health |
| Target | Logo churn under 5% a month, read on 20 customers, and at least 1 in 4 cancels saved or won back within 90 days, read at 8 cancels ([Planning estimate](/strategy/numbers#assumptions)). |
| Standards | Answers a customer at risk within one business day. Sends no ask to a customer with an open problem. |
| Limits | One save offer per cancel, only from the cancel Policy, and one ask per customer every 90 days; anything else goes to you. The hub Success Manager Role sets no numeric limit |
| Schedule | Weekly, and on every silence or cancel Event |
| Channels | `email`, `chat` |
| Also called | Customer Success Manager, Account Manager |
| Filled by | A role agent, from the start; you take the save calls it flags. |

## Hands off to
- [AE](/capabilities/agents/ae): A customer adds people past their plan: an upgrade deal opens within 1 business day.
- [Partnerships](/capabilities/agents/partnerships): A customer gets an outcome and is not at risk: one referral ask.

## Processes owned
[`process:retention`](https://startupbuilder.dev/workflows/processes/retention) · [`workflow:silence-watch`](https://startupbuilder.dev/workflows/processes/retention/silence-watch) · [`workflow:save-and-win-back`](https://startupbuilder.dev/workflows/processes/retention/save-and-win-back)

## Metrics
[`metric:save-rate`](https://startupbuilder.dev/agents/customer#save-rate) · [`metric:expansion-revenue`](https://startupbuilder.dev/agents/customer#expansion-revenue) · [`metric:customer-health`](https://startupbuilder.dev/agents/customer#customer-health)

## Approvals
You see the plan and its price before anything runs. Sends and posts go out within the limits you set; one approval rule on a class such as `send` makes every action in it wait for you, and going over a limit always asks.

| It asks you | When | Answered by |
| --- | --- | --- |
| A save offer outside the Policy | The offer is not on the cancel Policy’s list | You |

Each class and its default amount: the hub’s [approvals](https://startupbuilder.dev/agents/approvals) page.

## Works with
- [Referral ask](/capabilities/keep-and-grow/referral-ask) (agent task): Each week, your five happiest customers asked for one introduction each, by a note naming the outcome they got from you.
- [Upgrade note at the limit](/capabilities/keep-and-grow/upgrade-note) (agent task): A customer at 80% of a plan limit in, one note out with their numbers and the next plan’s price, at most once a month.
- [Save and win back](/capabilities/keep-and-grow/save-and-win-back) (agent task): A customer at risk in, and within 24 hours one note out with the offer your Policy allows that fits their usage.

It trades hand-offs with [AE](/capabilities/agents/ae), [Onboarding](/capabilities/agents/onboarding), [Head of customers](/capabilities/agents/head-of-customers), [Billing](/capabilities/agents/billing) and [Partnerships](/capabilities/agents/partnerships).

## Example
Northgate Rentals has not logged in for 9 days, twice its usual 4. The agent sends one check-in that names the unreconciled ledger, and Rosa Alvarez replies the same morning.