Skip to content

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.

Workflow · Strategic & Ad-Hoc | Role · FP&A Analyst | Intermediate | 8 min | Updated Jun 2, 2026
The prompt

Copy and customize

prompt.txt
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.
Open in
We’ll copy the prompt and open the chat.
How to use

Run it in four steps

  1. Export revenue from the Amount field tagged to a customer, with parent-child relationships resolved, covering the current and prior-year period.
  2. Paste it into {revenue_data}, and point {customer_field} and {date_field} at the right columns.
  3. Run it for the ranked top 10 with trend labels.
  4. Spot-check that no large customer is split across name variants, which can drop your real number one off the list.
When to use

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.

Example output

What you can expect back

Top 10 customers by revenue โ€” YTD (Amount)

RankCustomerYTD rev% of totalTrend
1Acme Corp1,420K6.2%Growing (+18% YoY)
2Globex1,180K5.2%Stable (+2% YoY)
3Initech940K4.1%Declining (-21% YoY)
4Umbrella880K3.9%Growing (+11% YoY)
10Soylent410K1.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.

Limitations · Worth knowing

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.

Prerequisites

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 it run on real data

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
The Hub

Join the FinanceOS Hub.

Subscribe to get new sessions, use cases, and AI workflows for finance teams โ€” straight to your inbox, every Monday.

  • Weekly ยท ~4 min read
  • No spam, unsubscribe anytime
  • 2,400+ finance leaders