[Blog](https://billnotch.com/blog) / Project Profitability: How to Know If a Project Pays

# Project Profitability: How to Know If a Project Pays

> Project profitability in one formula: revenue minus time cost minus expenses, plus effective hourly rate and why untracked hours hide real losses.

[Adam A.](https://billnotch.com/about) September 1, 2026 8 min read Updated September 6, 2026

**Project profitability** is what the project earned minus what it cost you to deliver, and for service work the dominant cost is time. The formula is short enough to hold in your head:

> **Project profit = revenue − time cost − direct expenses**

> **Project margin = (project profit ÷ revenue) × 100**

The arithmetic is easy, so project profitability analysis almost never fails on the maths. The reason so many agencies and freelancers can't answer "did that project make money?" is the middle term: time cost is only as accurate as the hours you recorded, and the hours nobody records are exactly the ones that turn a good project into a bad one.

## What counts as time cost

Time cost is every hour spent on the project multiplied by what that hour costs. Two things people leave out, both expensive.

The first is the non-delivery hours. Kickoff calls, status updates, the Slack thread about scope, the invoice you wrote at the end. That work exists because the project exists, so it belongs to the project, even though it never appears in a deliverable. The habit of counting only "real" work is how a project that consumed 140 hours gets recorded as 100.

The second is the cost rate itself. If you employ people, use their loaded cost (salary plus payroll taxes, benefits, and overhead) not their salary divided by 2,080, which understates them by a third or more. If you're solo, you have no payroll to point at, so use the rate you would have earned on other work. An hour spent on a fixed-price project you underquoted is an hour not sold at your standard rate, and that is a real cost whether or not money changed hands.

## Effective hourly rate: the number that settles arguments

Margin tells you whether a project paid. Effective hourly rate tells you whether it was worth doing instead of something else.

> **Effective hourly rate = revenue ÷ total hours actually worked**

Compare it to your target rate and the answer is immediate. A $12,000 project delivered in 100 hours earned $120 an hour. The same project delivered in 160 hours earned $75. Nothing about the invoice changed; the second version just quietly cost you 60 hours you could have sold. This is also the number that makes fixed-price quotes improve over time, because it converts "that one felt heavy" into a figure you can put next to the next quote. If you don't have a target rate to compare against, [how much to charge as a freelancer](https://billnotch.com/blog/how-much-to-charge-as-a-freelancer) derives one, and the [consulting rate calculator](https://billnotch.com/tools/consulting-rate-calculator) turns it into an hourly, day and retainer figure.

## A worked example

A fixed-price website project, quoted at $12,000 against an estimate of 100 hours, an implied $120 an hour.

| Who | Hours | Cost rate | Time cost |
| --- | --- | --- | --- |
| Senior designer | 62 | $65 | $4,030 |
| Junior designer | 46 | $40 | $1,840 |
| Account manager | 30 | $55 | $1,650 |
| **Total** | **138** |  | **$7,520** |

Add $480 of direct expenses (stock photography and a font licence) and the picture resolves:

| Line | Amount |
| --- | --- |
| Revenue | $12,000 |
| Time cost | −$7,520 |
| Direct expenses | −$480 |
| **Profit** | **$4,000** |
| **Margin** | **33%** |

A 33% margin is a respectable project. But the effective hourly rate is $12,000 ÷ 138 = **$87**, against the $120 the quote assumed. The project made money and still underperformed the estimate by 38 hours, and only the second number tells you that. Quote the next one the same way and you will make the same 38-hour mistake again.

## Why untracked hours destroy margins silently

Now run the same project with imperfect records. Suppose 22 of the account manager's 30 hours were never logged: the calls, the email, the scope conversations, each too short to feel worth recording. The reported project looks like this:

| Line | Reported | Actual |
| --- | --- | --- |
| Hours | 116 | 138 |
| Time cost | $6,310 | $7,520 |
| Profit | $5,210 | $4,000 |
| Margin | 43% | 33% |
| Effective hourly rate | $103 | $87 |

Ten points of margin, invented by omission. Nothing was falsified; some hours simply never made it into a system, and the missing hours were all of one kind: short, interruptive, non-delivery work. That bias is the dangerous part. Untracked time doesn't scatter randomly across a project, it concentrates in exactly the category most likely to be underestimated, so the projects that look best on paper are often the ones bleeding the most account-management time.

The consequences compound. You quote the next project from a 43% margin that never existed. You keep the client type that appears most profitable and is not. You raise the rate on the wrong service line. A margin computed from partial hours isn't a slightly noisy number, it is a number biased in one direction, and it always points toward taking more of the work that is quietly losing. The same missing hours on an hourly engagement are money you never invoiced at all: [what a revenue leak is](https://billnotch.com/blog/what-is-a-revenue-leak) covers that side, and [how to stop losing billable hours](https://billnotch.com/blog/stop-losing-billable-hours) runs a short audit that finds them.

## Fixed-price and hourly fail in different ways

The failure mode depends on how you sold the work, and the fix is not the same.

On **hourly** work, unrecorded time hits revenue directly. Every hour you worked and didn't log is an hour you didn't invoice, so profitability and billing are the same problem and capture solves both. Margin is largely set at quoting time by the rate.

On **fixed-price** work, revenue is fixed no matter what you record, so unrecorded time can't reduce your invoice. It only hides your true cost. That feels harmless and isn't: the entire value of tracking a fixed-price project is learning what it actually took, so the next quote is better. Untracked hours on fixed-price work don't cost you this project, they cost you the next three, because you re-quote a losing shape as though it were a winner. Which is also why fixed-price work needs the same [billable and non-billable split](https://billnotch.com/blog/billable-vs-non-billable-hours) as hourly work, even though nothing on it gets billed by the hour.

Retainers sit between the two and inherit the worst of both: fixed revenue plus an open-ended scope, where the only defence is knowing your hours per month against the fee.

## Measuring it without a month-end ritual

Project profitability computed once a quarter from reconstructed timesheets is worse than useless, because you'll act on it. It has to be a by-product of ordinary work rather than a task somebody remembers to do.

[BillNotch](https://billnotch.com/) records your active window in the background on Windows, macOS, and Linux, so the short non-delivery hours land in the same place as the deep work: no timer to start, and nothing to reconstruct on Friday. Keyword rules and optional AI sort activity into client projects, billable status is inherited per project, and the reports give you hours and billable ratios per project and per member, which is the raw material both formulas above need. Invoices are generated from the same tracked time as a PDF or CSV, and the Revenue Leak Finder surfaces billable hours that never reached an invoice.

Pro is $9/month for one seat and Team is $12/seat/month, flat, with a 14-day trial and no card required. It is not the cheapest option in either category, and a spreadsheet plus a stopwatch is genuinely free. The case is that profitability math falls apart on incomplete hours, and automatic capture is the only version of hour-collection that doesn't depend on remembering.

Whatever you measure with, measure per project rather than per month. Monthly totals average a losing project into a winning one and tell you nothing about either; see [billable utilization rate](https://billnotch.com/blog/billable-utilization-rate) for the capacity side of the same picture, and [how many billable hours in a year](https://billnotch.com/blog/how-many-billable-hours-in-a-year) for what you have to sell in the first place. If you bill by project phase, the same per-project math applies to each phase, which is the whole point of [time tracking software for architects](https://billnotch.com/for/architects).

## Frequently asked questions

### How do you calculate project profitability?

Subtract the project's costs from its revenue. The costs are the hours worked times your cost rate, plus any expenses and subcontractor fees. What is left is profit; divide it by the hours worked and you get the effective hourly rate the project actually paid. Untracked hours make both numbers look better than they are, which is why measured time matters.

### What is a good profit margin for a project?

There is no universal figure, because it depends on your cost base and field. The more useful test is the effective hourly rate: what the project paid per hour actually worked, expenses included. If that rate sits well below your target rate, the project underperformed even if it looked profitable, and the fix is a better estimate or higher price next time.

### Why do untracked hours hide losses?

Profit is revenue minus cost, and cost is driven by hours. When hours go untracked, the recorded cost is too low, so the margin looks healthier than it is. A fixed-price project can read as profitable on paper while the real effective rate, counting every hour you actually spent, is a fraction of what you meant to earn.

### Hourly, fixed-price, or retainer: which is most profitable?

Each fails differently. Hourly bills every hour but caps your upside; fixed price rewards speed and punishes a bad estimate; a retainer is profitable only if the work stays inside the agreed scope. None is safest on its own. The common protection is tracking the real hours behind every model so you can see which projects actually paid.

## Keep reading

-   [What is a revenue leak?](https://billnotch.com/blog/what-is-a-revenue-leak)
-   [How to calculate billable hours](https://billnotch.com/blog/how-to-calculate-billable-hours)
-   [Billable utilization rate: formula and benchmarks](https://billnotch.com/blog/billable-utilization-rate)

Canonical: https://billnotch.com/blog/project-profitability
