Most trade owners can tell you last week's revenue to the dollar and cannot tell you which tickets funded the truck. Job costing is the habit that closes that gap: assign labor, materials, overhead, and the lead to this invoice, then look at what is left.
This is not an accounting close. It is a 10-minute check you can run between stops. The same numbers are in the free job calculator — the tables below are that calculator, written out, so you can see where shops lie to themselves.
This week: pick five finished invoices. Cost each one with the method below (or save them in the calculator's job log). If two of the five are under 20% net, you have a pricing or mix problem, not a "we need to work harder" problem.
What you are actually measuring
One question per ticket: what did we keep after the cost of doing this job? Revenue is easy. Cost is where the lies live. Four buckets cover almost every service shop:
- Labor at the fully burdened rate, including drive time — not the wage on the paycheck, and not wrench time only.
- Vehicle as miles × a real cost per mile (fuel, wear, insurance allocation).
- Materials at what you paid the supplier, not what you billed the customer.
- Overhead and leads so rent, insurance, software, and Angi/Google Ads are not someone else's problem.
Worked example: a $680 bathroom job
The customer paid $680. The tech was on site 3.5 hours. Round-trip drive was 45 minutes (0.75 h) and 20 miles. Materials cost you $112. You think the tech "costs $30/hour" because that is the wage. Here is the honest version using a $45 burdened rate (about 1.5× wage — still conservative for many shops), $12/hour overhead, and a $25 lead allocation.
| Line | Math | Amount |
|---|---|---|
| Onsite labor | 3.5 h × $45 | $157.50 |
| Travel labor | 0.75 h × $45 | $33.75 |
| Vehicle | 20 mi × $0.65 | $13.00 |
| Materials (your cost) | $112.00 | |
| Overhead | 4.25 h × $12 | $51.00 |
| Lead / marketing | $25.00 | |
| Total job cost | $392.25 | |
| Net profit | $680.00 − $392.25 | $287.75 |
| Net margin | $287.75 ÷ $680 | 42.3% |
Profit per hour on 4.25 hours is about $68. That is a decent service ticket. Now the version most owners run in their head:
| Napkin version (wrong) | Amount |
|---|---|
| Labor: 3.5 h × $30 wage, travel ignored | $105.00 |
| Materials | $112.00 |
| "Profit" | $463.00 (68% margin) |
The napkin says this job is a home run. The honest version is still healthy — 42% — but you were celebrating a fake extra $175. On a $180 drain call with 40 minutes of driving, that same lie turns a break-even job into a "nice little ticket."
Open the calculator with these numbers (they are the defaults) and change one input at a time: add 30 minutes of drive, bump the lead to $90, drop revenue to $580. Watch margin fall. That is the point of costing — finding the lever, not admiring a percentage.
Step 1: Revenue is what they paid, after discounts
Use the invoice total net of the "I knocked off $75 because they seemed nice" line. Discounts come out of profit, not out of a revenue you never collected. If you discounted, cost the job at the discounted number. Then decide whether that customer type is allowed to get the friendly rate again.
Step 2: Labor at the burdened rate, including the drive
A $30/hour tech is not a $30/hour cost. Payroll taxes, workers' comp, insurance, PTO, and the hours you pay that never hit an invoice all sit on top. Work the burdened-rate worksheet once per role. Until you do, 1.6× wage is a better guess than the paycheck.
Log onsite time and travel time separately. A 50-minute round trip on a one-hour service call is not a rounding error — it is half the labor.
Step 3: Materials at your cost
Enter what you paid the supplier. If you only enter the marked-up number the customer paid, you will double-count markup as profit. A photo of the receipt or a running total per job is enough. Consumables and disposal belong here too when they are real money.
Step 4: Overhead per labor hour (including travel)
Add monthly fixed costs: rent or shop, insurance, vehicle payments, phones, software, office help, uniforms. Divide by the hours you actually put on jobs this month (onsite + travel), not by 173 "paid hours" on the calendar.
Example: $8,400 overhead ÷ 350 job hours = $24 per labor hour. The sample job above used $12 to stay conservative. If your real number is $24, that bathroom ticket's overhead jumps from $51 to $102 and net margin drops from 42% to about 35%. Same invoice. Different honesty.
Step 5: Put a lead cost on jobs that did not walk in
If a ticket came from Google Ads, Angi, or a lead service, that job bought a customer. Assign the cost to the ticket (or a share of monthly ad spend). A $180 diagnostic that cost $90 to acquire is a different business than a $180 diagnostic from a repeat customer.
Step 6: Act on the comparison, not the story
Cost 8–12 jobs. Sort by margin. You will usually find:
- two or three job types that carry the week
- a cluster of short, far, cheap tickets that look busy and pay like a hobby
- one lead source that never covers its own fee
Then you have decisions, not vibes: raise the trip charge, shrink the service radius, reprice the loser, or fire the lead source. Costing that does not change a price or a yes/no is just a spreadsheet hobby.
The mistakes that make the numbers fake
- Wage-only labor. Every job looks 15–30 points more profitable than it is.
- Ignoring drive time. Short tickets in the next town are the usual casualty.
- Skipping callbacks. Cost the $0 revisit as its own job. It is not free because you did not invoice it.
- Costing only the big installs. The 12 small tickets are where cash leaks.
- Using last year's overhead on this year's crew. One hire without more billed hours raises the rate on every job.
A one-page worksheet you can copy
For each ticket this week, fill:
- Customer / job type / invoice total after discount
- Onsite hours, travel hours, miles
- Your burdened rate and overhead $/hour
- Materials at cost, permits, lead fee
- Profit, margin, profit per hour
Five tickets is enough to see the pattern. Twenty is enough to change the price book. If you do not want a notebook, save them in the calculator job log on your phone (it stays in the browser; we never see it).
Final takeaway
Job costing is consistent subtraction, not accounting theater. Use the same buckets on every ticket. When a number surprises you, change the price or the mix — do not explain it away. The shops that stay busy and broke are not lazy. They are costing the wage and calling it profit.
Frequently asked questions
What is job costing for contractors?
Job costing assigns labor (including drive time), materials at your cost, vehicle, overhead, and lead cost to each ticket so you see true profit after the truck leaves — not just revenue.
How do I calculate profit on a $680 service job?
On the sample bathroom ticket: $157.50 onsite labor + $33.75 travel labor + $13 vehicle + $112 materials + $51 overhead + $25 lead = $392.25 cost. Profit is $287.75, or 42.3% net. Wage-only costing of the same job falsely shows $463.
What job costing mistakes make profit numbers wrong?
Using wage-only labor, ignoring drive time, skipping $0 callbacks, costing only big jobs, and dividing overhead by paid hours instead of job hours.
Cost this job in the calculator
The $680 bathroom example is the default. Change travel, the lead, or the rate and watch margin move. Save five real tickets in the browser log.