Skip to content
Estimating & Pricing

Job Costing for Contractors: How to Track What a Job Actually Cost You

Most contractors know what they quoted. Far fewer know what the job actually cost. Here is how to close that gap on every job.

Priyanka Raut

7 min read

A contractor sitting on a tailgate comparing a printed estimate against a stack of receipts

The short answer: job costing compares a job's actual cost with its quoted price. Most contractors know the quoted price but never calculate the final cost. Track labor hours, materials from actual receipts and subcontractor invoices for each job rather than by month. Include hours that would otherwise go unrecorded.

You quoted the bathroom at $9,400. The check cleared. Good job. But was it?

Most contractors can tell you what they charged for a job. Many fewer can tell you what it cost them, and almost nobody can tell you within a week of finishing. That gap is where contracting businesses quietly bleed. You can run a full year of jobs that all "felt fine" and end up with less money than you started with, because three of them lost money and you never found out which three.

Job costing is the discipline of answering one question per job: what did we quote, what did we spend, and where did the difference come from? It is not accounting. Your bookkeeper tells you whether the business made money last quarter. Job costing tells you whether this kind of job makes money, which is the thing that changes what you quote next week.

What is job costing?

At its simplest, job costing is a per-job ledger with two sides.

On one side sits the estimate: the labor hours, materials, subcontractor costs and markup you committed to when you signed. On the other sits the actuals: what you really spent, tied to that specific job.

The output is a variance, per category, not just a single number:

CategoryEstimatedActualVariance
Labor$3,200$4,050−$850
Materials$2,600$2,480+$120
Subcontractor$1,400$1,400$0
Disposal / permits$300$520−$220
Total cost$7,500$8,450−$950

That job still made money against a $9,400 price. But it made $950 less than you planned, and the table tells you exactly where: labor ran long and you underestimated disposal. A single "we made $950 instead of $1,900" number would not have told you that. The category breakdown is the whole value.

A close view of hands sorting job receipts into categories on a truck seat

The markup vs margin calculator converts one into the other and shows the price and profit behind both.

Which costs actually move the number?

You do not need a cost code system with ninety categories. For a residential contractor, four buckets capture nearly all the variance:

Labor. Almost always the biggest source of loss, and the hardest to see, because your own hours feel free. They are not. If you are on the tools, price your own time at what you would pay someone to do it. Otherwise every job looks profitable right up until you hire your first employee and the margin evaporates.

Materials. Easier to track because there is a receipt, but it leaks through returns, second trips to the supplier, and the "grab a few extra" purchases that never make it onto a specific job.

Subcontractors. Usually accurate, because you get an invoice with a number on it. The risk is scope: the sub quoted the original drawing, not the change the homeowner asked for on day four.

The forgotten pile. Disposal, permits, parking, equipment rental, fuel for extra trips. Individually small, collectively the reason jobs come in a few hundred dollars light. This bucket is almost always underestimated, because you do not think about it while quoting.

The one habit that makes it work: capture at the moment of spend

Here is the actual failure mode. Not "contractors don't understand job costing." Most do. It is that the data is gathered weeks later, from a shoebox, on a Sunday night, and by then nobody remembers which job the $180 lumber run belonged to.

Job costing only works if the cost is attached to the job at the moment it happens. That means:

  • Photograph the receipt in the supplier parking lot and tag it to the job before you start the truck.
  • Log hours daily, per job, not weekly from memory. Memory rounds to the nearest comfortable number, and it always rounds down.
  • Enter the subcontractor's invoice against the job the day it lands.

A rough number captured on the day beats an exact number reconstructed a month later, because the reconstructed one is not exact. It just looks it.

This is the specific problem field software is for. Zeus tracks expenses against a job as you record them, so the actual-cost side of the ledger fills itself in during the work rather than after it. The estimate side is already there from the quote you sent. What you get at the end is a comparison you did not have to assemble.

Reading the variance without lying to yourself

Once you have a few jobs costed, patterns show up fast. The useful ones:

Labor overruns on one job type. If every bathroom runs 20% long on hours but kitchens land on target, your bathroom labor rate is wrong. Fix the rate, not the crew.

Consistent small material overages. Usually waste factor. If you are not adding one, add 10% on tile and drywall and see whether variance goes to zero.

One trade always over. If the electrical line item blows out on four jobs running, your sub raised prices and you are still quoting last year's number.

A great job you cannot explain. Treat these with as much suspicion as the losses. A job that came in 30% under usually means a cost landed on a different job by mistake, which means two of your numbers are wrong, not one.

A tradesperson entering hours on a phone at the end of a work day

Turning costed jobs into better quotes

Job costing is worthless as a historical record. Its only real purpose is changing the next quote.

The mechanism is simple. After five or six costed jobs of the same type, you will have a real labor hours figure, not the one you have been carrying in your head since 2021. Replace the estimate with the measured number. Then keep costing, because it moves.

This is also how you learn to say no. When you can see that a specific job type reliably lands at 8% margin while another lands at 26%, the low-margin work stops being "work" and starts being a choice. Sometimes it is still the right choice: it keeps a crew busy in a slow month, or it comes from a referral source worth protecting. But it becomes a decision you make on purpose instead of one you discover in December.

Starting without changing everything at once

You do not need to cost every job from tomorrow. Pick your most common job type and cost the next five. That is enough to expose a systematic error in your rates, which is where nearly all the money is.

The minimum viable version:

  1. Write down the estimated labor hours, materials and subs before the job starts. This is the part people skip, and without it there is nothing to compare against.
  2. Capture every cost against that job as it happens.
  3. When the job closes, put estimated and actual side by side and write one sentence explaining the biggest variance.

That sentence is the deliverable. Five of them will change how you quote more than any pricing course.

Frequently asked questions

Do I need to include my own labor if I'm a one-person operation?

Yes, and this is the single most common reason a small contracting business looks profitable while the owner is broke. If your time is not in the cost, you are not measuring profit. You are measuring revenue minus materials. Price your hours at replacement cost: what you would have to pay someone with your skills.

How is this different from what my accountant does?

Your accountant works at the business level and looks backward: profit and loss across a quarter, for tax and compliance. Job costing works at the job level and looks forward: it tells you which work to quote differently next month. They answer different questions, and neither substitutes for the other.

What if the job changed halfway through?

Then the estimate changed too, and the change order is what keeps the comparison honest. A job costed against its original estimate after two rounds of scope change will show a huge false variance. Re-baseline the estimate whenever scope formally changes, and the variance stays meaningful.

How many cost categories should I use?

Four to six. Enough to locate a problem, few enough that you actually do it. Contractors who set up thirty cost codes stop using them within two months, and a system you abandon measures nothing.

Filed under

About the Author

Priyanka Raut

Editor, Estimating and Pricing

Priyanka worked six years pricing commercial projects in Pune before moving to Calgary, where she found that a two-person drywall outfit prices work with much the same logic as a large contractor — just faster, with thinner margins and considerably more riding on getting it right. She has since helped dozens of small trade businesses rebuild their pricing from the ground up. She covers estimating, markup, and job costing for the Zeus Resource Center, and she will ask what your overhead actually costs you per day before she answers any other question.

Stop running the job out of four different places

Quote it, photograph it, track the hours, invoice it: from the driveway, with no signal. The free plan does not expire and never asks for a card.