Revenue tells you how busy you were. Job costing tells you whether being busy was worth it. Here is exactly what it tracks, and a real job broken down line by line so you can see where the money leaks.
It is the most common call we get. Revenue climbed, the crew grew, the trucks are all out, and there is somehow no more money at the end of it than there was two years ago.
You bid using $28 an hour because that is what the tech makes. The real number, once you add taxes, comp, the truck and the hours nobody can bill, is closer to double that.
The customer asked, your lead said yes, the work got done. Nobody wrote it up. That is finished labor and material walking off the job for free.
Without a number on each job, the work that makes good money quietly covers the work that loses it. The total at the end of the year looks fine, so nothing ever gets fixed.
A 200A service upgrade with panel replacement and 14 circuits. Contract price $18,400. This is a composite built from real patterns, and the shape of it will look familiar.
| Cost line | Estimated | Actual | Variance |
|---|---|---|---|
| Labor hours | 64 | 81 | +17 |
| Labor cost, all in at $68/hr | $4,352 | $5,508 | -$1,156 |
| Materials | $5,900 | $6,740 | -$840 |
| Permits and inspection | $420 | $420 | $0 |
| Equipment and rental | $300 | $550 | -$250 |
| Subcontract, trenching | $1,200 | $1,200 | $0 |
| Direct cost | $12,172 | $14,418 | -$2,246 |
| Gross profit, before office costs | $6,228 | $3,982 | -$2,246 |
| Gross margin | 33.8% | 21.6% | 12 points worse |
| Share of keeping the doors open, 14% | $2,576 | $2,576 | $0 |
| What you actually keep | $3,652 | $1,406 | -$2,246 |
| Net margin | 19.8% | 7.6% | 12 points worse |
That $68 an hour is what the tech really costs you all in: a $28 wage plus payroll taxes, workers comp, benefits, the truck and the hours nobody can bill. Run your own number on the calculator.
Now the part that stings. Seventeen of those extra hours came from $2,100 of additional work the homeowner approved verbally and nobody wrote up. Bill that change order and the job nets $3,506 at 16.5%. Skip it and it nets $1,406 at 7.6%. One piece of missing paperwork cut this job's profit by more than half, and without job costing you would never know which job it happened on.
Same shop, twelve months, sorted by margin instead of revenue. This is the view that changes how an owner sells.
| Work type | Revenue | Share of revenue | Gross margin | Gross profit |
|---|---|---|---|---|
| Service calls and repairs | $486,000 | 27% | 42.4% | $206,064 |
| Service upgrades and panels | $342,000 | 19% | 33.1% | $113,202 |
| Remodel and renovation | $414,000 | 23% | 26.8% | $110,952 |
| New construction | $558,000 | 31% | 18.2% | $101,556 |
| Total | $1,800,000 | 100% | 29.6% | $531,774 |
Sample: 6-truck shop, metro Atlanta, trailing twelve months. Yours gets built from your jobs.
New construction is the biggest line on the top of the page and the smallest contributor to the bottom of it. It eats 31% of revenue and returns 19% of gross profit. Service is the reverse. That is not an argument to drop new construction. It is an argument to reprice it, or to stop letting it crowd out the service calls that pay more per hour on the same truck.
Your chart of accounts is just the list of buckets your money sorts into. Most trade shops have materials and labor landing in with the office expenses. Until job costs are split out from office costs, no per-job number is worth trusting.
One number for each level of tech, built from payroll, workers comp, the truck and the hours you can honestly bill. Everything else on this page depends on getting this one right.
Supply house invoices, payroll hours and subs all get coded to the job as they post. Weekly, not at year end, so the number is current enough to act on.
Job costing is included in the Two-Phase plan. Per-truck and per-location reporting is available as an add-on.
They need to put a job number on their hours and on supply house purchases. That is it. If your field software already captures time by job, we pull from it. If your crew will not adopt a new app, we work with what they already do rather than pretending otherwise.
Your CPA reports on the company for the year, which is what a tax return needs. Job costing reports on one job while you can still do something about it. Different jobs, both necessary, and we hand your CPA cleaner inputs at the end of it.
No. The job just stays open and we count costs and billing as they happen instead of dumping it all at the end. On longer work we track what you have spent and committed against what you have billed so far, so a job that is quietly losing money shows up in month two instead of month six.
It comes out of your own numbers rather than a rule of thumb. Take everything it costs to keep the doors open for a year, then spread it across either your billable hours or your job costs, depending on how your work is mixed. Most shops we see land between 11% and 18% of the job. Using the same method every time matters more than getting it exact to the decimal.
Usually not, and we would rather say so up front. Real job costing needs labor hours tagged to the job and material invoices coded to the job at the time they posted. If that was never captured it cannot be rebuilt honestly after the fact, and a number built on guesswork is worse than no number at all. What we can do is get the structure right during cleanup so job costing produces real numbers from day one forward. Most shops have a usable picture inside a quarter, and a full season of it inside a year.
Bring one closed job to a free books review and we will cost it out with you on the call. No deck, no pressure.