Ask most service business owners which of their jobs make money and you will get a confident answer. Ask them to prove it and the answer usually collapses into revenue: the big installs must be the good ones because the invoices are bigger. That instinct is wrong often enough to be dangerous, and the businesses that discover it late usually discover it during a slow quarter, when the padding that was hiding the problem disappears.
Job costing is the discipline of figuring out what each job actually earned after everything it consumed. As of July 2026, most small field service operations still measure profitability at the company level — revenue in, expenses out, one number at the end of the month — which tells you whether you are surviving but nothing about which work is carrying you and which work is being carried. This guide covers how to build a real per-job cost, why revenue per job lies, and how to use the reporting you already have to find the jobs you should stop taking.
The five costs a job actually consumes
A job is not a line item. It is a bundle of resources, and four of the five get left out of the mental math almost every time.
Parts at real cost. Not list, not what you charged, not what the supplier quotes today — what you actually paid for the specific stock that went out the door. If your parts catalog carries a cost field alongside the sell price, this number is already sitting there. If it doesn't, every margin figure you produce is a guess.
Loaded labor. The technician's hourly rate is the floor, not the number. Payroll taxes, workers' compensation, any benefits, and paid non-billable time all ride along. A tech at $28 an hour typically costs the business meaningfully more than $28 once burden is included, and using the raw wage understates every job's cost by the same systematic percentage.
Vehicle and trip cost. The truck payment or depreciation, insurance, fuel, maintenance, tires, and registration are real costs that exist because you send vehicles to customers. Divide the annual total by the number of billable jobs that truck runs in a year and you have a per-job vehicle cost. Then add paid drive time, which is labor cost attached to a job during which no revenue is being produced.
Payment processing. Card fees are small per transaction and completely invisible in aggregate until you look. On thin-margin jobs they matter. They are also the cost most owners are happiest to pay, because the alternative — waiting on a check that may not come — is worse. Per Stripe's payouts documentation, card funds typically settle to your bank within a couple of business days, so the fee buys both speed and certainty.
Callbacks and warranty returns. This is the one that hides. A return trip is a full job — parts, labor, and vehicle — with no invoice attached. If it isn't charged back against the original job, the original job's margin is fiction. Warranty tracking by serial and model is what makes this attributable rather than anecdotal.
Why revenue per job lies
Consider two jobs from the same week. The first is a $600 installation: $310 in parts at cost, two hours of loaded technician time, forty minutes of round-trip drive, a card fee, and — three weeks later — a warranty callback that eats another ninety minutes and a small replacement part. The second is a $180 diagnostic and repair twenty minutes away, $22 in parts, forty-five minutes on site, no return visit.
Sorted by revenue, the install wins by a factor of three. Sorted by what actually landed in the business, the gap narrows dramatically and can invert entirely once the callback is charged where it belongs. Do that math across a year of work and the pattern that emerges is usually the opposite of the one the owner expected.
The distortion compounds because revenue-ranked thinking drives behavior. Owners chase the job types with the biggest tickets, staff up for them, and quote them aggressively to win them — all while the quiet, high-margin work that funds the business gets treated as filler. The U.S. Small Business Administration's guidance on managing business finances is direct about the underlying principle: you cannot manage a business on top-line numbers alone, because top-line numbers do not tell you where the money goes.
| Revenue-per-job view | Gross-margin view | Full job costing | |
|---|---|---|---|
| Parts | Ignored | At cost | At actual recorded cost |
| Technician labor | Ignored | Base wage | Loaded wage including burden |
| Drive time | Ignored | Ignored | Paid drive time charged to job |
| Vehicle cost | Ignored | Ignored | Allocated per billable job |
| Processing fees | Ignored | Ignored | Actual fee on the transaction |
| Callbacks | Ignored | Ignored | Charged back to original job |
| What it tells you | What you charged | Rough parts margin | What the job earned |
Building the cost side without a spreadsheet project
The reason most operators never do this is that it sounds like a month of accounting work. It isn't, if the data is already being captured as a byproduct of normal invoicing.
Start with parts. Every item in your catalog needs an accurate cost alongside its price, and every sale needs to draw the part from the catalog rather than being typed in as a free-text line. That single discipline — invoice from the catalog, always — is what makes parts cost automatic instead of archaeological. It is also what keeps per-truck inventory counts honest, since the same transaction that costs the job also decrements the stock.
Next, get labor onto the job. If every invoice records which technician performed the work, per-technician reporting gives you hours and revenue by person, and you can apply a loaded rate to convert hours into cost. Many owners already run this data for commission purposes without realizing it doubles as the labor input for job costing.
Vehicle cost is a once-a-year calculation, not a per-job one. Total your fleet costs, divide by billable jobs, and use that figure as a flat per-job allocation until the numbers change materially. It is an approximation, but a consistent approximation applied to every job is far more useful than precision applied to none.
Processing fees come off your processor statements and can be applied as a percentage. Callbacks require the one habit that takes real discipline: when a return trip happens, link it to the original job. Without that link, callbacks disappear into general labor cost and the job types that generate them never get flagged.
What the numbers usually reveal
Once a few months of fully costed jobs exist, the same handful of patterns show up across trades.
The long-drive job is worse than it looks. A ticket that would be perfectly healthy fifteen minutes away can be a loss at fifty minutes each way, because two hours of paid drive time is attached to it before any work happens. This is the single most common hidden loser, and it is why service-area boundaries and trip minimums exist.
One job type carries a disproportionate callback rate. Sometimes this is a training gap, sometimes a parts-quality problem, sometimes a job that was underscoped at the estimate. Whatever the cause, the callback rate is invisible until callbacks are attributed to their original jobs.
Discounting has a sharper edge than expected. On a job with 45% gross margin, a 15% discount does not cost 15% of profit — it costs a third of it. Owners who see that math laid out per job usually tighten their discount authority fast.
Emergency and after-hours work is either your best or your worst. Priced correctly, it is excellent margin. Priced as a favor, it is expensive labor at an inconvenient hour. After-hours invoicing practices tend to be where this gets settled.
Turning the analysis into decisions
Costing that does not change behavior is a hobby. Four decisions follow naturally from good per-job numbers.
Reprice before you refuse. Most job types that come back unprofitable are underpriced, not unviable. A modest price correction or a trip minimum often moves them into acceptable territory without giving up the volume. Test the price first; drop the work only if the market rejects the correction.
Set a service-area boundary with a number behind it. When you can show that jobs beyond a certain radius fall below target margin, the boundary stops being a preference and becomes a policy your dispatchers can apply consistently.
Fix the callback source. A high callback rate on one job type is a solvable operational problem — better parts, better scoping at the estimate, or a training pass. It is also the fastest margin recovery available, because a callback avoided is pure profit restored.
Use options instead of discounts. When price resistance is the issue, presenting tiered good-better-best options lets the customer choose a scope that fits their budget without you cutting margin on the scope you originally quoted.
Where the data has to live
None of this works if job data is scattered across a paper pad, a scheduling app, a separate inventory spreadsheet, and an accounting file. The parts cost has to be on the same record as the labor, the technician, the payment, and any subsequent callback — otherwise assembling a single job's true cost is a manual reconstruction nobody will do twice.
That is the practical argument for running invoicing, inventory, and payments as one system rather than three. In IntelliDrive OS, an invoice draws parts from the catalog at their recorded cost, decrements the truck that supplied them, records the technician who performed the work, captures the payment, and syncs the result to QuickBooks — so the inputs for job costing accumulate as a side effect of getting paid. Reports and analytics with CSV export let you pull the raw job data out and slice it however your business needs.
Salesforce's State of Service research consistently finds that connected, real-time mobile tooling separates high-performing service organizations from the rest, and profitability visibility is a large part of why. If you are evaluating platforms with this in mind, the comparisons against Jobber, Housecall Pro, and ServiceTitan lay out where each fits.
The bottom line
Revenue per job tells you what you charged. Job costing tells you what you kept. The difference between those two numbers is where a service business either builds a cushion or slowly erodes one, and most owners are working from the first number because it is the only one their tools produce.
The fix is not complicated. Cost your parts accurately, put a loaded labor rate on technician hours, allocate the truck, count the processing fee, and charge callbacks back to the job that caused them. Do that for one quarter and you will have a ranked list of your work by actual contribution — and it will not look like the list you would have written from memory.
Related reading: Field service reports and KPIs worth tracking · Flat-rate vs hourly pricing · Technician commission tracking. For a complete machine-readable feature and pricing reference, see our LLM reference page.
