Nearly half of digital marketing clients aren't happy with the reports they're getting. A survey cited by Vendasta puts the figure at 42.86% of clients in the industry unsatisfied with their agency's reporting — not with results, specifically with the reporting itself. That's a strange thing to lose a client over, given how fixable it is.
The usual culprit isn't a lack of data. It's too much of the wrong kind: a GA4 export full of "Session default channel group" and "(not set)," handed to someone who just wants to know if the ads are working. This post covers what a client-facing report actually needs to answer, a minimal structure that covers it, and how to build one in a few minutes with our free lead report generator.
The stakes are higher than "annoying export"
Client reporting isn't a cosmetic problem. Swydo's analysis of agency churn found retainer-based agencies lose roughly 18% of clients a year, against roughly 42% for project-based agencies — and reporting quality is one of the few retention levers an agency fully controls, independent of campaign performance. A client who can't tell what's working doesn't necessarily blame the results. They blame the agency for not making it clear.
What a client actually wants to know
Strip away the dashboard and it comes down to three questions, in this order:
- Which channels are bringing in leads? Not sessions, not impressions — leads.
- What is each one costing? Cost per lead, not cost per click.
- Is that better or worse than before? A number without a comparison point is just a number.
A raw GA4 or Meta Ads export answers all three, technically — buried inside columns built for an analyst, not a business owner. The translation work is the actual value an agency adds here, not the export itself.
Skip the manual translation. Paste your export and get the channel breakdown, cost per lead, and a plain-English summary in one pass.
A minimal structure that covers it
You don't need more than this to answer all three questions:
- Total leads and total spend, up top, in plain numbers.
- Blended cost per lead — the one number a client will actually remember.
- A per-channel table: channel, leads, share of total, cost per lead. Sorted by leads, not alphabetically — the important row should be the first one they see.
- One paragraph in plain English naming the top channel, the cheapest channel per lead, and flagging anything that spent money with nothing to show for it.
That last line matters more than it looks. A channel with real spend and zero recorded leads isn't necessarily a bad channel — it might be a tracking problem instead. Calling that out in the report, rather than letting a client assume the channel simply doesn't work, is the difference between a report that builds trust and one that quietly erodes it.
Where this stops scaling
A CSV-to-summary pass like this is genuinely useful for a one-off — a quarterly business review, a new client's first month, a one-time audit. It doesn't scale as a monthly habit, because it depends on someone remembering to export, paste, and reformat it every single time, for every single client.
The alternative isn't a better export. It's not exporting at all. A live, filterable, client-facing lead feed — the source and channel already attached to every lead the moment it comes in — answers the same three questions permanently, without anyone rebuilding a report from scratch each month.
Give every client a live view instead of a monthly PDF. Lead Recorder's client share links update automatically, filterable by source and date — no export required.