The Formula in One Line
Project profitability is a simple subtraction problem: Revenue minus Direct Costs minus Allocated Overhead equals Project Net Profit. Divide that net profit by revenue and you get your net margin. Run this calculation on every job you finish and you stop guessing about which work is worth bidding.
This article is about the output — the per-project P&L. If you are still figuring out how to capture labor hours, materials, and equipment time against a job, start with job costing for contractors and job costing 101 first. Those cover the input side. This one assumes you already have the inputs and walks through what to do with them.
A Quick Intro
I am Tyson Faulkner, founder of Piece Work Pro. My background is in roofing, gutters, and soffit/fascia. Most of the worked example below is a roofing job, but the math applies to any trade. The labels change, the formula does not.
The Five Buckets of Direct Cost
Direct costs are anything you would not have spent if the job did not happen. Pull them into five buckets so nothing slips through:
- Labor — the wages or piece work you paid your crew on this specific job.
- Labor burden — payroll taxes, workers comp, insurance, benefits. The real cost of an hour of labor is always more than the wage. If you have not built your number, see how to calculate labor burden in construction and the fully burdened labor rate guide.
- Materials — shingles, underlayment, fasteners, flashing, dump fees. Anything you bought for the job.
- Subcontractors — anyone you paid who was not on your payroll. HVAC, electrical, dumpster delivery, equipment rental with operator.
- Equipment — the cost of using your own equipment on the job. Fuel, maintenance share, depreciation share. Most contractors skip this. They should not.
If you can put a number on each of those five buckets for a finished job, you have your direct cost.
What Allocated Overhead Means
Overhead is everything that keeps the business running whether or not you are on a roof: office rent, software, your salary if you draw one, the bookkeeper, vehicle insurance for the fleet, marketing, the phone bill. None of it is tied to a specific job, but every job needs to chip in to cover it.
There are two common ways to allocate overhead to a project:
- Revenue share — total annual overhead divided by total annual revenue equals an overhead rate. Apply it to each job. If overhead is $180,000 a year and you do $1.5 million in revenue, your overhead rate is 12 percent. A $28,000 job carries $3,360 of overhead.
- Labor hour share — total annual overhead divided by total annual labor hours equals overhead per hour. Apply it to each job based on hours worked. If you ran 12,000 labor hours and overhead was $180,000, that is $15 per hour. A 160-hour job carries $2,400 of overhead.
Neither method is perfect. Revenue share punishes high-revenue jobs even when they were efficient. Labor share punishes labor-heavy work like roofing. Pick the method that fits your business and stick with it. Consistency matters more than perfection because the goal is comparison job to job, not absolute precision.
The Worked Example
Here is a real-shape roofing job. Tear-off and re-roof, 30 squares of architectural shingle, full perimeter gutter replacement.
| Line Item | Amount |
|---|---|
| Contract revenue | $28,000 |
| Crew labor (piece work + helpers) | $9,600 |
| Labor burden at 31% | $3,000 |
| Materials (shingles, underlayment, gutters, flashing, fasteners) | $9,800 |
| Subcontractors | $0 |
| Equipment (truck fuel, dump fees, lift rental) | $800 |
| Total direct cost | $23,200 |
| Gross profit (revenue minus direct cost) | $4,800 |
| Gross margin | 17.1% |
| Allocated overhead (labor hour method, 160 hrs at $15/hr) | $2,400 |
| Net profit | $2,400 |
| Net margin | 8.6% |
This job looks fine on the gross line. Seventeen percent gross is not bad for a single project. But once overhead is allocated, net margin lands at 8.6 percent, which is below a healthy 10 to 15 percent target.
That gap is what most contractors miss. The check cleared, the customer was happy, the crew got paid. By any surface measure, the job worked. The P&L says it underperformed.
Reading the Worked Example
A few things to notice in the numbers above:
- Labor and burden together cost $12,600 — 45 percent of revenue. For a roofing tear-off and re-roof, that is on the high side. Either the bid was light on labor or the crew ran slower than estimated. Compare against your bid to find out which.
- Materials at $9,800 (35 percent of revenue) are typical for a full re-roof with gutters. No flag there.
- Equipment at $800 is only 2.9 percent. If you skipped this bucket entirely, your gross margin would look 2.9 percent better than reality.
- Overhead allocation of $2,400 is the entire reason this job dropped from a 17.1 percent gross margin to 8.6 percent net. That is not a rounding error. That is the difference between "we made money" and "we barely covered our share."
If you ran this same calculation on every job last quarter, you would see the pattern. Some jobs land at 12 to 15 percent net. Some land at 4 percent. A few are negative. The negative ones are not random — they are usually the same shape of job, the same customer type, or the same crew. That is the pricing mistake you find within a month of tracking.
The Break-Even Check
Before you call a job profitable, run a break-even check. Break-even revenue for a project is the dollar figure where net profit hits zero:
Break-even Revenue = Direct Cost + Allocated Overhead
For the worked example: $23,200 + $2,400 = $25,600. Anything above $25,600 is profit. The job came in at $28,000 — $2,400 above break-even. That matches the net profit number, which is the point of the check. If the math does not reconcile, something is missing from one of the cost buckets.
You can run this same check on a bid before you submit it. Put your estimated direct costs and your overhead allocation into a break-even calculator and see what the minimum revenue has to be. If the customer is asking for a number below your break-even, the answer is no.
Gross Margin vs Net Margin
Both numbers matter. They tell you different things:
- Gross margin answers: did this specific job pay for itself? Direct revenue minus direct cost. If gross margin is negative, the job lost money on its own. No allocation tricks can save it.
- Net margin answers: did this job pay for itself and its share of running the business? Direct revenue minus direct cost minus allocated overhead. If net margin is negative, the job did not contribute to keeping the lights on.
Watch the gross margin to find pricing or production problems. Watch the net margin to set targets and decide which work to chase.
A useful gut check: if your average net margin across all jobs over a year is 10 percent or higher, the business is healthy. If it is 5 percent or lower, you are running hard for very little. Negative average net margin means you are losing money even though paychecks are clearing.
Building the Per-Project P&L Workflow
The math is straightforward. The hard part is having clean inputs ready when the job closes. Here is the order to build the workflow:
Step 1: Close the Job in the Field
The day the last piece of work is done, the foreman closes the job. No more time entries, no more material requests, no more equipment hours against this project. Anything that comes in after that gets booked as warranty or callback, not as job cost.
Step 2: Pull the Direct Cost Numbers
- Labor and burden: total hours and total piece work paid against the job, multiplied by your fully burdened rate. If you are paying piece rate, how to run piece rate payroll covers how to capture this cleanly.
- Materials: all invoices coded to the job. Make sure delivery tickets actually got matched to the project. Materials that walk to a different job because the truck was already loaded need to be re-coded.
- Subcontractors: any 1099 work paid against the job.
- Equipment: hours of equipment use times your hourly equipment cost. If you do not have an hourly rate built, use a flat percentage of revenue (most contractors land between 2 and 5 percent) until you build a real number.
Step 3: Apply Overhead Allocation
Pick your method (revenue share or labor hour share) and apply it. Same method on every job, every quarter.
Step 4: Calculate Margins and Compare
Net profit equals revenue minus direct minus overhead. Net margin equals net profit divided by revenue. Then compare:
- Against your bid — did the job land where you priced it?
- Against your other jobs — is this job's margin in line with the average?
- Against your target — is the margin above your minimum acceptable percentage?
Step 5: File It Where You Can Find It
Per-project P&Ls only matter if you can pull them up next year when you are bidding similar work. A simple spreadsheet with one row per job — date, customer, scope, revenue, labor, burden, materials, subs, equipment, overhead, net, margin — is enough. Software helps but is not required.
Where Contractors Get Stuck
A few patterns show up repeatedly:
Forgetting labor burden. Wages get tracked, burden gets ignored. A $9,600 wage line at 31 percent burden is actually a $12,600 cost. Skip the burden and gross margin reads 10 percent better than reality.
Not tracking equipment. "I already own the truck, it does not cost me anything to use it." It does. Fuel, maintenance, insurance, depreciation. Build a per-hour equipment rate or use a flat percentage. Either is better than zero.
Inconsistent overhead allocation. Using revenue share on one job and labor share on the next makes margins uncomparable. Pick one and run it for a full year before reconsidering.
Mixing change orders into original bid revenue. A change order is a separate scope. Track its revenue and its costs separately, then add to the parent job. Otherwise a profitable change order can mask a money-losing original scope.
No comparison against the bid. If you do not check actuals against your bid, you do not know whether you have a pricing problem or a production problem. A 6 percent net margin on a job you bid for 12 percent is a different problem than a 6 percent net margin on a job you bid for 6 percent. The first means the bid was wrong. The second means the bid was right and you delivered to plan.
How This Connects to Pricing
Once you have a quarter or two of per-project P&Ls, your bidding gets sharper. You stop pricing from gut feel and start pricing from history. Specifically:
- You know your real labor cost per square (or per linear foot, or per unit) by job type.
- You know which scopes routinely run lighter or heavier than your estimate.
- You know your overhead allocation per hour, so you can build it into your hourly bid rate.
- You know the minimum margin you have to hit to keep the business healthy, so you can walk away from work that does not clear it.
That last one is the most valuable. Most contractors over-bid easy work and under-bid hard work because they do not have data to push back against gut feel. The per-project P&L gives you that data. For roofing-specific guidance, how to price roofing jobs accurately and how to calculate roofing labor costs walk through the inputs.
Notes on Tooling
You can run a per-project P&L in a spreadsheet. Plenty of contractors do. The spreadsheet works as long as your input data is clean — labor hours coded to the right job, material invoices matched, equipment time logged. If your inputs are messy, the spreadsheet just produces clean-looking wrong answers.
The other approach is to use software that captures the inputs at the point of work and rolls them into a project P&L automatically. Piece Work Pro does this for piece rate and hourly crews — every clock-in and every piece logged is tied to a project, and labor cost rolls up automatically. You can sign in to the app to see how it handles per-project labor capture. The job profit calculator is a faster way to model a single project before or after the fact.
Whichever tool you use, the rule is the same: same five direct cost buckets, same overhead method, every job. Consistency is what makes the comparisons useful.
What to Do This Week
Pick the last three jobs you finished. Pull the numbers into a five-bucket direct cost table. Apply your overhead allocation method. Calculate net margin for each one.
If all three land above 10 percent net, your pricing is in good shape. If one or more lands below, look at which bucket ran heavier than expected. That is where to focus next quarter.