Skip to content

Blog · October 2, 2026

Job costing for small contractors: how to find your real margin per project

Most small contractors can tell you last month’s revenue to the dollar. Far fewer can tell you which of last month’s jobs actually made money. That gap is what job costing closes, and for a 1–5 person shop it is the single most useful number you can start tracking — more useful than revenue, and far more actionable than the balance on the bank statement.

This is the practical version: what job costing is, the costs small shops miss most often, how to build a loaded labor rate, and what to look for if you are shopping for contractor software to do the capturing for you.

What is job costing for contractors?

Job costing means assigning every cost a single job caused — labor at its loaded rate, materials, mileage, subcontractors, equipment, dump fees — against what that job billed, so each project ends with its own profit and margin figure. Instead of one blended number at tax time, every job gets a scoreboard.

The accounting is simple arithmetic. The hard part is capture: knowing which hours, which receipts, and which miles belong to which job, in a week where you touched five of them.

Why your business-wide margin hides the jobs that lose money

A single company-wide margin averages your best work together with your worst, and the average is almost always healthier than the jobs inside it. Here is an illustrative five-job month:

JobBilledCostProfitMargin
A — service change$9,000$6,500$2,50028%
B — re-roof$14,000$11,200$2,80020%
C — small repair run$4,500$4,100$4009%
D — full remodel$22,000$24,600−$2,600−12%
E — system replacement$10,500$8,200$2,30022%
Month$60,000$54,600$5,4009%

Sixty thousand billed, nine percent to show for it. Job D — the biggest ticket of the month, the one that goes on the website — lost more than job A, your best-margin job, made. Without per-job numbers the lesson of job D is invisible. You just feel busy and broke, and you take the same job again next quarter because it looked impressive.

(Those figures are an illustration, not data. The point is the shape, which shows up in real shops constantly.)

The costs small shops miss most often

Labor burden. A tech at $28 an hour does not cost $28 an hour. Payroll taxes, workers’ comp, general liability, PTO, phone, tool allowance all ride along. In many shops the real number lands 25–40% above the wage.

Windshield time. Drive time between jobs is paid labor plus vehicle cost, and it is the cost most often left out entirely — mostly because nobody wants to keep a mileage log.

Your own hours. If you are swinging a hammer during the day and quoting at 9pm, and none of that time is costed to a job, every job looks more profitable than it is. Put a rate on your own hours on paper, even if you never cut yourself an hourly check.

Callbacks and rework. The second trip gets logged as “warranty” and quietly disappears. It belongs on the original job, because that is the job it has something to teach you about.

The $40 runs. Blades, fasteners, adhesive, the third trip to the supply house. Individually trivial; on a long job, collectively a line item you can see.

Why you can’t borrow someone else’s margin benchmark

“What’s a good margin for HVAC?” is the most-asked and least-answerable question in every contractor forum, because both your price and your costs move with your market. Per Sesklo’s cost guides, which track typical project costs across the 50 largest US metros, HVAC work spans roughly $3,500 to $21,600 nationally — and the median for comparable work swings about 54%, from around $7,000 in Oklahoma City to around $10,800 in the San Francisco Bay Area. Roof installation shows the same pattern: a median near $10,600 in Memphis against roughly $16,200 in the Bay Area. Kitchen remodels run from about $13,000 to north of $100,000 depending on scope and metro.

Your labor rate, your fuel, your insurance, and what your customers expect to pay all sit somewhere inside those spreads. A margin target someone posted from a market 1,500 miles away tells you very little about yours. The only benchmark that holds up is your own last twenty jobs.

How do you calculate a loaded labor rate?

Start with the hourly wage. Add everything you pay on top of it — payroll taxes, workers’ comp, liability insurance, PTO, phone, truck allowance, training. Then divide by the hours that actually land on customer jobs, not the hours you pay for. That result is your loaded rate, and it is the number job costing should be using.

Worked through with illustrative figures: a tech at $28 an hour carrying 30% burden costs about $36.40 per paid hour. If 75% of paid hours end up on a customer’s job — the rest being shop time, loading, meetings, weather — then every billable hour of that tech costs you roughly $48.50.

Now quote labor at $65 an hour. Against the $28 wage that feels like a wide spread. Against $48.50 it is about $16.50 of gross profit an hour, a little over 25% of the labor line, before a single dollar of material or a minute of drive time. Same tech, same quote, very different business.

If you take one thing from this article, take that: most underpricing happens at the loaded-rate step, not the markup step.

What should job costing software actually do?

Capture the costs for you. That is the whole test. If job costing means re-typing timesheets and a shoebox of receipts into a spreadsheet every Friday, it will not survive a busy August — and job costing you only do three months a year is worse than none, because you will draw real conclusions from an unrepresentative sample.

So when you evaluate contractor software, count how many of the inputs it already holds versus how many you have to hand it:

That last one matters more than it sounds. A P&L that arrives after the job is a history lesson. One that moves while the job runs is a decision tool: you can catch a job going sideways in week two and have the change-order conversation then, not at close-out.

That is the design behind Sesklo’s job costing — the per-project P&L assembles itself as the work happens. Approved hours from time tracking cost into the job at a loaded rate you set, wage plus burden. Mileage is attributed from the day’s schedule using mapping data and your vehicle rate, and you can override any number by hand. Materials go on as a line, or you snap a receipt and Sesklo splits it into cost lines for you. Rates and margins sit behind an owner-and-admin wall, so the crew never sees them. Job costing is included on the Pro plan, which — like every Sesklo plan — is a flat monthly subscription with no per-lead fees.

What to do with the numbers

Per-job margin only earns its keep if it changes a decision. Four it usually changes:

Start with four jobs, not forty

You do not need a six-month data project to begin. Take last month’s four biggest jobs. For each one, write down what you billed, every hour logged by everybody including you, your loaded rate, materials, and an honest estimate of miles driven. Four numbers at the bottom of four columns.

One of them will surprise you. That surprise is the entire return on the exercise — everything after it is just automating the capture so you get the number without giving up a Friday night.

If you would rather those numbers assembled themselves, that is what Sesklo is built to do: quoting, scheduling, time tracking, invoicing, and per-project job costing in one place, on one flat monthly plan. See how it fits your shop at Sesklo for contractors.