Customer Concentration and Revenue Quality: Is Your Growth Actually Safe?

Revenue is up 20% this year. That sounds like good news until you notice that one customer accounts for most of the increase -- and you're not entirely sure what happens to this year's number if that one relationship changes. Growth and revenue quality are not the same thing, and a P&L that only shows the total will never surface the difference.

This is the question that matters most right before a loan application, a sale conversation, or just a normal year where you'd like fewer surprises.

The Real Problem: A Growing Total Can Hide a Fragile Structure

Total revenue answers "how much." It doesn't answer "how many customers is that spread across," "is any of it drifting into refunds and credits," or "how much of what's owed to us is actually collectible on time." Those three questions -- concentration, revenue-vs-refunds, and collections -- are what separate broad-based, durable growth from growth that's one customer, one dispute pattern, or one slow-paying account away from a much worse year. If one customer is asking for longer terms or a discount for paying faster, what do these payment terms actually cost me prices the ask on that customer's real days-to-pay.

Concentration is the one owners most often underweight, because it doesn't show up as a problem until it does. A single customer at 40% of revenue isn't automatically bad -- some businesses are built that way on purpose -- but it's a fact a buyer, a lender, or the owner themselves should know explicitly, not discover during a downturn.

What a Revenue Quality Analyzer Actually Does

Run against a revenue-only General Ledger export, a rolling three months of customer revenue history, and an AR Aging report, a proper revenue quality check does three things. It calculates each customer's share of total revenue and flags real concentration -- typically above 25%, with a higher bar for anything approaching 40% or more. It separates genuine sales from refunds and credit memos using the transaction itself (a credit reduces revenue; that's not a guess, it's how the entry is posted) and flags when refunds run high as a share of gross sales. And it checks how much of total accounts receivable is sitting past 60 days, since a revenue number that's growing on paper while collections slip is a different problem than one that's collecting cleanly.

It also tags each customer plainly by whether their revenue shows up in each of the last three months, none of them, or some but not all -- a presence check, not a claim about the relationship.

Getting the Export Right: QuickBooks and Xero

The check is only as good as the three exports behind it, and most of the ways this goes wrong happen at the export step, before a single formula runs. Three pastes are needed: one month of revenue-account General Ledger lines with the customer on every row, a short customer history (each customer billed this month, with their revenue in each of the three months before), and an AR Aging summary as of the end of that month.

What you actually need, part one: the revenue ledger. Every line posted to a revenue or income account for the one month you're reviewing, with date, account, amount, and customer. Customer is the column that does the work for concentration and the presence pattern, so it has to be consistent -- but it does not have to be the real name. An ID that repeats correctly across rows (CUST-001) is fine; what breaks the check is the same customer appearing under two spellings. Amount should keep your export's normal sign: positive for a sale, negative for a refund or credit memo. That sign is the entire refund check, so don't flip it.

Platform Report to pull Where to find it Setting to check
QuickBooks Online General Ledger (income accounts) or Sales by Customer Detail Reports -> Accountant reports -> General Ledger; or Reports -> Sales and customers -> Sales by Customer Detail Filter Account type to Income; set the date range to the exact month; show the Name column; credit memos and refund receipts must appear as negative lines, not be excluded
QuickBooks Desktop Sales by Customer Detail Reports -> Sales -> Sales by Customer Detail Set the date range to the exact month; if you use Jobs under customers, decide whether to read at the customer or job level and stick with it
Xero Account Transactions (revenue accounts) Accounting -> Reports -> Account Transactions Select every revenue account; set the date range to the month; the Contact column carries the customer; credit notes show as negatives

What you actually need, part two: the customer history. One row per customer billed this month, with that customer's revenue in each of the three prior months. Three blank trailing months means "no prior revenue on file," and that blank is what tells the check a customer is new -- it is not an error. QuickBooks Online and Desktop both have this as Sales by Customer Summary with columns set to Months; Xero's equivalent is Income by Contact, run with the date range covering the three months and the columns split by month. Use the same customer ID here as in the ledger paste, or the two tabs won't join.

What you actually need, part three: the AR Aging. The summary version, not the invoice-level detail: customer, total open balance, and the four standard buckets (current or 0-30, 31-60, 61-90, 90+). QuickBooks Online: Reports -> A/R Aging Summary. QuickBooks Desktop: Reports -> Customers & Receivables -> A/R Aging Summary. Xero: Accounting -> Reports -> Aged Receivables Summary. Run it as of the last day of the month you're reviewing, not today -- an aging report dated three weeks after period end will show balances that have since been paid or aged into the next bucket, and the collections read will describe a different month than the revenue read.

The trap that catches the most people: sub-customers and jobs. QuickBooks Online sub-customers and QuickBooks Desktop jobs roll up to a parent customer. A concentration check run at the job level can show a parent at 15% spread across five jobs when the actual relationship is one customer at 15% -- or, the other way, a check run at the parent level can hide that one division of that customer is the whole story. Pick the level that matches how a buyer or lender would ask the question (usually the parent) and use it consistently across all three pastes.

Refunds are revenue lines, not expense lines. A credit memo or refund receipt posts against the revenue account as a reduction; that's what the check keys on. If your bookkeeper records refunds to a separate "Refunds" expense account instead, the revenue ledger will look cleaner than it is and the refund check will read low. Either include that account in the pull or know that the refund percentage is understated.

Deposits and retainers are not revenue yet. On an accrual basis, a customer deposit sits in a liability account until the work is done. If deposits are being booked straight to income, this month's concentration will overstate whichever customer paid up front, and next month's will understate them. That's a books question before it's a revenue-quality question.

A five-minute sanity check before you paste anything in: does the revenue ledger total for the month roughly match the revenue line you already know? Does the aging summary's total open balance match the AR balance on the balance sheet as of the same date? If either is off, the export has a problem, and no amount of correct concentration math will fix a wrong input. Bad input makes a confident-looking wrong answer just as easily as bad bookkeeping does.

A Worked Example

Check Threshold (typical) Example this period Read
Customer concentration Flag at 25%+, RED at 40%+ One customer at 53% of $78,600 total revenue A single relationship is now more than half of revenue -- worth naming explicitly to a lender, buyer, or yourself.
Refunds / credit memos Flag at 3%+ of gross sales $5,000 in credits against $78,600 gross (6.4%) Above the typical watch level -- worth checking whether this is a pattern (disputes, quality issues) or a one-time cluster.
AR over 60 days Flag at 15%+ of open AR $11,700 of $45,000 total open AR (26%) A meaningful share of what's owed is aging past the point most businesses collect comfortably.

None of these three findings explains itself -- each is a fact about the ledger and the aging report that's worth a specific follow-up conversation, not a verdict on its own.

These figures are a worked illustration, not a benchmark -- typical concentration and aging thresholds vary by industry and should be read as a pattern to apply, not a number to match.

What This Does NOT Do

It does not know whether a customer relationship is durable. The presence-based tags describe whether revenue has shown up on file recently, nothing about the contract, the industry's normal billing cadence, or whether the customer plans to keep buying. A subscription customer who bills quarterly will look inconsistent by this measure even though the relationship is completely stable -- and a customer who happens to reorder once is not proof of a recurring relationship. Read the tags as a starting point for your own judgment, not a verdict.

It also doesn't explain WHY a customer is concentrated, why AR is aging, or why refunds rose -- those are facts about your numbers, not diagnoses of your business. And it can't do anything with a Trial Balance or GL that isn't clean; a concentration read on unreliable revenue postings is a confident-looking wrong answer.

When This Isn't the Right Starting Point

If you're not confident the books themselves are accurate yet, fix that first -- concentration and collections math run on unreliable revenue data will mislead more than it helps. If the business is profitable on paper but the bank account is tight, slow collections are one of seven possible cash drains, and the profit-cash pillar guide covers the whole set, not just receivables. And if the real question is whether a specific job or project is profitable, that's job costing, not revenue quality -- a customer can be a large, healthy share of revenue and still be a bad job to have taken on margin grounds. If a sale is actually in motion and a buyer's accountant is about to ask these questions formally, that is quality-of-earnings prep, which goes well beyond what a monthly check covers.

And if the concentration is about to be created by one contract you have not signed yet, the question is prospective, not a review of the book you have: can I afford to deliver this contract tests whether the business survives that customer giving notice before the work can be replaced, alongside the cash the job ties up before it pays.

The Decision Path

Start with concentration: does one customer make up more than a quarter of revenue? If yes, that's worth naming explicitly, whether or not it changes any of your business decisions today -- a buyer or lender will ask, and having the answer ready beats being surprised by the question. Then check refunds as a share of sales and AR over 60 days as a share of total open AR -- both are collectible-cash-versus-paper-revenue questions, and both matter more the closer you get to needing that revenue to actually convert to cash.

FAQ

What's considered a risky level of customer concentration?
Common thresholds flag anything above roughly 25% of revenue from one customer as worth watching, with anything near 40% or higher treated as a real structural dependency -- though the right threshold depends on the business and the relationship's stability.

Does high customer concentration always need to be fixed?
Not necessarily -- some businesses are built around a small number of large relationships on purpose. The point isn't that concentration is always bad; it's that it should be a known, explicit fact rather than something a buyer or lender discovers first.

What does an AR aging report actually tell me?
It shows how much of what customers owe you is current versus 30, 60, or 90-plus days overdue. A rising share past 60 days is often the earliest sign that paper revenue and collectible cash are starting to diverge.

Can this tool tell me if a customer is a "recurring revenue" customer?
Not with confidence. It can tell you whether that customer's revenue has shown up in each of the last several months on file -- a presence pattern, not a judgment about the contract or the relationship's durability.

Next Step

If you're heading into a lender conversation, a sale process, or just want a clearer read on how dependent this year's growth is on a small number of relationships, the first move is computing the three checks, not estimating them. Revenue Quality Analyzer is a $14.99 workbook that does exactly that from a revenue ledger, a customer history, and an AR Aging report you already have -- paste them in and it flags customer concentration, refund and credit-memo levels, and aged receivables against thresholds you can see and adjust, with the presence-pattern limitation above disclosed in the workbook itself, not just this article.

If the deeper question is whether the books as a whole would hold up to a buyer's review, the books-ready-to-sell diagnostic at GetAFractional is the better starting point -- see also the sale-ready books pillar guide for the fuller breakdown of that question. A revenue quality check answers "how safe is this year's revenue," not "are the books ready for a sale."

This article is informational and does not constitute financial, legal, or tax advice. Consult a qualified professional for decisions specific to your situation.