Operations

Job Costing for Field Service: What Each Job Actually Earns You

2026 guide to job costing in field service: parts at real cost, labor, truck time, processing fees, and callbacks — finding the jobs quietly losing money.

July 21, 20268 min readBy IntelliDrive OS
HVAC service van backed into a residential driveway at dusk, rear doors open showing stacked copper line sets, a parts bin wall, and a tablet on the bumper

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 viewGross-margin viewFull job costing
PartsIgnoredAt costAt actual recorded cost
Technician laborIgnoredBase wageLoaded wage including burden
Drive timeIgnoredIgnoredPaid drive time charged to job
Vehicle costIgnoredIgnoredAllocated per billable job
Processing feesIgnoredIgnoredActual fee on the transaction
CallbacksIgnoredIgnoredCharged back to original job
What it tells youWhat you chargedRough parts marginWhat 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.

Frequently Asked Questions

What is job costing in a field service business?
Job costing is the practice of assigning every real cost a single job consumed — parts at what you actually paid, technician labor including payroll burden, the vehicle time to get there and back, card processing fees, and any return trip — and subtracting that total from what the customer paid. The result is true profit per job, which is almost always meaningfully lower than the revenue figure on the invoice.
Why does revenue per job give a misleading picture of profitability?
Revenue per job only tells you what you charged, not what the job consumed. A $600 install with $310 in parts, two hours of loaded labor, forty minutes of drive time, and a warranty callback three weeks later can easily net less than a $180 service call handled in twenty minutes down the street. Ranking jobs by revenue systematically promotes your worst work.
How do I calculate the truck and trip cost for a job?
Add up your annual vehicle costs — payments or depreciation, insurance, fuel, maintenance, tires, and registration — then divide by the number of billable jobs that truck runs in a year to get a per-job vehicle cost. Layer paid drive time on top of that, because a tech being paid to sit in traffic is labor cost attached to the job even though no work is happening.
What parts cost should I use in job costing — what I paid or what I'd pay today?
Use the actual cost recorded on the part when it entered inventory, which is what your accounting and tax records reflect. If replacement cost has moved significantly since you bought the stock, that is a signal to reprice the item going forward, not a reason to restate the margin on jobs already completed.
How do callbacks and warranty returns factor into job profit?
A callback is a second job with zero revenue, so its full cost — parts, labor, and another trip — has to be charged back against the original job. Tracking callbacks against the original invoice is what converts a vague sense that a job type is troublesome into a defensible number you can act on.
Which jobs should a service business consider dropping?
Look for job types that are consistently below your target margin after full costing, generate a high callback rate, or consume drive time far out of proportion to their ticket. Before dropping them outright, test repricing or adding a trip minimum, because many low-margin job types become acceptable with a modest price correction.
How much does IntelliDrive OS cost?
$79/month flat with unlimited users; $63/month billed annually. Per-technician reporting, parts cost tracking, and CSV export are all included, so the data you need to cost a job properly is not gated behind a higher tier.

Run Your Service Business on One Platform

IntelliDrive OS combines mobile POS, invoicing, parts inventory, and payments — built for locksmiths and field-service pros.

Back to all articles