Agency Client Report Template
Four documents and three sheets, including the retainer reconciliation that answers what the client is paying for, in hours.
Free download · No account needed
Work Delivered Against Retainer
[Agency] — client book, [month]
One row per client. Every reporting tool on the market builds the performance half of a client report. This is the half none of them builds, and it is the half the client is actually asking about.
| Client | Retainer | Hours bought | Worked | Report | Total | vs bought | Paid per hour | Margin |
|---|---|---|---|---|---|---|---|---|
| — | — | — | — | — | — | — | — | — |
| — | — | — | — | — | — | — | — | — |
| — | — | — | — | — | — | — | — | — |
| — | — | — | — | — | — | — | — | — |
| Book | — | — | — | — | — | — | — | — |
Report production is its own column because it is delivery time and it sits inside the retainer. Folding it into the workstreams, or leaving it out, is the commonest way this reconciliation ends up flattering itself.
Paid per hour is the retainer divided by the hours actually delivered. It routinely shows a small client paying less per hour than a large one, which is the opposite of what most agencies assume about their own book.
Every agency client report template is a dashboard. Connect the platforms, pull impressions, clicks, cost per click, conversions, sessions, rankings and return on ad spend, arrange them on a page, add a summary box. Several of the tools that ship them are genuinely good at it. None of them reports the two things a retainer client is actually asking. What did the retainer buy, and did anything the agency did cause any of what moved? Both answers live in the agency's own records, not in a platform export.
Ravelin Digital is an invented seven-person agency with nine retainer clients. In March it sold 384 hours and delivered 462.5, including 38.5 spent making the reports. At its own cost of $103.86 a delivered hour, that is $8,153 of unpurchased work in one month. Half of it is the document that exists to justify the retainer. Two clients are underwater, both of them the smallest bills on the book, and neither has ever asked for anything. Over a year that is $97,832, more than a delivery hire costs in salary and payroll burden.
The three clients who got less work than they bought average 35.8 per cent margin, and they are the three who ask what they are paying for. The three most over-delivered average 6.9 per cent and have never asked. Of 33 notable movements, 16 have a piece of work that went live before them, 3 were claimed for work that landed afterwards, and 12 have nothing behind them. Three more findings moved between pulls a fortnight apart, so they existed only because of when the button was pressed.
What's in the pack
Work Delivered Against Retainer sheet
Hours bought against hours worked by workstream, with report production as its own line rather than folded in or left out. Then the effective rate each client pays, the agency's cost per delivered hour, and margin in dollars and per cent.
Performance by Channel sheet
Every tracked movement with its prior value, its current value, the day it began, the candidate delivery item, the date that item went live, the gap in days, the channel's measured lag window and one of four verdicts. Each metric also records whether it is counted against the click or against the conversion, because the two disagree about which month a sale belongs to.
Trend sheet
Six months of hours delivered per client against hours bought. Scope drift is invisible in one month and unmistakable across six, and no client on the worked example had their retainer changed in that time.
Report Narrative
The client-facing document, in the order that survives the question. What the retainer bought comes first, then what moved with a verdict on each, then the shortest section on the page, then next month with hours attached.
Insight Note
The working note behind that shortest section. The five patterns worth writing up, the test an insight has to pass, and what to do with the unattributed movements rather than quietly leaving them out.
Next-month Plan
Every item carries the work, the hours out of the retainer, the metric it should move and the date it goes live. That makes the plan and next month's reconciliation the same document a month apart.
Retainer Conversation Note and eight prompts
The three shapes that conversation takes and the arithmetic to have ready for each, plus the method behind all of it. Which of these hours earn anything is the next question.
How it works
- 1
Take the files or install the pack
Four documents and three sheets as Word and CSV files with no account, or install the whole thing into a private Space with the agent already primed on the reconciliation and the attribution rule.
- 2
Send the client list and last month's time log
What each client pays, how many hours it buys, and where the hours actually went, including the ones spent making reports. Hours bought comes off the engagement letter, which is the same number the onboarding pack recorded when the client signed.
- 3
Get the reconciliation before a single export
Hours bought against hours delivered per client, the effective rate each pays, cost per delivered hour, margin, and the total delivered beyond what was purchased. One conversation, and it is the finding.
- 4
Add the dated delivery log, then run the join
What went live, when, in which channel, for which client. Every movement gets one of four verdicts, a segment that vanished is marked withheld rather than zero, and the reports assemble across the whole book from one computed base.
Frequently asked questions
Is this template free?
Yes. Four documents, three sheets and eight prompts with no signup and no card, and they are the same files the agent works in. Editing with AI is the optional path, where your own time log and platform exports build the reconciliation instead of the worked example doing it.
What format are the downloaded files?
CSV for Work Delivered Against Retainer, Performance by Channel and Trend, and Word for the four documents, zipped together. Excel, Numbers, Sheets, Word and Pages open them directly with nothing to install. The worked example ships in the cells, so the arithmetic is visible before you replace it.
Does this replace my reporting dashboard?
No. Keep it. A dashboard builds the performance half well and this adds the two halves it cannot: hours bought against hours delivered from your own time log, and every movement joined by date to what you actually shipped. Neither lives in a platform export.
We do not track time. Can we still use it?
The reconciliation needs hours, so some form of time record is the price of entry. Start with a rough weekly split per client and the reporting hours separately. Even approximate hours found 78.5 unpurchased ones on the worked example, which no amount of precision elsewhere would have.
Is it not risky to show a client the unattributed movements?
The opposite. A report claiming 16 movements and saying plainly that 12 have nothing behind them is believed. One implying all 33 is not, and the client already suspects it. They can also usually explain several of the 12, which is a better conversation than the paragraph it replaces.
Why does report production get its own line?
Because it is delivery time inside the retainer and it is large. On the worked example it is 8.3 per cent of every client hour and half of everything delivered beyond what was bought. Folding it into workstreams is how a reconciliation flatters itself.
Does this work for a project agency rather than retainers?
Partly. The attribution join and the pull-date discipline work on any engagement. The reconciliation needs a purchased quantity to compare against, which for project work is the estimate rather than a monthly hour count. Close each job against the estimate and the same variance shows up. A law or consulting firm runs the same bought-against-delivered discipline as realization, covered in the professional-services operations pack.
Find out how many hours your retainers gave away last month
Download the blank pack as Word and CSV files, or open it in River, send the client list and one month of time, and get the reconciliation back before any export is touched.
Edit with AI