Ask most agencies which of their projects were profitable last year and you get an answer based on feel: the big retainer was good, that rebrand was painful, the one with the difficult stakeholder probably lost money. The feel is often right about the extremes and almost always wrong in the middle, which is where most of the work is.
The calculation is not complicated. It is just usually run with two or three things missing.
The calculation
Project margin = revenue − (delivery cost + directly attributable costs)
Margin % = margin ÷ revenue × 100
Revenue is what you actually collected, not what you quoted. Deduct discounts, write-offs and anything absorbed.
Delivery cost is hours worked × the true cost of those hours — which is considerably more than salary divided by 2,080. Use each role's real loaded cost, not a blended agency rate, because the staffing mix is usually what decides whether a project worked.
Directly attributable costs are the ones most often forgotten: freelancers and contractors, stock assets and licenses, printing, travel, client entertainment, and any software bought for that project alone.
The four things routinely left out
Non-billable time on the account. The internal reviews, the resourcing conversations, the twenty minutes explaining the brief. If it was caused by that client it is a cost of that client, whether or not anyone billed it. Leaving it out is the single largest source of over-stated project margin.
Account management and project management. In a lot of agencies these roles are not on a timesheet at all. They are real, expensive, and unevenly distributed — a demanding client can absorb three times the account management of a straightforward one at the same fee.
Rework. Hours spent redoing work at your own cost are hours. Writing them off makes the invoice look clean and makes the margin fictional.
Pitch cost, for new clients. Not part of project margin strictly speaking, but a project that carries a first-time client should be understood against what it cost to win. A 30% margin on a project that took 60 hours of pitching is not a 30% margin.
Run it at the right moment
Once at the end is too late to do anything about it.
In flight, weekly. Burn against budget, fifteen minutes. This is the check that catches scope creep, underestimation and resourcing problems while there is still a project left to change. Almost every agency that runs a genuine weekly burn review says the same thing: the value is not the report, it is that people know it is happening.
At close, properly. Full calculation with all the costs above, including the ones that arrive late. This is what makes your next quote better.
Quarterly, across the portfolio. Patterns you cannot see one project at a time: a client type that consistently underperforms, a service line that looks busy and earns nothing, a project size that never works.
What to look for in the answer
Compare against your own floor, not an industry benchmark. You need a gross margin that covers overhead and leaves a profit. Work out what that is for your agency and treat it as the line.
Look at the distribution. An agency averaging 45% margin might have most work at 55% and two disasters at −20%. The average tells you nothing about which problem to solve. The two disasters usually have something in common.
Sort by margin and look at the bottom five. This is the highest-value ten minutes in the whole exercise. It is nearly always the same story: scope was never re-agreed after it changed, the wrong seniority did the work, or the estimate assumed nothing would go wrong.
The point is the next estimate
Post-project profitability is only worth calculating if it changes how you quote.
Keep estimated hours next to actual hours, by role, for every project you close. Within a year that is the most valuable pricing asset your agency owns — it tells you that you consistently underestimate a particular kind of work by 40%, which no amount of judgement was going to reveal.
That is the return here. Not knowing which projects lost money. Not losing money on the same shape of project again.