You can have the busiest year of your life and end it with less money than you started. Every contractor who has been out on his own for more than a couple of years has had that year. The trucks were moving, the phone rang, the crew was booked solid, and somehow December came and the account was flat.
The reason is almost never a mystery once you look. It is that some of the work was losing money and nothing in the business was set up to tell you which work. Revenue hides it. A $9,000 month feels like a good month whether it earned you $2,200 or cost you $400.
Job profitability is the number that ends the guessing. This guide covers what it actually means, how to calculate it without an accounting degree, and what to do once you can see it.
What job profitability actually means
Job profitability is what is left from a single job after every real cost that job caused. Not after materials. Not after materials and wages. After everything.
Job profit = Revenue − Loaded labor − Materials at cost − Allocated overhead
Three of those four are straightforward and most contractors already track them in some form. The fourth is where the money disappears.
| Number | What it is | Where contractors go wrong |
|---|---|---|
| Revenue | What the customer actually paid | Using the quoted price instead of the collected price |
| Loaded labor | Hours on the job × true cost per hour | Using the wage instead of the loaded rate |
| Materials | What you paid the supply house | Using the marked-up invoice line instead of the receipt |
| Allocated overhead | This job's share of running the business | Leaving it out entirely |
Loaded labor is not the hourly wage
If you pay a journeyman $34 an hour, that man does not cost you $34 an hour. He costs you the wage plus the employer side of FICA, plus unemployment, plus workers comp, plus any benefits, plus the hours you pay for that are not billable.
Workers comp alone is brutal in the electrical trade and worse in roofing. Depending on your state and your experience modifier, you can be paying anywhere from eight to twenty five dollars per hundred dollars of payroll.
| Component | Per hour |
|---|---|
| Base wage | $34.00 |
| Employer FICA (7.65%) | $2.60 |
| Federal and state unemployment | $0.95 |
| Workers comp (at $12 per $100) | $4.08 |
| Health contribution | $3.50 |
| Paid time off, spread across worked hours | $1.70 |
| Loaded cost | $46.83 |
That is 38 percent over the wage, and these are not aggressive assumptions. If you have been costing jobs at $34 an hour, every single job in your history is wrong by roughly $13 for every hour anybody touched it. On a 40 hour job that is $520 you thought you made and did not.
If you have not run this number for your own shop, the true cost of an employee calculator does it in about two minutes.
Allocated overhead is the one everybody skips
Overhead is everything you pay for whether or not you turn a wrench that week. Truck payments, fuel, insurance, phone, software, the accountant, tools, the yard, and your own pay for the hours you spend quoting and chasing money instead of installing.
That money has to come out of jobs, because jobs are the only thing that brings money in. The question is how much of it each job carries.
The simplest honest method is to allocate by billable hour. Add up annual overhead, divide by annual billable hours, and you have an overhead rate per hour that you apply to every job.
A one truck shop with $62,000 of annual overhead and 1,600 billable hours carries $38.75 of overhead per billable hour. A two man shop with $104,000 of overhead and 3,100 billable hours carries $33.55.
Two jobs that look identical and are not
Here are two 200 amp service upgrades from the same month. Same price, same scope on paper.
| Job A, Maple St | Job B, Hancock Ave | |
|---|---|---|
| Collected revenue | $3,070 | $3,070 |
| Field hours | 8.0 | 13.5 |
| Loaded labor at $46.83 | $374.64 | $632.21 |
| Materials at cost | $485 | $605 |
| Overhead at $38.75 per hour | $310.00 | $523.13 |
| Job profit | $1,900.36 | $1,309.66 |
| Margin | 61.9% | 42.7% |
Both made money, so neither one hurts. But Job B took five and a half more hours for the same check, and the reason is worth knowing. Maybe the panel was in a finished basement. Maybe the POCO rescheduled the disconnect. Maybe the homeowner stood in the doorway asking questions for an hour.
Track twenty jobs and the pattern stops being anecdotal. You find out that finished basement services run four hours long every time, and you either price them differently or stop selling them at the same number.
What good looks like
After loaded labor, materials at cost, and allocated overhead, most healthy small shops land somewhere between 15 and 25 percent net margin per job. Service calls usually run higher because the overhead per hour is spread across a short visit. Big installs usually run lower because material is a bigger share and material carries less margin than labor.
If you are consistently under 10 percent, the problem is almost always price, not efficiency. Contractors tend to attack this from the cost side because that feels controllable, but you cannot buy copper cheap enough to fix a bad price.
If you are consistently over 35 percent, check that you really included everything. Unpaid owner labor is the usual missing piece.
How to actually do this without hating your life
The system only works if entering a job takes a minute. Six fields, entered the day the job closes:
- Customer and date
- Collected revenue
- Field hours, all hands
- Material cost from the receipt
- Job type, so you can compare like with like
- One line of notes about anything unusual
Your loaded labor rate and overhead rate are set once, at the top of the sheet, and the math runs itself. The full build is covered in how to track job profitability without buying software.
Enter the job the day it closes. Not Friday, not month end. Friday you will not remember whether Hancock Ave was thirteen hours or eleven, and a tracker full of guesses is worse than no tracker because you will trust it.
What to do once you can see it
The first run is usually unpleasant. Most contractors find that somewhere between a fifth and a third of their jobs lost money, and that the losers cluster. Same job type, same customer, same referral source.
Three moves, in order of how fast they work:
Reprice the losing job type. If finished basement service upgrades run four hours long every time, they are not a $3,070 job, they are a $3,600 job. You are not raising prices, you are correcting one.
Fix the hours, not the price, where the hours are the problem. If a job type runs long because you are staging material twice or going back for parts, that is a process problem and repricing it just makes customers pay for your truck stock.
Let the bottom go. Every shop has a customer or two who generate work that never clears cost. Keeping them busy feels safer than an empty week, but an empty week costs you less than a job that loses $300.
None of this requires software, a consultant, or a change to how you run jobs. It requires knowing the number. Most contractors never do, which is exactly why the ones who do pull away.