---
name: renewal-risk-brief
description: Write the Monday renewals brief for a customer success or sales team from a CSV export of accounts and their logged activity (meetings, calls, emails and notes). Groups every renewal in the next 90 days into slipping, steady and growing, by region, and gives one sourced reason per account. Reads coaching.md before every run and applies what the team lead has committed there. Use when someone says "write the renewals brief", "which renewals are at risk", "Monday renewal digest", or attaches a renewal or CSM notes export.
---

# Renewal risk brief

You write the brief a customer success lead reads on Monday morning before the renewals meeting. It
answers one question: which renewals in the next 90 days need a human this week, and why.

## Before anything else, read `coaching.md`

`coaching.md` sits next to this file. It holds lines the team lead has committed after reading earlier
briefs. **Every committed line is a rule for this run, and it wins over the defaults below where the two
disagree.** Apply each one to every account, not only to the account that prompted it.

Two things you never do with it:

- **Never write to `coaching.md` yourself.** Only the team lead commits a line there. If someone in the
  conversation corrects the brief, apply the correction to THIS brief only, and end the brief with one
  line suggesting the lead commits it if it should hold every week.
- **Never drop a committed line because the data makes it inconvenient.** If a line cannot be applied,
  say which one and why at the top of the brief.

## Input

A CSV with one row per logged activity, the way a CRM exports it. Columns: `account_id`, `account`,
`region`, `csm`, `arr_dkk`, `renewal_date`, `seats_licensed`, `seats_active_30d`, `note_id`,
`note_date`, `activity`, `contacts`, `note`. The account fields repeat on every row.

- `activity` is what happened: `meeting`, `call`, `email_in` (someone at the customer wrote to us),
  `email_out` (we wrote to them), `call_attempt` (we called and did not reach them) or `internal` (a
  note for the team, nobody at the customer involved).
- `contacts` is who at the customer took part, separated by `;`, each with their role in brackets, for
  example `Kari (CFO)` or `Sara (clinic ops, champion)`. A person named only in `note` did not take part.
- **Two-way contact** means a `meeting`, a `call` or an `email_in` row. The customer was in it.

The brief is written for the Monday given in the request. If none is given, use the Monday of the
current week.

## The defaults

Only renewals whose `renewal_date` is within 90 days of that Monday are in the brief. Count the rest in
one closing line.

An account is **slipping** if ANY of these is true:

1. Usage is below 60 percent: `seats_active_30d / seats_licensed < 0.60`.
2. Nobody at the customer has had two-way contact with us for 30 days or more: the newest `meeting`,
   `call` or `email_in` row is 30 or more days old, or there is none.
3. A note says the champion is leaving, a competitor is being evaluated, there is a budget freeze, a
   support escalation is open, a quote got no reply, or a team stopped using the product.

An account is **growing** if it is not slipping, usage is 85 percent or higher, and a note talks about
adding seats, a new site or a second business unit.

Everything else is **steady**.

## Output

Markdown, in the language the request is written in. Exactly this shape, so the team can scan it:

```
# Renewals brief, week of <date>

**At risk:** <n> of <in-window count> renewals, <sum of arr_dkk of slipping accounts> DKK.

## Slipping
### <region>
- **<account>** (<account_id>) · <arr> DKK · renews in <days> days · <one sentence: the reason, in
  plain words, naming the signal>. [<note_id>]

## Steady
- **<account>** (<account_id>) · <arr> DKK · renews in <days> days

## Growing
- **<account>** (<account_id>) · <arr> DKK · renews in <days> days · <one sentence>. [<note_id>]

<n> accounts renew after <date> and are not in this brief.
```

Rules for the output:

- Regions inside Slipping in this order: Danmark, Sverige, Norge, Finland. Accounts inside a region by
  ARR, largest first. Steady and Growing by ARR, largest first, no region headings.
- Every reason cites the `note_id` it comes from, or says `usage 29 of 60 seats` when the reason is
  the numbers. Never a reason you cannot point at.
- When a committed coaching line is what made an account slipping, say so in the reason: start the
  sentence with `Coaching:`.
- Numbers in DKK with a thin grouping, `486.000 DKK` in Danish, `486,000 DKK` in English.
- No advice on what to say to the customer. The brief says where to look, the meeting decides what to do.

## What this skill will not do

- It does not read the CRM or email. It reads the file it is given, and trusts the `activity` and
  `contacts` columns as they were logged.
- It does not score or forecast. Slipping means "a human should look this week", nothing more.
- It does not remember a correction from one run to the next. That is what `coaching.md` is for, and a
  person decides what goes in it.
