
Job Costing for Contractors: How to Know Which Jobs Make Money
Job costing is how a contractor finds out what each job actually cost to build and how much money it really made. You track labor, materials, subcontractors, and equipment against every job, then compare the final numbers to what you estimated. Without it, you only know whether the company made money overall. You don't know which jobs paid for the year and which ones quietly ate the profit.
Most of the contractors we work with between $2M and $15M in revenue have some version of job costing. Very few have one they trust. The usual setup is a P&L that lumps every job together, a bookkeeper who codes bills to jobs when there's time, and an owner who has a gut feel for which work is good. That gut feel is often wrong, and the reason is almost always labor.
This guide covers what to track, a simple example with two jobs that look the same on paper, how to set job costing up in your business, and the mistakes we see most often.
What job costing actually tells you
Your profit and loss statement tells you how the business did over a month or a year. Job costing tells you how each piece of work did. Those are very different questions.
A roofing company can post a decent year while half its commercial repair work loses money. An HVAC company can be profitable overall while its new construction jobs run at a 12% gross margin and drag everything down. You will never see that in a company-wide P&L, because the good jobs cover for the bad ones.
When you know your real margin by job, and then by job type, you can price better, bid more selectively, and stop chasing work that keeps your crews busy without making you any money.
The four costs every job needs to track
Labor, including burden
Labor is usually the biggest cost on a job and the one most often understated. The wage you pay is only part of it. Payroll taxes, workers' comp, health insurance, and other benefits sit on top of every hour your crew works. That extra cost, usually called labor burden, often adds 20% to 35% or more on top of wages depending on your state, your workers' comp class, and what benefits you offer. If your job costing only captures wages, every job looks more profitable than it is.
Materials
Every supplier bill and every purchase should be coded to the job it was bought for. Materials pulled from your own shop inventory count too. The common leak is the quick run to the supply house on a company card that never gets assigned to a job, so it ends up buried in overhead.
Subcontractors
Sub costs are usually the easiest to track because they come in as clear invoices. The thing to watch is timing. If a sub bills you 60 days after the job closes, your early job report will show a better margin than the job really earned.
Equipment
Rentals are easy to assign. Equipment you own is harder. A simple approach is to charge each job an hourly or daily rate for the owned equipment it uses, set high enough to cover fuel, maintenance, insurance, and the cost of eventually replacing the machine. Skip this and your equipment-heavy jobs will always look better than they are.
A simple example: two $40,000 jobs
Here's a fictional example to show why this matters. A contractor finishes two jobs in the same month, and both bring in $40,000. The owner assumes they're about equal. Maybe Job B is even a little better, since its material bill was lower.
Job A (residential) | Job B (commercial repair) | |
|---|---|---|
Revenue | $40,000 | $40,000 |
Materials | $14,000 | $11,000 |
Labor (wages) | $9,000 | $12,500 |
Labor burden (30% of wages) | $2,700 | $3,750 |
Subcontractors | $0 | $4,000 |
Equipment and disposal | $1,300 | $2,200 |
Total job cost | $27,000 | $33,450 |
Gross profit | $13,000 (32.5%) | $6,550 (16.4%) |
Once every cost is in, Job A made twice the gross profit of Job B. Now say this company's overhead (office staff, trucks, insurance, rent, software, the owner's salary) runs about 20% of revenue. Each job needs to cover roughly $8,000 of overhead. Job A clears that and leaves about $5,000 of real profit. Job B actually lost about $1,450.
The owner was busy, the crew was busy, and the bank account moved. From the outside, Job B looked like a fine job. It wasn't, and if most of next year's backlog looks like Job B, the company is going to work very hard to stand still.
How to set up job costing in your business
1. Build cost codes that match how you estimate
Your cost codes should line up with the way you build an estimate. If you estimate a job as tear-off, decking, underlayment, shingles, and cleanup, those should be your codes. If your estimate and your accounting use different categories, you will never be able to compare the two cleanly. Keep the list short enough that your crew leads and office staff will actually use it. Twenty codes people use beats sixty codes nobody understands.
2. Track time by job, every day
This is the step that makes or breaks job costing. Hours need to be assigned to a job (and ideally a cost code) daily, not reconstructed from memory at the end of the week. A time tracking app your field team will actually open is worth paying for. If time is a mess, your labor numbers are guesses, and labor is the cost that matters most.
3. Code every bill to a job
Every supplier invoice, sub invoice, rental, and card purchase that belongs to a job should be tagged to that job when it's entered. Make it part of the bookkeeper's process, and give field staff a simple way to note the job number on receipts. Most accounting systems used by contractors, including QuickBooks, support job or project tracking, but someone has to use it consistently.
4. Put a real number on labor burden
Work out your actual burden rate once a year with your bookkeeper or CPA. Add up payroll taxes, workers' comp, benefits, and any other per-employee costs, and divide by total wages. Then apply that rate to every job. Using a rough guess is better than ignoring burden completely, but your real number will be more useful.
5. Decide how you'll handle overhead
Overhead doesn't belong to any single job, but every job has to help pay for it. The simplest approach is to know your overhead as a percentage of revenue and use it as the bar every job has to clear. If overhead is 20% of revenue, a job with an 18% gross margin is losing money even though it looks profitable. This is also the number you need when you set prices. Our guide on how to price your services walks through it.
6. Compare estimate to actual on every job
When a job closes, line up the estimate against what it actually cost, code by code. Look for patterns, not just single misses. If labor on bathroom remodels runs 15% over the estimate every time, that's a pricing problem, not bad luck. A short monthly meeting where you review the closed jobs is where job costing starts paying for itself.
Job costing and your WIP schedule
Job costing looks at finished jobs. A work in progress (WIP) schedule looks at jobs that are still running. It compares what you've billed on each open job to the costs you've incurred and how far along the job is. That shows whether you're overbilled (you've collected ahead of the work, which is fine until the job ends and the cash is already spent) or underbilled (you've done work you haven't invoiced yet, which is cash sitting on the table).
You can't build a reliable WIP schedule without good job costing underneath it. Banks and bonding companies usually want to see one once you're doing larger commercial or public work, so getting job costing right early makes that step much easier later.
Mistakes we see all the time
The most common one is leaving out labor burden, which we covered above. It makes every job look better than it is, and it hides most on labor-heavy work.
Close behind is change orders that never get costed or billed. The crew does the extra work, the costs land on the job, and the revenue never shows up because nobody wrote up the change order. The job looks like a loser when it was really an unbilled win.
We also see owners running one P&L for the whole company and calling it job costing. If you can't pull up a single job and see its revenue and costs side by side, you don't have job costing yet.
Another is reviewing jobs months after they close. By then the crew has moved on, nobody remembers what happened, and the same mistake is already baked into three more bids. Review closed jobs monthly at a minimum.
The last one is collecting the data and never using it. Job costing only helps if the numbers change how you bid, price, and choose work.
What to do once you have the numbers
Group your jobs by type and look at average gross margin for each one. Most contractors find one or two kinds of work that consistently carry the business and one that consistently drags it down. From there you can raise prices on the weak work, change how you estimate it, or stop chasing it.
Job costing tells you which jobs make money. It doesn't tell you when that money shows up in your bank account, and a profitable job can still leave you short on payroll if the customer pays 60 days later. That's what a cash flow forecast is for. Our free 13-week contractor cash flow forecast template helps you map the timing, and our guide to reading your P&L line by line covers the company-level view.
If you'd like help setting up job costing, cleaning up your cost codes, or figuring out which of your jobs are really paying the bills, that's a big part of what we do in our fractional CFO services for construction companies. You can also book a no-cost Cash Flow Forecast Call and we'll look at your numbers with you.
Job costing FAQs
What is job costing in construction?
Job costing is the process of tracking every cost tied to a specific job, including labor with burden, materials, subcontractors, and equipment, and comparing the total to the job's revenue and original estimate. It shows the real profit on each job instead of only the company as a whole.
What costs should be included in job costing?
Include direct labor plus labor burden (payroll taxes, workers' comp, and benefits), materials, subcontractors, and equipment, whether rented or owned. Overhead such as office staff, rent, and insurance is usually tracked separately and covered by setting a minimum margin every job has to clear.
How do you calculate job cost?
Add up direct labor including burden, materials, subcontractor costs, and equipment costs for the job. Subtract that total from the job's revenue to get gross profit, then divide gross profit by revenue to get the job's gross margin.
What is the difference between job costing and a WIP schedule?
Job costing measures the actual profit on a job, usually once it's complete. A WIP schedule tracks jobs still in progress, comparing billings to costs and percent complete to show whether each job is overbilled or underbilled. A reliable WIP schedule depends on accurate job costing.
Can you do job costing in QuickBooks?
Yes. QuickBooks and most accounting systems used by contractors support job or project tracking. The software is rarely the problem. Job costing works when time is tracked by job every day, every bill is coded to a job, and someone reviews the results every month.

