Rank top customers by revenue and flag the trend
Ranks the top customers by year-to-date revenue and labels each as growing, stable, or declining against last year.
Copy and customize
You are an FP&A analyst preparing a top-customer revenue view.
Context: revenue is in the Amount field, the customer is in {customer_field}, and
the reporting date is {date_field}. Use the current year, with the prior year for
the trend where available.
{revenue_data}
Task: rank the top 10 customers by YTD revenue and label each customer's trend.
Output format:
- A table ranked by YTD revenue: customer, YTD revenue, share of total company
revenue, trend label (growing / stable / declining) vs. the same period last year.
- State that "share of total" uses total company revenue as the denominator.
- The combined share represented by the top 10, with one line on concentration risk.
- Where a customer has no prior-year figure, label it "no prior-year baseline"
rather than inferring a trend.
Run it in four steps
- Export revenue from the Amount field tagged to a customer, with parent-child relationships resolved, covering the current and prior-year period.
- Paste it into
{revenue_data}, and point{customer_field}and{date_field}at the right columns. - Run it for the ranked top 10 with trend labels.
- Spot-check that no large customer is split across name variants, which can drop your real number one off the list.
When to reach for this prompt
Use this for a QBR, a board appendix, or any "who are our biggest accounts and are they healthy" question. The trend label is the value: a static top-10 list will not tell you a key account is quietly shrinking. It is sensitive to customer-data hygiene, so it is better suited to a business with resolved parent-child relationships than one where the same customer appears under several names.
What you can expect back
Top 10 customers by revenue โ YTD (Amount)
| Rank | Customer | YTD rev | % of total | Trend |
|---|---|---|---|---|
| 1 | Acme Corp | 1,420K | 6.2% | Growing (+18% YoY) |
| 2 | Globex | 1,180K | 5.2% | Stable (+2% YoY) |
| 3 | Initech | 940K | 4.1% | Declining (-21% YoY) |
| 4 | Umbrella | 880K | 3.9% | Growing (+11% YoY) |
| … | ||||
| 10 | Soylent | 410K | 1.8% | No prior-year baseline |
Top-10 concentration: 38% of total company revenue (denominator: total company revenue). No single customer exceeds about 6%, so concentration risk appears moderate. Initech's decline may be worth monitoring as a potential retention risk.
This prompt has real limitations you should understand.
Customer-level revenue is where data hygiene problems hit hardest, because the unit of analysis is exactly the thing that is hardest to define consistently across systems. A parent and its subsidiary, a renamed account, or a CRM identifier that differs from the billing name each appears as a separate customer, so a top entry may really be two entities, or the true number one may be split across rows and miss the list entirely.
The trend label needs a like-for-like baseline that the data rarely guarantees. "Declining 21%" assumes the prior-year figure is the same customer measured the same way, and a mid-year contract restructure, or a move from monthly to annual billing, fakes a decline that is purely a timing change. The same applies if the Amount field is invoiced rather than recognized revenue, where lumpy annual invoices swing a customer between growing and declining on cadence alone.
A reliable customer ranking depends on entity resolution that ties every transaction to one canonical customer, joined across CRM and billing on a single revenue basis, before the prompt ranks anything. That join is a data-layer problem, and it is the reason customer analytics built directly on raw exports so often points attention at the wrong accounts.
What your data needs to look like
- A revenue Amount field tagged to a customer
- A deduplicated customer field with parent-child relationships resolved
- A consistent reporting date covering the current and prior-year period
- A single revenue basis (recognized or billed) applied across all customers
See how FinanceOS handles this prompt on real financial data.
Book a 20-minute walkthrough. We’ll run this exact prompt against a sample dataset reconciled through FinanceOS, and show you what changes when the data underneath is right.
Book a walkthrough