
You're optimizing the wrong number.
Every agency owner I talk to can quote their clients' ROAS to two decimal places. Cost per lead, cost per acquisition, click-through rate by ad set. There's a dashboard for all of it.
Then I ask what it costs to produce the report those numbers live in, and the room goes quiet.
The retainer math nobody does
Say a small agency charges $1,500 a month to run Facebook ads for a client. Everyone knows that number. It's on the invoice.
The cost of the monthly report isn't on anything.
Your junior coordinator pulls the data out of Meta and screenshots the graphs. She duplicates last month's report, fixes the date range, pastes in the new screenshots and reformats whatever broke. Then she writes the commentary: "Impressions were up 12% month over month, CPC decreased slightly, we recommend increasing budget on Ad Set 3."
Call it 8 hours per client. More if the client has questions or wants the slides moved around.
At a $30/hour blended cost, that's $240 a month in labour for one client. Sixteen percent of the retainer is gone before anyone touches an ad.
Now multiply it
Most agencies with 4 to 16 people run ads for somewhere between 4 and 8 clients. Take six.
- 6 clients × 8 hours = 48 hours a month on reporting
- 48 hours × $30 = $1,440 a month
- $17,280 a year
That money doesn't buy strategy or better creative. It pays someone to move numbers from one tool into another so a client can glance at a PDF and reply "looks good, keep going."
And that's before the revisions. The "can you make this a bar chart?" email. The "can you add Instagram to this too?" request that nobody bills for because it's "only 20 minutes."
The margin you think you have
Start with the $1,500 retainer and take out what you'd expect:
- Reporting: $240
- Managing the campaigns, about 6 hours at $30: $180
- Your share of AI and tool subscriptions: roughly $50
That leaves $1,030. A 69% margin. Looks fine.
But your senior person reviews the report, signs off on the creative and fields the questions the report kicked up. That's 3 hours at a senior rate, say $50 an hour. Another $150. Now you're at $880, or 59%.
Then add the 2 hours your coordinator spent chasing internal approvals. The hour she lost reformatting after the client changed the template. The 45 minutes she spent rewriting ChatGPT copy that didn't sound like the client. Almost four more hours at $30.
You're at about 51%, and you haven't paid rent yet. On a $1,500 retainer.
Nobody tracks this, because nobody thinks of reporting as a cost. It's "part of the job."
The reporting trap
I've spent 25 years in design and brand leadership, a lot of it inside agencies. I've watched this happen from the inside.
In the small agencies I've seen, reporting is the biggest expense nobody tracks. It isn't hard work. It's spread across too many people in slices too small for anyone to notice the total.
It's also mechanical. Pull the data, format it, write it up, get approval, send it. Every month, for every client, the same steps in the same order.
That's a workflow, and someone can design it once instead of doing it by hand forever.
What it looks like as a workflow
In Workilo, the Facebook Ads Campaign workflow ends with a performance phase. Alex, the ad manager workalong, writes the report: ROAS, CPA, CPM, CTR and spend pacing, with anything underperforming flagged against the kill criteria you set when the campaign launched. Alex recommends. Alex never moves budget on its own.
Your senior partner reads it, edits what needs editing and approves it.
The goal is review time measured in minutes instead of a coordinator's whole day. If that review takes 15 minutes at the senior rate, the report costs about $12 instead of $240. On that $1,500 retainer, the margin goes back to something you'd be happy to see.
Your coordinator gets those 8 hours back for work that needs a person.
Your number is different. Probably worse.
I kept these numbers conservative: $30 an hour, 8 hours a report, six clients. Your rates might be higher. Your reports might take longer. You might have twice the clients.
So what does your reporting actually cost?
Run your own numbers: workilo.io/roi