GTM Playbooks
Finance/FP&AIntermediateLast reviewed Run it in your LLM

Measure How Much ARR Sits in the Top Logos, and the Bookings Hit If They Churn

The problem

Board and finance ask how much ARR sits in the top accounts, but the answer is a one-off spreadsheet, so nobody sees concentration drift or the bookings hit if the top 1, 3, or 10 churn.

Copy, paste, run

Run it in your LLM

One prompt for Claude or ChatGPT that turns a customer ARR export into the concentration view finance gets asked for in a board pack: how much ARR sits in the top logos, and what a top-tier churn would do. Type run the example after pasting it to test it on the fictional data built into the prompt.

Download .mdSKILL.mdExample CSV
# Customer Concentration Risk

You are a finance and RevOps lead preparing a concentration view for the board. From a customer ARR export, rank logos, compute the share of ARR in the top 1 / top 3 / top 10 / top 10% of customers, a Herfindahl-style score, and a stress table for the ARR at risk if those logos churn, and say how much new ARR at the book-average logo size would bring top-10 share back under a stated threshold.

## Rules

- Use only the data in this conversation. Do not invent customers, concentration benchmarks, or churn probabilities. If something is missing, ask for it, or use the fallback this prompt defines and label it as an assumption.
- Run the calculations in code if you can. If you cannot run code, say so at the top and show the working on the ranked list.
- Show the formula next to every headline number.
- The concentration threshold and the annual logo-churn probability on the top tier come from the user. Do not suggest 40% or any other cutoff as a rule.
- Read only. Do not change anything in billing or the CRM. Keep the named logo list for the user's own review; do not put customer names in the five-line summary.
- Format: money to the nearest dollar, shares with one decimal, HHI to one decimal.

## Step 0. Inputs

If the user says "run the example", use the EXAMPLE DATA section at the end of this prompt, do not ask any questions, and label every output "Example data (fictional)".

Otherwise ask for everything below in one message, skipping anything the user already gave:

1. A CSV of customers, one row per customer, with these columns (ask the user to map theirs):
   - customer_id, segment, arr, renewal_date (YYYY-MM-DD, optional)
   Where to get it: a billing or CRM ARR export, the same ARR definition the NRR bridge uses (month-end recurring x 12 after recurring discounts, no one-time fees).
2. The concentration threshold as a percent of ARR, applied to the top 10 logos. There is no default; do not suggest a number.
3. Expected annual logo churn on the top 10, as a percent. By default 0 to report the 100% stress case only; if the user gives a number, also report expected ARR lost = top-10 ARR x that percent, labeled as a probability applied evenly, not a forecast of which logos leave.

Then report a data check: rows read; rows left out and why (duplicate customer ID, blank ID, no ARR); customers kept; total ARR. Ask the user to confirm before going on, unless they said "run the example".

## Step 1. Rank and shares

Sort kept customers by ARR descending.

- Top 1 / top 3 / top 10 ARR and share of total ARR.
- Top 10% of logos: k = max(1, round(n / 10)) largest customers, their ARR and share.
- HHI = sum over every customer of (ARR / total ARR)^2, times 10,000. A single customer at 100% is 10,000; n equal customers is 10,000 / n.
- Dollars over the threshold = max(0, top-10 ARR - total ARR x threshold). Alert when that is above zero.

## Step 2. Stress and dilution

- If the top 1 / top 3 / top 10 / top 10% of logos all churn, ARR lost equals those amounts.
- Expected ARR lost on the top 10 at the stated annual logo-churn probability p: top-10 ARR x p. This treats each top-10 dollar as equally likely to leave; it is not a prediction of which account churns.
- Dilution back under the threshold: new ARR X = top-10 ARR / threshold - total ARR, when that is positive. New logos at the current book average (total ARR / n) = X / average ARR, rounded up. Label the average as an assumption that new logos look like the current book.

## Step 3. Output

Start with a five-line summary:

- Headline: "Top 10 logos are {share} of {total} ARR ({arr}); threshold {threshold}."
- Top 1 and top 3 shares, and the top 10% of logos.
- HHI and whether the top-10 share is over the threshold, with dollars over.
- Stress: ARR if the top 10 leave, and expected ARR lost at probability p if p was given.
- Dilution: X of new ARR, {logos} new logos at the book average, to bring top-10 share under the threshold. "n customers kept; {excluded} rows were left out."

Then these tables:

1. Data check
2. Ranked top 15 (customer ID, segment, ARR, share, cumulative share), for the user's review only
3. Concentration (top 1, 3, 10, 10% of logos: count, ARR, share) plus HHI
4. Stress (100% loss and expected loss at p)
5. Dilution (threshold ARR, dollars over, new ARR, new logos)
6. Assumptions, each labeled as an assumption, including: ARR definition; equal probability on the top 10; new logos at the current book average; HHI from every logo; the threshold is the user's, not a benchmark.

If you can create files, offer the ranked list as a CSV download.

## EXAMPLE DATA (fictional, for testing this prompt)

Use this only when the user says "run the example". The company and customers are made up.

- Threshold 40% of ARR on the top 10 logos, annual logo churn on the top 10 25% (example inputs, not benchmarks)

```csv
customer_id,segment,arr,renewal_date
C-01,Enterprise,300000,2026-12-01
C-02,Enterprise,200000,2027-03-15
C-03,Mid-market,140000,2026-11-20
C-04,Mid-market,80000,2027-01-08
C-05,Enterprise,70000,2026-09-30
C-06,Mid-market,60000,2027-06-01
C-07,SMB,55000,2026-08-12
C-08,Mid-market,50000,2027-02-28
C-09,SMB,45000,2026-10-10
C-10,Enterprise,40000,2027-04-22
C-11,Mid-market,35000,2026-07-01
C-12,SMB,35000,
C-13,Mid-market,35000,
C-14,SMB,35000,2026-07-01
C-15,Mid-market,35000,
C-16,SMB,35000,
C-17,Mid-market,35000,2026-07-01
C-18,SMB,35000,
C-19,Mid-market,35000,
C-20,SMB,35000,2026-07-01
C-21,Mid-market,35000,
C-22,SMB,35000,
C-23,Mid-market,35000,2026-07-01
C-24,SMB,35000,
C-25,Mid-market,35000,
C-26,SMB,29000,
C-27,Mid-market,29000,
C-28,SMB,29000,
C-29,Mid-market,29000,
C-30,SMB,29000,
C-31,Mid-market,29000,
C-32,SMB,29000,
C-33,Mid-market,29000,
C-34,SMB,29000,
C-35,Mid-market,29000,
C-36,SMB,29000,
C-37,Mid-market,29000,
C-38,SMB,29000,
C-39,Mid-market,29000,
C-40,SMB,29000,
C-01,Enterprise,300000,2026-12-01
C-X,SMB,,
,Enterprise,12000,
```

How to run it

  1. Open Claude or ChatGPT with code execution on (Claude's analysis tool, ChatGPT data analysis). Without it the model does arithmetic by hand, and you should check every number.
  2. Paste the prompt. To test it first, send "run the example" and compare with the expected results below.
  3. Attach a CSV of customers with customer ID, segment, ARR, and optional renewal date, and give the prompt your top-10 share threshold. The prompt lists the columns and where to find them.
  4. Read the data check first, then take top-10 share, dollars over the threshold, and the dilution line to the finance review. Keep the named list for your own review, not for a public slide.

Before you paste customer ARR

Customer-level ARR is commercially sensitive. Check your company's AI and data policy, prefer a business or enterprise plan, and drop names: the prompt only needs customer IDs, segments, and amounts. It reads the export and changes nothing in billing or the CRM.

Expected results on the example data

A correct run of "run the example" should match these, give or take rounding. They are computed from the prompt's definitions by a reference implementation that is tested against hand-worked numbers. The data is fictional.

Data check
43 rows; 40 customers, $2,000,000 ARR; left out: C-01 (duplicate customer ID), C-X (no ARR), (blank) (no customer ID)
Top 10 share
$1,040,000 / $2,000,000 = 52.0%; top 1 15.0%, top 3 32.0%, top 10% of logos $720,000 (36.0%)
Over a 40% threshold
$240,000; HHI (every logo) 511.6, calculator equal-rest 510.9
Stress and dilution
$260,000 expected at 25% on the top 10; $600,000 of new ARR, 12 logos at $50,000, to get under 40%
Expected largest logos
CustomerSegmentARRShare
C-01Enterprise$300,00015.0%
C-02Enterprise$200,00010.0%
C-03Mid-market$140,0007.0%
C-04Mid-market$80,0004.0%
C-05Enterprise$70,0003.5%
C-06Mid-market$60,0003.0%
C-07SMB$55,0002.8%
C-08Mid-market$50,0002.5%
C-09SMB$45,0002.3%
C-10Enterprise$40,0002.0%

Forty customers, $2,000,000 ARR. The top 10 hold 52.0%, $240,000 over a 40% threshold. A 25% annual churn on that tier is $260,000 of expected ARR lost, not a list of who leaves. Twelve new logos at the $50,000 book average would bring top-10 share under 40%. HHI from every logo is close to the calculator's equal-rest figure because the unnamed remainder is fairly even.

Customer concentration and top-logo stress

Enter total ARR, customer count, the largest logos, a threshold on top-10 share, and annual logo churn on that tier. Named accounts are ranked; the rest of the book is treated as equal-sized. Prefilled with the fictional example.

Largest logos

Top 10 share
52.0%
$1,040,000 of $2,000,000
ARR over the threshold
$240,000
Threshold 40% = $800,000
ARR at risk at the stated churn
$260,000
$1,040,000 if the top 10 all leave
New logos to dilute under the threshold
12
$600,000 of new ARR at the book average $50,000 (12.0 before rounding up)
HHI (named + equal rest)
510.9
30 unnamed logos treated as equal shares of $960,000
Top 1 / 3 / 4 (10% of logos)
15.0% / 32.0% / 36.0%
$300,000, $640,000, $720,000
Largest logos
CustomerARRShare
C-01$300,00015.0%
C-02$200,00010.0%
C-03$140,0007.0%
C-04$80,0004.0%
C-05$70,0003.5%
C-06$60,0003.0%
C-07$55,0002.8%
C-08$50,0002.5%
C-09$45,0002.3%
C-10$40,0002.0%

Named accounts should be the largest logos. The rest of the book is split equally for HHI, so this score can differ slightly from ranking every customer. Expected ARR at risk applies the churn percent evenly across the top 10; it is not a forecast of which account leaves. New logos are sized at the current book average, an assumption you can change by editing total ARR and customer count.

Implementation steps

  1. 1

    Write the ARR definition down, the same one the NRR bridge uses: month-end recurring x 12 after recurring discounts, no one-time fees. A customer is one CRM parent, not one billing account, so a re-paper is not two logos

  2. 2

    Export every customer with ARR above zero: customer ID, segment, ARR, and renewal date if you have it. Drop duplicate IDs, blank IDs, and rows with no ARR, and list each dropped row

  3. 3

    Rank by ARR. Report top 1, top 3, and top 10 ARR and share of the book, plus the top 10% of logos (k = max(1, round(n / 10))). HHI = sum of (ARR / total ARR)^2 x 10,000 across every customer

  4. 4

    Set a threshold on top-10 share (40% in the fictional example, an input, not a benchmark). Dollars over = max(0, top-10 ARR - total x threshold). Alert when that is above zero

  5. 5

    Build a stress table: ARR lost if the top 1 / 3 / 10 / 10% of logos all leave, and expected ARR lost on the top 10 at a stated annual logo-churn probability (25% in the fictional example, an input). That probability is applied evenly; it is not a list of who leaves

  6. 6

    Size dilution back under the threshold: new ARR X = top-10 ARR / threshold - total, when positive. New logos at the current book average (total / n) = X / average, rounded up. Label the average as an assumption that new logos look like the current book

  7. 7

    Run it with the copy-paste prompt on this page in Claude or ChatGPT, or with formulas in the template, check total ARR against billing, and use the calculator on this page to test other thresholds and churn probabilities. Share top-10 share, dollars over, and the dilution line with the CFO; keep the named list off the public board appendix

  8. 8

    Rerun each month or each quarter and store top-1 / top-3 / top-10 share and HHI so concentration drift shows up before the next board pack

Template outline

The structure to recreate in your own workspace. Field names and thresholds are starting points.

Google Sheet: Customer concentration FYxx (Finance owns it)

Tab inputs: threshold (share of ARR in the top 10 logos), top_churn (annual logo churn on that tier; 0 to skip expected loss)

Tab customers (one row per customer): customer_id, segment, arr, renewal_date
  kept = customer_id <> "" AND arr > 0 AND not a duplicate

Tab ranked: SORT by arr descending
  total = SUM(arr); n = COUNT of kept
  top1 = SUM of first 1; top3 = first 3; top10 = first 10
  k = MAX(1, ROUND(n / 10)); top10pct = SUM of first k
  share = arr / total
  hhi = SUMPRODUCT(share, share) x 10000

Tab stress:
  lost_top1 = top1; lost_top3 = top3; lost_top10 = top10
  expected_top10 = top10 x top_churn
  threshold_arr = total x threshold
  over = MAX(0, top10 - threshold_arr)
  dilution_arr = MAX(0, top10 / threshold - total)
  new_logos = CEILING(dilution_arr / (total / n))

Worked example (example data, fictional): 40 customers, $2,000,000 ARR, 40% top-10 threshold, 25% churn on the top 10
  43 rows read, 40 kept. Left out: C-01 listed twice; C-X no ARR; one blank ID.
  Top 1 C-01 $300,000 (15.0%). Top 3 $640,000 (32.0%). Top 10 $1,040,000 (52.0%).
  Top 10% of logos = 4, $720,000 (36.0%).
  Threshold 40% of $2,000,000 = $800,000. Top 10 is $240,000 over. Alert.
  Expected ARR at risk: $1,040,000 x 25% = $260,000. If the top 10 all leave: $1,040,000.
  Dilution: $1,040,000 / 0.40 - $2,000,000 = $600,000 of new ARR. Book average $50,000, so 12 new logos.
  HHI from every logo about 511.6; the calculator treats the other 30 as equal $32,000 shares (HHI 510.9).

Calculator on this page, prefilled: total $2,000,000, 40 customers, the ten largest logos, threshold 40%, churn 25%.
  Top-10 share, dollars over, ARR at risk, and 12 new logos match.

Slack to #finance after each month closes:
"Concentration {{as_of}}: top 10 logos {{top10_share}} of {{total}} ARR ({{top10_arr}}),
 {{over}} over the {{threshold}} threshold. {{new_logos}} new logos at book average would dilute it under.
 Sheet: {{sheet_url}}"

Tab history: month, n, total, top1_share, top3_share, top10_share, hhi, over

Cost, time saved, and break-even

Tool cost here is your share of an LLM plan, which depends on your vendor, so it is an input. Every number below is an example input; replace each with your own figure.

Inputs (all assumptions)

Replace each value with your own figure.

  • THours a quarter to rank the book and build a concentration stress table by hand5AssumptionTime the next board-pack concentration slide.
  • VHours a quarter with the prompt or template (export, review the data check and the results)1AssumptionTime the first two monthly runs.
  • RLoaded hourly cost of the FP&A analyst$75AssumptionSalary plus benefits, divided by working hours.
  • KMonthly tool cost for the LLM plan$20AssumptionYour share of the Claude or ChatGPT plan, from current vendor pricing and your invoices; billing exports, Google Sheets, and Slack are usually already paid for.

Formulas

Time saved per quarterT - V
5 - 1 = 4 hours
Time saved per week(T - V) / 13
4 / 13 = 0.3 hours
Value of time saved per quarter(T - V) x R
4 x $75 = $300
Tool cost per quarterK x 3
$20 x 3 = $60
Break-even hours per quarterK x 3 / R
$60 / $75 = 0.8 hours, so the run covers its tool cost once it saves 48 minutes a quarter
Top-10 share (fictional example data)sum of the 10 largest ARR / total ARR
$1,040,000 / $2,000,000 = 52.0%; $240,000 over a 40% threshold
  • The time math counts analyst time only. What a $260,000 expected loss is worth depends on whether those logos actually leave, so it is not added to the time savings.
  • A ranked snapshot is not a forecast. Recheck when a large logo renews, churns, or is acquired.
  • Rerun the time math after the first two months with your real review time V.

Common questions

How do you measure customer concentration?
Rank customers by ARR and divide the top 1, top 3, and top 10 by total ARR. In the fictional example 40 customers hold $2,000,000, the largest is 15.0%, the top 3 are 32.0%, and the top 10 are 52.0%. Also report the top 10% of logos (here 4 logos, 36.0%) so a 200-logo book is not compared with a 20-logo book on the same top-10 count.
What is a Herfindahl-style score here?
HHI = the sum of each customer's squared share of ARR, times 10,000. One customer at 100% is 10,000; 40 equal customers would be 250. In the fictional example the full-book HHI is about 511.6. The calculator equalizes unnamed logos, so its 510.9 can differ slightly from ranking every row.
How much ARR is at risk if the top accounts churn?
If the top 10 all leave, you lose their ARR ($1,040,000 in the fictional example). If you apply a 25% annual logo-churn probability evenly across that tier, expected ARR lost is $1,040,000 x 25% = $260,000. That is a stress number, not a prediction of which account leaves.
How many new logos would dilute concentration under the threshold?
New ARR needed = top-10 ARR / threshold - total ARR. In the fictional example $1,040,000 / 0.40 - $2,000,000 = $600,000. At the current book average of $50,000 that is 12 new logos. The average is an assumption that new logos look like the current book.
Is a 40% top-10 threshold a benchmark?
No. It is an input you set with finance. The fictional example uses 40% so the arithmetic is visible: $800,000 of room, $1,040,000 in the top 10, $240,000 over. Use your own cutoff, and do not treat 40% as a rule.

Keep going

View all Finance/FP&A

Need help implementing a playbook?

Our team builds custom Clay workflows and AI automations for revenue teams.

Get it built for you