If a contractor’s making no money, the answer is almost always labor. Not materials. Not subs. Not overhead. Labor.
I’m Erin Andrews, owner of Level Accounting & Advisory. We’re a construction-only firm and I’ve reviewed hundreds of contractor P&Ls. We’ve seen how contractors lose money on labor. Probably 90% of the profit problems we find live in labor — hours that never got tracked, burden that never got added, crew jumping jobs without re-clocking, and the owner’s own time that’s never on the books at all.
The good news: it’s fixable. The fix is mostly a system, not a person. This guide breaks down the five places labor money quietly leaks, why contractors lose money on labor even when the bid looked profitable, and exactly how to plug each leak with mobile time tracking and weekly review.

What “labor loss” actually means in construction
Labor loss is the gap between the labor cost you ESTIMATED on the bid and the labor cost you actually INCURRED on the job — including burden, untracked hours, and time that got logged to the wrong job. It’s the most expensive gap in construction because labor is usually 30–50% of total job cost on specialty trades, and a 10% labor overrun on a $200K job is $6,000–$10,000 in profit gone.
Most contractors don’t see labor loss until the job is closed and the P&L doesn’t match what they thought they made. By then it’s too late. This is how contractors lose money on labor.
The 5 places labor money leaks (every single one is fixable)
Leak #1 — Estimating labor but never tracking actual hours
This is the one I see on every cleanup. Contractor bids 240 hours of framing labor at $35/hour for a deck job. Crew shows up, frames the deck, gets paid for whatever they punched on the time clock that week — but nobody ever compared the actual framing hours against the estimated 240.
The job closes. The P&L looks fine on the surface. Three months later the bank account is empty and you can’t figure out why. The framing took 312 hours, not 240. That’s $2,520 in unrecorded loss on ONE cost code on ONE job. Multiply across 40 jobs a year.
The fix: every hour gets tied to a job AND a cost code at the time of work. Not at the end of the week. Not at the end of the month. Real time.
Leak #2 — Ignoring labor burden
If you think a $25/hour electrician costs you $25/hour, you’re losing money on every job you bid.
The real cost of a $25/hour wage, after burden, is closer to $33–$40/hour depending on your state and your workers comp class. Burden includes:
- Federal payroll taxes (FICA, FUTA)
- State unemployment (SUTA)
- Workers compensation premium (huge for HVAC, plumbing, concrete, roofing)
- General liability allocation
- Health insurance contribution
- Retirement match
- PTO and holiday pay
- Vehicle, fuel, and small tools if the crew runs company trucks
Typical labor burden by trade: HVAC 35–55%, plumbing 35–50%, electrical 30–45%, concrete 45–65%, roofing 60–90%. If you’re bidding at base wage and ignoring this, every “profitable” job is actually closer to break-even.
Full breakdown with the formula and a free calculator: How to Calculate Labor Burden in Construction (Free Calculator).
Leak #3 — Logging time without a job or cost code assignment
Crew clocks in for 8 hours. Time card says “8 hours, regular pay.” No job. No cost code. Payroll runs, the hour gets paid, the cost ends up in a giant “Labor” bucket on the P&L with no way to tell which job it belongs to.
Now your job profitability report is lying. You can’t run an estimate vs. actual. You can’t bid the next job intelligently because you have no idea what the last one really cost.
The fix: the time entry isn’t valid until job + cost code is selected. Build that rule into JobTread or whatever time tracking app you use. No exceptions.
Leak #4 — Crew jumping jobs without re-clocking
Three-job morning. Crew starts on Job A at 7am, gets pulled to Job B at 9:30 to fix something, ends up on Job C at noon for the rest of the day. If they clocked into Job A at 7am and never re-clocked, all 8 hours hit Job A.
Job A looks like a labor disaster. Jobs B and C look like they came in under budget. None of the data is real. Your next bid on a Job-A-type job comes in too high and you lose the work to a competitor whose data is also wrong.
The fix: mobile time tracking with one-tap job switching. The crew opens the app on their phone, taps the new job, taps the cost code, and they’re recording against the right project in 5 seconds. JobTread’s mobile time tracking is built for exactly this:
Leak #5 — Owner labor never tracked at all
This is the silent one. Owner spends 6 hours on a Saturday helping the crew finish a tile job. Owner doesn’t log it because “I’m the owner, my time is overhead.” Two problems:
- That job looks more profitable than it actually was. Your data is lying. You’ll bid the next one too low.
- The owner is the most expensive labor on the crew. If you’re spending 10 hours a week in the field, that’s 500+ hours a year of unpriced labor — easily $30K–$60K of cost the business is absorbing without anyone seeing it.
The fix: owners log time too. Use a separate cost code if you want (“Owner Field Labor”) so you can see it clearly. The job profitability has to show the TRUE cost of completion, including yours.

The fix in one sentence
Every hour gets tied to a job and a cost code in real time, including the owner’s hours, with burden allocated through to the job-level report.
That’s the whole system. Everything else is implementation.
Mobile time tracking — the only way it actually works
Paper time cards don’t work. Whiteboards in the trailer don’t work. Texting hours to the office at the end of the week doesn’t work. The crew won’t do any of it consistently and the data you get back is garbage.
What works: a mobile app on every crew member’s phone with three rules:
- Clock-in REQUIRES selecting a job
- Clock-in REQUIRES selecting a cost code
- Switching jobs takes one tap, two seconds
JobTread’s mobile time tracking does all three. So does ClockShark, Connecteam, and Tsheets (now QuickBooks Time). We use JobTread because it ties directly into the rest of the job costing data — but the platform matters less than the discipline of using it.
How to train the crew (and the resistance you’ll get)
Your crew will push back. Here’s what they’ll say and how to handle it:
“I don’t have time to clock in and out every time I switch jobs.” Yes you do. It’s two taps. The crew member who is “too busy” to clock correctly is the one whose hours are killing your profit on the wrong job.
“My phone died.” The app caches offline. Hours sync when you reconnect. This excuse went away in 2018.
“I forgot.” The app sends a reminder push notification. Set it. Use it.
“This feels like surveillance.” It’s not surveillance, it’s accounting. You’re not tracking where they are, you’re tracking what job their hour belongs to. The crew member who refuses time tracking is telling you they don’t want their hours visible. That’s worth a conversation.
What works in practice: tie it to pay. Hours that aren’t logged correctly don’t get paid until they’re fixed. The first paycheck where someone has to chase down their own missing hours, the behavior changes. We’ve watched it happen on every JobTread rollout we’ve done.
Reviewing labor variance weekly
The system only works if you LOOK at the data. Once a week, run an estimate vs. actual report on every active job and compare estimated labor hours against actual. Anything 15%+ over needs investigation. Read the full review playbook in Estimate vs. Actual Reports: The Weekly Habit That Saves Profit.
When to fire the slowest crew member (using data, not gut)
Hard part of the job. Once you have clean data on hours per job per cost code per crew member, you can finally answer the question every contractor asks: who’s actually pulling their weight?
Run it like this. Pick a cost code that the same crew works repeatedly — say, “30-100 Framing — Labor” for a deck contractor. Look at the average hours per square foot of finished deck across all crews over 6 months. Then look at each individual crew member’s average. The one who’s consistently 20%+ slower than the team average is costing you real money on every job.
That’s not a vibes call anymore. That’s data. You can have the conversation with confidence — coach them up, retrain, reassign, or part ways. The data takes the emotion out of it. It also protects you legally because you’re making the decision based on documented performance, not personality.
The crew member who’s consistently 15% FASTER than average? Pay them more. They’re saving you money on every job. They’ll either notice and stay or leave for the contractor down the road who figured this out first.

What this fixes (and what it won’t)
What clean labor tracking fixes: estimate accuracy, job-level profitability visibility, ability to fire and promote on data, ability to spot scope creep early, ability to bid the next job intelligently.
What it won’t fix: a fundamentally bad estimate, a customer who refuses to pay change orders, a job site safety problem, or a crew member who’s actively stealing time. Those are separate problems with separate fixes.
Frequently asked questions
How much money do contractors typically lose on labor?
It varies, but the contractors we take over typically have labor variances of 10–20% across active jobs that nobody is tracking. On a contractor doing $3M in revenue with 35% labor cost, that’s $105K–$210K of labor cost that’s coming in higher than estimated, with no system in place to catch it. Most of it is recoverable in the first 6 months of clean tracking and weekly review.
Do I need separate software for time tracking, or does QBO Time work?
QuickBooks Time (formerly Tsheets) works for basic clock-in/clock-out. It doesn’t have native cost code structure or tight integration with construction project management. For specialty trades doing $1M+, JobTread’s mobile time tracking is meaningfully better because it ties hours directly to the same cost codes you bid against.
What’s the right way to handle salaried foremen and project managers?
Salaried staff still log hours by job and cost code, even though their pay doesn’t change week to week. The reason: you need to allocate their cost to the jobs they actually work on so the job profitability is real. If your foreman makes $85K/year and spends 60% of his time on Job A and 40% on Job B, those jobs need to absorb that proportion of his cost.
How do I add labor burden to my job costing reports?
The cleanest way is a monthly journal entry that allocates total burden costs (taxes, workers comp, insurance, benefits) to jobs proportionally based on direct labor hours. Most $1M–$5M contractors don’t have this set up. Your accountant should. If they don’t know what burden allocation is, that’s a sign you need a construction-specialized firm.
What if my crew refuses to use mobile time tracking?
This is a leadership problem, not a software problem. The system has to be tied to pay — hours not logged correctly don’t get paid until they’re fixed. Once that policy is real, behavior changes within one pay cycle. We’ve seen it happen at every JobTread rollout.
How long does it take to see results from cleaner labor tracking?
Two to three months. The first month is rollout and resistance. Months 2 and 3 you start getting clean data. By month 4 you’re using the data on bids and Friday reviews. By month 6, the contractors we work with typically see 5–10% margin improvement just from better labor visibility — not from doing anything different in the field, just from knowing what’s happening.

The bottom line
Labor is where construction profit lives or dies. The bids look fine. The bank balance looks fine. Then the year ends and the profit isn’t there. Almost always, the answer is in the hours that nobody tracked, the burden nobody added, and the owner labor that never showed up on the books.
The fix is a system: mobile time tracking, every hour tied to a job and cost code, burden allocated monthly, weekly variance review. Not glamorous. Just the difference between a contractor who keeps the money they earn and one who can’t figure out where it went.
If you want help designing the system, training the crew, and getting the data clean enough to use, that’s what we do.
Ready to talk?
Or start with the bigger picture: Job Costing for Contractors: The Complete Guide (JobTread + QBO).
Erin Andrews is the owner of Level Accounting & Advisory, a construction-only accounting firm based in Vero Beach, FL serving contractors nationwide. Level has 20 years of experience in construction accounting and serves specialty trades doing $1M–$15M in annual revenue across HVAC, plumbing, electrical, concrete, deck, fencing, hardscape, and pool construction.
Related Posts

Job Costing for Fencing, Deck, and Hardscape Contractors

Effective Job Costing for Concrete Contractors: QBO + JobTread Setup

Job Costing for Plumbing Contractors: QBO + JobTread Setup

Job Costing for HVAC Contractors: QBO + JobTread Setup

Strong Job Costing for Electrical Contractors: QBO + JobTread Setup
