Here is the version of this problem I hear most often. A contractor finishes a busy month. Every customer paid. The invoices look strong. Then the truck payment, the insurance bill, and the supply house statement hit, and the account is thinner than a month like that should leave it.
The natural conclusion is that the business needs more volume. More jobs, more revenue, problem solved. But when I tracked every one of my own jobs for a full year, the data said something different. The problem was almost never volume. It was that individual jobs were quietly losing money, and the invoice total was hiding it.
A job can lose money while the customer pays in full and leaves a five-star review. That is what makes this so hard to see. The loss never shows up as a bounced check. It shows up as hours you worked that nobody paid for.
Five leaks cause almost all of it. Here they are, with real numbers from my own electrical business in the Philadelphia metro, and the specific fix for each.
Leak 1: You bill your wage, not your loaded rate
Most contractors set their hourly rate by looking at what other shops charge, or worse, by taking the wage they used to earn as an employee and adding a little on top.
Neither number has anything to do with what an hour of your time actually costs. The real number is your loaded labor rate: wages plus payroll taxes, liability insurance, workers comp, health coverage, vehicle costs, and every hour of non-billable time (estimates, drive, paperwork) that a billable hour has to carry.
When I first ran the math on my own operation, my true cost per billable hour was roughly 40 percent higher than the number I had in my head. Every job I priced off the imaginary number started life underwater, before a single materials run or callback made it worse.
The fix: calculate your real rate once, from your actual expenses, and reprice from there. I wrote a full walkthrough in how to calculate your true hourly rate, and there is a free labor rate calculator on this site that does the arithmetic for you. Most contractors who run it for the first time find they are 30 to 50 percent below where they need to be.
Leak 2: You price estimated hours and work actual hours
The quote says 16 hours. The job takes 22. Nobody decided to donate six hours. It happened one normal moment at a time: 35 minutes of drive each way, two runs to the supply house because the materials list missed something, a 90-minute callback the following week for a punch-list item.
I watched this exact pattern on a kitchen rewire I billed at $3,790. On paper it was a strong job. Counting real hours, real materials, and the callback, it cleared $410 in actual profit. About an 11 percent margin on a job I would have sworn was a winner.
Drive time is the worst offender. A one-hour job 35 minutes away is a 2 hour 10 minute job. If you bill $240 for the hour and eat the travel, your effective rate on that job just fell to about $111.
The fix: track actual hours on every job, including drive, materials runs, and callbacks. Then let the data set policy: a minimum job size outside your home area, a trip charge for far first-time customers, and service calls batched into geographic clusters. When I did this, average drive time per service call dropped 40 percent, and the small out-of-area jobs that never paid for themselves stopped getting booked.
Leak 3: Materials at cost, or close to it
Passing materials through at cost feels honest. It is also a direct subsidy from you to your customer, because acquiring materials is real work: ordering, pickup, returns, warranty handling, stocking the truck, and eating the price increase between quote and install.
A thin markup is barely better. At 10 or 15 percent, one damaged fixture or one restocking fee can wipe out the margin on the whole materials line.
The fix: 40 percent markup on standard materials, more on specialty items you have to chase down. When I moved from 25 to 40 percent, the number of customers who noticed was zero. If you are not sure whether your markup is actually producing the margin you think it is, that confusion has a name, and I covered it in markup vs. margin. Marking up 25 percent does not produce a 25 percent margin. It produces 20, and that gap compounds across every job you run.
Leak 4: Overhead lives nowhere
Insurance, the shop, the software, the phone, the accountant, the truck that is not on a job right now. None of it attaches to any single invoice, so most contractors never charge any job for it. The overhead just sits there, eating whatever profit the year produces.
Overhead has to ride on your billable hours, because there is nowhere else for it to go. Divide annual overhead by annual billable hours and you get your overhead cost per hour. For my operation that number is about $32 per billed hour. A 16-hour job carries roughly $512 of overhead whether I acknowledge it or not. The only choice I get is whether the customer pays it or I do.
The fix: put an overhead line in your job costing and allocate it on every single job. This is the step that turns "I think that job went well" into an actual number, and it is the reason two jobs with identical invoices can be a winner and a loser.
Leak 5: Scope creep with no change order
"While you're here, could you also..." is the most expensive sentence in the trades. Each individual ask is small. Move a receptacle. Swap a fixture the customer bought. Look at the flickering light in the hallway. Fifteen minutes here, thirty there.
Three of those a week is over 75 hours a year of unbilled labor. At $240 per hour, that is more than $18,000 of work performed and given away, invisibly, with a smile.
The fix: a change order process that is fast enough to actually use on small items. A one-line text with a price counts. The customer approves it before the extra work happens, and the extra work gets billed. I wrote up the exact process in change orders for contractors, including how to do it without souring the relationship. Customers respect a clear price far more than they respect free work they never knew was free.
Finding your leaks: you cannot fix what you cannot see
Here is the uncomfortable part. Reading this list is not the same as knowing which leak is draining your business. Every contractor I have walked through this guesses wrong about their own biggest leak. I guessed wrong about mine. I thought my problem was underpricing. The data said my pricing was close and my drive time and GC work were the real bleed.
The only way to know is to track: every job, actual hours, actual materials, overhead allocated, net profit per actual hour. The full method is in how to track job profitability without buying software, and it takes about ten minutes a day once it is set up.
The bottom line
Jobs do not lose money in one dramatic moment. They lose it in unbilled half hours, unmarked materials, unallocated overhead, and a labor rate that was never real to begin with. Every one of those leaks is invisible on the invoice and obvious in the data.
Fix the rate first, because every other fix builds on it. Then track long enough to see which of the other four leaks is yours. Most contractors who do this find they do not need more jobs at all. They need the jobs they already have to stop leaking.