Agency margin rests on two ratios that multiply. Most small agencies track neither weekly, and find out at month end when the hours are already spent. Here is the report that changes when you find out.
Agency profitability rests on two ratios that multiply rather than add. Utilization is the share of available hours spent on client work. Realization is the share of those hours you actually get paid for. Eighty percent of eighty percent is sixty-four, which is how two respectable numbers produce a poor result.
Most small agencies track neither weekly. They find out at month end, by which point the hours are spent and the conversation is retrospective.
Why weekly is the whole point
An overrun spotted at forty percent through a project is a scoping conversation between professionals. The same overrun at ninety percent is an argument about an invoice, and by then you have already done the work and lost all your leverage.
That is the entire case for this automation. It does not make anyone faster. It moves the moment you find out.
You cannot have the early conversation if you learn about the overrun late. Everything else here is plumbing.
What I built
A scheduled job that runs every Friday morning, pulls logged time against contracted hours per client, and delivers one line per client into the channel the team already uses. Nobody opens a system to produce it and nobody has to ask for it.
Mine runs against Jira and Tempo, but the pattern is source-agnostic: any time tracker with an API and any record of what was sold will do.
How to build it
1. Fix the time data before automating anything
This is the step people skip and it is the one that decides success. If time is logged sporadically, or to the wrong project, or in a weekly bulk entry on Friday afternoon, an automated report will publish garbage faster. Spend two weeks getting logging honest before you write a line of code.
2. Record what was sold, in the same units
You need contracted hours per client in a machine-readable place. A spreadsheet is fine. What is not fine is contracted hours living only in signed PDFs, which is common and is why this report does not exist at most agencies.
3. Write the pull
Fetch logged hours per client for the period, join to contracted hours, calculate percentage consumed and percentage of timeline elapsed. Those two percentages side by side are the whole insight.
4. Deliver it where people already are
Into the team channel or as a direct message, not to a dashboard someone has to remember to open. A report that requires a visit is a report that gets visited during the good weeks and avoided during the bad ones.
5. Flag rather than rank
Highlight any client where hours consumed exceeds timeline elapsed by a meaningful margin. Do not build a league table of people. The moment this becomes a performance ranking, time logging becomes defensive and the data stops being true.
6. Add the monthly realization review
Once weekly burn is running, add a monthly view of what was written off and why, per client. Patterns show up fast and they are almost always concentrated in one client, one deliverable type or one approver.
Tools and what they cost
| Option | What it costs | Honest trade-off |
|---|---|---|
| Jira + Tempo | Tempo is a per-user marketplace app on top of Jira seats. | Rich time data and strong reporting primitives. Cost scales with headcount, and you are buying into the Atlassian ecosystem. |
| Harvest, Toggl, Clockify + a script | Clockify has a free tier; the others are single-digit dollars per user per month. | Simpler and cheaper. You write the join to contracted hours yourself. |
| Apps Script pulling both APIs into a Sheet | Free with Google Workspace. | No per-task cost and fully ownable. Mind the six-minute execution limit; batch your reads rather than looping cell by cell. |
| A BI tool on top of the data | Looker Studio is free; paid BI tools run to hundreds a month. | Beautiful, and it produces a dashboard rather than a message. Dashboards get visited less than messages arrive. |
What it is actually worth
Here is the honest position. I cannot tell you what percentage this will improve your margin, and anyone who quotes you a figure for it is guessing.
What is measurable is the context. Service Performance Insight's 2025 Professional Services Maturity Benchmark, an annual study of professional services firms, found industry billable utilization fell to 68.9 percent in 2024, the lowest in five years and below the roughly 75 percent generally treated as healthy. Over the same period EBITDA across those firms dropped from 15.4 percent to 9.8 percent.
That is the environment. Whether weekly visibility improves your number depends on whether you act on what it shows, which is a management question rather than a technical one.
The arithmetic you can run yourself: take your last four projects that overran. For each, estimate when the overrun became visible in your data, and when someone actually noticed. The gap between those two dates, multiplied by your blended hourly cost, is what this automation is worth to you specifically.
How it breaks
Time logging is unreliable, so the report is wrong. Fix the input first. An automated report built on bad data destroys trust faster than no report at all, and you only get one chance at that trust.
It becomes a surveillance tool. If the weekly line is used to interrogate individuals, people will log time defensively and the numbers become fiction. Report by client, not by person.
Nobody acts on it. The report arrives, everyone reads it, nothing changes. Pair it with a standing five-minute slot in the weekly meeting where any flagged client gets a named owner and a decision.
How to tell whether it worked
Not by whether the report goes out. By how early overruns are now caught, measured as the average percentage-through-project at which a scope conversation happens. If that number is falling, the automation is doing its job. Also watch total hours written off per month, which is the money the report is protecting.