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 $31 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 roughly two and a half times 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 $70/hr | $4,480 | $5,670 | -$1,190 |
| 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,300 | $14,580 | -$2,280 |
| Gross profit, before office costs | $6,100 | $3,820 | -$2,280 |
| Gross margin | 33.2% | 20.8% | 12.4 points worse |
| Share of keeping the doors open, 17% | $3,128 | $3,128 | $0 |
| What you actually keep | $2,972 | $692 | -$2,280 |
| Net margin | 16.2% | 3.8% | 12.4 points worse |
That $70 an hour is what the tech really costs you all in: a $31 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 keeps $2,792 at 13.6%. Skip it and it keeps $692 at 3.8%. One piece of missing paperwork took three quarters of this job's profit, 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.5% | $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.
Most trade shops have materials and labor landing in the same buckets as their office expenses. Until job costs are split out from office costs, no per-job number is worth trusting. We rebuild that structure before anything else gets measured.
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. Setup is quoted separately after your free books review. 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 works backwards, and that is the job. They report on a year that is already closed so the return is right. Job costing works forward. It uses current numbers on jobs you can still change, so you make the call while it still matters instead of finding out next March. Both are 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.