Project margin: how to calculate it from your timesheets
Updated October 18, 2026
A project's margin is its revenue minus the cost of the hours it used. Cost is each logged hour times the hourly cost of the person who worked it; revenue is each hour times the rate agreed with the client — or the contract's fixed fee. With hours logged by project, the math does itself, and you can see it during the month, not only at month-end.
The math, in four lines
- Cost = sum of (each person's hours × that person's hourly cost).
- Revenue = sum of (hours × hourly rate), or the contract's fixed fee.
- Margin = revenue − cost.
- Margin % = margin ÷ revenue.
A worked example
| Job title | Hours | Cost/hour | Rate/hour | Cost | Revenue |
|---|---|---|---|---|---|
| Senior | 60 | 90 | 180 | 5,400 | 10,800 |
| Mid-level | 80 | 60 | 130 | 4,800 | 10,400 |
| Junior | 40 | 35 | 80 | 1,400 | 3,200 |
| Total | 180 | 11,600 | 24,400 |
The figures are illustrative — they don't reflect typical rates in any market. Margin = 24,400 − 11,600 = 12,800, or 52.5% of revenue. Each senior hour leaves 90 of margin; each junior hour, 45. That is why the same number of hours can produce very different margins, depending on who worked them.
This is the margin on hours: revenue minus the cost of the work. Other direct costs (licenses, subcontractors, travel), overhead and taxes are not in it, unless your company allocates them to the project. Don't read the 52.5% as net profit.
Where hourly cost comes from
Hourly cost is what the company spends per hour of that person: pay plus employer costs, or the contractor's fee, divided by the hours in the month. The most common mistake is using one average cost for everyone — it hides exactly the project that is eating up your most expensive people.
The exact figure depends on the method your company chooses — what matters is choosing once and using the same method for everyone:
- the hours base: contracted hours, or the hours actually available after vacation and absences;
- what goes into cost: salary, employer costs and benefits — or the contractor's fee;
- the effective date: each cost applies from a given date.
Cost also has a date. If someone's pay changes in September, August hours keep August's cost; recalculating the past with today's cost changes margins you have already discussed with the client.
Where the hourly rate comes from
The usual setup is a rate card by job title in each proposal — senior, mid-level, junior —, with an exception for a specific person when the contract calls for it. Rates by job title keep proposals comparable and spare you a renegotiation every time someone joins or leaves the team.
What about fixed-fee projects?
On a fixed-fee contract, the month's revenue doesn't depend on hours — and that is exactly when logging hours matters most. Cost is still hours × hourly cost, and the margin shows whether the fixed scope is using more people than the fee paid for, while there is still time to talk to the client.
| Indicator | Planned | Actual |
|---|---|---|
| Project revenue | 24,000 | 24,000 |
| Cost of hours | 12,000 | 18,000 |
| Margin | 12,000 | 6,000 |
| Margin % | 50% | 25% |
Revenue didn't change; 50% more effort cut the margin in half.
Three mistakes that skew the margin
- Only calculating at month-end. A partial margin — from the 1st to today — lets you act; a closed month's margin only lets you explain.
- Mixing up two kinds of overtime. The overtime the client pays for follows the contract; the overtime your team is paid or gets as time off follows labour rules. They are different numbers.
- Letting the number change after invoicing. If a rate or a cost is adjusted, hours already invoiced should keep the values in force at the time.
Frequently asked questions
Who should see people's hourly cost?
Very few people: cost reveals pay. In Nimbos, only users with the Cost/hour & margin permission see cost and margin — for everyone else, those numbers never leave the server.
Does the margin change if I raise a rate later?
Not for hours already invoiced. In Nimbos, invoicing writes that moment's rate and cost onto each hour. Reopening the invoicing clears those values — the next invoicing writes the current ones —, and the reopening is recorded in the audit log.