How to Calculate Labor Cost Per Job (From Real Hours, Not Guesses)
The short answer: Labor cost per job is the hours actually worked on that job multiplied by each worker's loaded rate. The formula is Labor cost = actual hours × loaded rate, where the loaded rate is the base wage plus payroll taxes, workers' comp, and benefits, usually 20% to 35% on top of the wage. The number people get wrong is the hours: costing from what you estimated at bid time is re-quoting, not costing. CRMb pulls the real hours straight from your crew's punch-ins, so the labor line on every job is a measured number, not a guess.
Labor is the largest cost on most service jobs and the one that is hardest to pin down. Materials have receipts. Labor lives in memory, in "I think we had two guys out there for most of a day," until you decide to measure it. This guide shows how to build a loaded rate, where the hours really come from, and how a small error compounds across a year of jobs.
The formula, and the two numbers it hides
The equation is simple: Labor cost = actual hours × loaded rate. The difficulty is that both inputs are usually wrong when businesses first try to calculate them.
The loaded rate is almost always understated, because people use the bare hourly wage and forget that every employee costs more than their paycheck. The actual hours are almost always estimated, because the real hours were never captured. Fix both and your labor cost becomes something you can price against. Fix neither and every "profitable" job is thinner than it looks.
Step 1: start with the base wage
Begin with what you pay the worker per hour. For a salaried employee, convert to an hourly figure by dividing annual pay by the hours worked in a year (a common approximation is 2,080 hours for full time, though the true figure is lower once you subtract paid time off).
Say a field technician earns $25.00 per hour. That is the floor, not the cost. The cost is what comes next.
Step 2: add the labor burden to get the loaded rate
Labor burden is everything you pay on top of the wage to employ someone. It is real money leaving your account, so it belongs in the job's cost. The main components:
- Employer payroll taxes, your share of Social Security and Medicare (FICA, 7.65%), plus federal and state unemployment. Call it roughly 9% of wages.
- Workers' compensation insurance, which varies enormously by trade, from about 2% for low-risk office work to well over 10% for roofing or tree work.
- Health insurance and benefits, if you provide them.
- Paid time off, holidays and vacation you pay for but during which no billable work happens.
Here is the build-up on that $25.00 technician, with mid-range assumptions:
| Component | Rate on base | Amount |
|---|---|---|
| Base hourly wage | — | $25.00 |
| Employer payroll taxes (FICA, FUTA, SUTA) | ~9% | $2.25 |
| Workers' compensation | ~6% | $1.50 |
| Health and benefits | ~8% | $2.00 |
| Paid time off allocation | ~4% | $1.00 |
| Loaded rate | ~27% | $31.75 |
The technician you thought cost $25 actually costs $31.75 an hour on the job. That 27% gap is the difference between a margin you can bank and one that evaporates. Trades with heavy workers' comp can see burden of 35% or more.
Step 3: get the real hours, not the estimate
This is where labor costing lives or dies. If you cost a job's labor using the hours you assumed when you bid it, you have learned nothing about the job, you have just repeated your own guess back to yourself.
Real labor hours include the parts of a job that never make it into an estimate: the extra tech who got pulled in, the second trip because a part was wrong, the overtime at the end of a long install, the travel between sites. Those hours are exactly the ones that turn a healthy bid into a break-even job, and they are invisible unless you capture them.
The reliable way to capture them is to have the crew punch in against the specific job. When your team uses Punch, each punch-in is tagged to the job, so the hours accumulate on their own. Those hours flow into CRMb as the job's labor cost with the loaded rate already applied. No timesheets to chase at week's end, no rounding up from memory. This is the core idea behind job costing for a service business: measure, do not estimate, the thing you spend the most on.
A worked example
Take a job bid at 16 hours of labor: two technicians for one eight-hour day. Loaded rate $31.75.
| Line | Calculation | Amount |
|---|---|---|
| Bid assumption | 16 hours × $31.75 | $508 |
| What the crew actually punched | 21 hours × $31.75 | $667 |
| Labor overrun | 5 hours × $31.75 | $159 |
The crew hit traffic, the access was tighter than expected, and cleanup ran long, five extra hours across the two of them. That is $159 the estimate never saw. On one job it is a rounding error. Run twelve of these jobs a month and it is roughly $1,900 a month, about $23,000 a year, of labor you are giving away without knowing it.
Now watch the second, quieter error. If you had costed this job at the bare $25 wage instead of the loaded $31.75, you would have booked labor at 21 × $25 = $525 and believed it cost $142 less than it did. Combine both mistakes, estimated hours and bare wage, and your labor line reads $400 when the truth is $667. Every margin you calculate from that number is fiction.
How burden and hours compound
The two errors multiply rather than add. To see it, here is the same 21-hour job costed four ways:
| Method | Rate | Hours | Labor cost |
|---|---|---|---|
| Bare wage, estimated hours | $25.00 | 16 | $400 |
| Loaded rate, estimated hours | $31.75 | 16 | $508 |
| Bare wage, real hours | $25.00 | 21 | $525 |
| Loaded rate, real hours | $31.75 | 21 | $667 |
The bottom row is the true cost. The top row is what a spreadsheet costed from a bid and a wage will tell you, and it is 40% too low. That 40% is precisely the range where a business thinks it is running 30% margins while actually running closer to 10%.
Turn the number into a pricing rule
The point of measuring labor is not bookkeeping, it is better bids. Once you cost enough jobs from real hours, patterns appear: "second-floor installs always run 20% over," "the Riverside route eats an hour of travel we never bill." Those patterns become adjustments you build into the next estimate.
CRMb keeps the estimated hours next to the actual hours on every job, and the reports view shows the margin trending as the crew punches in, flagged if it drifts toward the red while the job is still open. Feed that history back into your bids and your estimates stop being hope. For the downstream math, see how to estimate profit margin on a job.
Frequently Asked Questions
What is included in a loaded labor rate?
A loaded (or fully burdened) labor rate is the base wage plus everything else you pay to employ someone: employer payroll taxes, workers' compensation, health and other benefits, and paid time off. It typically runs 20% to 35% above the bare wage, and higher in trades with expensive workers' comp. Always cost jobs at the loaded rate, not the wage, or you will understate labor on every job.
How do I calculate labor burden rate?
Add up your annual employer costs beyond wages (payroll taxes, workers' comp, benefits, paid time off) and divide by the annual wages paid, which gives a burden percentage. Multiply the base wage by one plus that percentage to get the loaded rate. For example, a $25 wage with 27% burden is a $31.75 loaded rate.
Should I use estimated or actual hours for labor cost?
Actual hours, always. Estimated hours tell you what you hoped the job would cost, not what it did, so costing from them teaches you nothing and hides overruns. Capture real hours with a time-tracking app where the crew punches in against the job, then compare those hours back to your estimate to sharpen the next bid.
How do I track labor hours per job accurately?
Have the crew punch in and out against the specific job on a mobile app, rather than filling in a timesheet from memory at the end of the week. That ties every hour to a job as it happens, including the extra trips and overtime that estimates miss. CRMb reads those punched hours through its Punch pairing and turns them into the job's labor cost automatically.
Why is my labor cost higher than the wage I pay?
Because employing someone costs more than their paycheck. Payroll taxes, workers' comp, benefits, and paid time off add roughly a quarter to a third on top of the wage, and that money is a real cost of doing the job. Costing at the bare wage is the single most common reason a service business overestimates its margins.
Getting started
Rebuild your loaded rate this week: take one worker's wage, add payroll taxes, workers' comp, benefits, and paid time off, and see how far above the wage the real number sits. Then look at your last finished job and ask whether the hours you costed were measured or remembered.
CRMb applies your loaded rate to the real hours your crew punches against each job, so labor cost, and the margin that depends on it, is a number you can trust. It runs on Mac, iPad, and the web. Start free and cost your next job from real hours.