Most contractors don't actually know which jobs are profitable. They know whether the year was good or bad, they know which customers paid late, and they know which jobs felt like a fight. But they can't pull up the last 20 jobs and tell you the per-job margin within a few percent. That's the gap that keeps even busy contractors from making real money.

This article walks through what job profitability tracking actually requires, why most contractors skip it, and how to build a working system in Excel that does what a $300/month SaaS does at a fraction of the cost.

What "job profitability" actually means

The word gets thrown around a lot. The honest definition is:

Job profitability = (Revenue) - (Direct labor cost) - (Direct materials cost) - (Overhead allocated to the job)

Each of those four numbers needs to be tracked accurately. Most contractors get the first three roughly right and ignore the fourth, which is where the biggest profit leaks hide.

Revenue: What the customer paid. Easy to track.

Direct labor cost: Hours worked on the job × loaded labor rate. Loaded means the actual cost of having that worker for that hour, including taxes, workers comp, and benefits, not just their hourly wage.

Direct materials cost: What you paid for the materials, before markup. The receipt, not the line on the invoice.

Overhead allocated to the job: The slice of your total business overhead that this specific job is responsible for. Truck payments, insurance, software subscriptions, office rent, your own salary if you're not on the job. This is the line item every contractor underestimates.

Why contractors skip the math

Three reasons, all valid:

It feels like accountant work. Job costing has a vibe of being something boring you do at year-end with your tax preparer, not something useful for running the business day to day.

The data is scattered. Labor hours are in one place, material receipts are in another, the invoice is in a third, and the overhead is theoretical. Pulling it all together for one job feels like an hour of work for a number that "isn't going to change anything."

The math is intimidating. Calculating loaded labor rate and overhead allocation involves percentages and division, and most contractors haven't done that kind of arithmetic since high school.

All three are solvable. The first one shifts when you do the math once and discover that 30% of your jobs are losing money. The second is a one-time setup problem (a working spreadsheet pulls all four numbers into one place). The third is just multiplication.

The minimum viable system

You need to track six things per job:

  1. Customer name and date
  2. Revenue (what they paid)
  3. Hours of labor (yours and any helpers')
  4. Material cost (your cost, before markup)
  5. Job type (so you can compare apples to apples)
  6. Notes (anything unusual that affected this job)

Six fields. Filled out within 24 hours of completing the job. No exceptions.

Then your spreadsheet calculates:

  • Direct labor cost = hours × loaded labor rate
  • Allocated overhead = a percentage of revenue or a fixed dollar amount per job
  • True profit = revenue - labor - materials - overhead
  • Margin percentage = profit / revenue

Once that's running for 20-30 jobs, you can answer questions you couldn't answer before:

  • What's my real margin on a typical 200 amp service upgrade?
  • Are my drain cleaning calls actually profitable, or am I losing money on them?
  • Which customers consistently produce profitable jobs vs unprofitable ones?
  • Should I raise prices on a specific job type, or am I already pricing it right?

The loaded labor rate

This is the number most contractors get wrong. Your worker's hourly wage isn't your labor cost. Your labor cost is what it actually costs you to have that worker for that hour. The breakdown:

  • Hourly wage: Say $30/hour
  • Payroll taxes (FICA, FUTA, SUTA): Add ~10% = $3/hour
  • Workers comp insurance: Varies by trade, typically 5-15% = $2-$4/hour
  • Health benefits: If offered, $4-$8/hour equivalent
  • Paid time off, training, downtime: Roughly 10-15% = $3-$5/hour
  • Tools and uniforms: $1-$2/hour

A worker at $30/hour wage costs you closer to $43-$52/hour fully loaded. If you've been calculating job costs with the $30 number, every job has been costing $13-$22 more per labor hour than your books showed. Over a year of work, that's tens of thousands in invisible loss.

Your own labor, if you're a working owner, has the same loaded rate calculation, just substituting your own wage and benefit costs.

Overhead allocation

The other number contractors miss. Overhead is the cost of being in business that isn't tied to any specific job: truck payments, insurance, phone, software, office rent, your own non-billable hours, accounting fees, marketing, licenses.

Add up your monthly overhead. Divide by the number of jobs you typically complete in a month. That's your overhead per job.

Or, if your jobs vary a lot in size, calculate overhead as a percentage of revenue. Take last year's total overhead, divide by last year's total revenue, get a percentage. Apply that percentage to each job to get its allocated overhead.

Either method works. The point is to actually subtract it from each job's profit calculation, instead of pretending it doesn't exist.

What the data tells you

After tracking 20+ jobs honestly, contractors usually discover one of three things:

Discovery 1: Some job types are unprofitable. The classic example is small service calls. The contractor charges $89 for the trip plus $200 for the work. Revenue: $289. Loaded labor: 2 hours × $50 = $100. Materials: $25. Overhead allocation: $80. True profit: $84. Margin: 29%. That sounds fine, but compare it to a $1,820 water heater install where the same contractor netted $700 in 4 hours. Per-hour margin is $42 on the small call vs $175 on the install. The small calls are technically profitable, but they're crowding out the work that actually pays.

Discovery 2: Some customers are unprofitable. Specific customers consistently negotiate discounts, scope-creep their jobs, or pay late. After 5-6 jobs, the per-job margin on those customers is 5-10 points lower than your average. Now you know which customers to fire.

Discovery 3: Pricing is too low across the board. Average margin should be 15-25% after all costs. If you're seeing 5-10%, your prices are too low. The data justifies the increase you've been afraid to make.

The mistake that kills the system

Same as with CRMs. Most contractors who try to track job profitability fail because they try to build the spreadsheet from scratch. Two weeks of data entry later, they realize the formulas don't quite work, the labor rate calculation is off, and the overhead allocation isn't right. They abandon the project.

The fix is to start with a working template. The formulas are already correct. The loaded labor calculation already accounts for taxes, workers comp, and benefits. The overhead allocation works automatically.

This is exactly why we built the Job Profitability Tracker. It's a $49.99 Excel system with the formulas already in place. You enter your inputs (your loaded labor rate, your overhead percentage), and from then on every job you log gets a true profit number with no math required on your end.

What about SaaS job costing?

ServiceTitan, Jobber, and similar platforms include job costing modules. They're real tools and they work. Per-job pricing flows in automatically, time tracking happens through the app, and reports run themselves.

The tradeoffs:

  • Cost: $59-$600+/month per user, sometimes with mandatory annual contracts.
  • Setup time: Weeks to configure properly. The defaults usually don't match your actual cost structure.
  • Learning curve: Your techs and bookkeeper both need to learn the system.
  • Data lock-in: Once your historical data is in their system, switching is hard.

For a 5-person shop with 200+ jobs per year, those tradeoffs are worth it. For a solo contractor or 2-person shop with 50-100 jobs per year, the Excel system gives you the same insights for one-time $50.

The bottom line

Job profitability tracking isn't accountant work. It's the single most useful management practice for a small contractor, and the contractors who do it consistently are the ones who actually grow their margins year over year. The math isn't hard. The data collection is doable. The only thing standing between most contractors and a working system is starting.

You don't need to spend $300/month for what's essentially Excel with a fancy interface. Track six fields per job, run the right formulas, and you'll have better data than 80% of the contractors in your market.

Frequently Asked Questions

How long does it take to enter the data per job?
Once your loaded labor rate and overhead percentage are set up, each job entry takes 60-90 seconds. Customer name, date, revenue, hours, materials, job type, and notes. The spreadsheet does the math automatically.

What's a good target margin?
After all true costs (loaded labor, materials, overhead), most healthy small-shop contractors target 15-25% net margin per job. Below 10% means your pricing is too low or your costs are out of control. Above 30% is unusual and worth verifying you've included all costs honestly.

Should I include my own labor as a cost?
Yes, always. If you're a working owner, your labor on the job is a real cost. Use a market-rate loaded labor rate for yourself (what you'd pay a journeyman of equivalent skill). The "profit" left over after paying yourself a fair wage is your actual business profit.

How often should I review the data?
Monthly at minimum. Quarterly to look at trends across job types, customer types, and seasons. Annually to review the full picture and adjust your pricing for the next year.

What if I'm losing money on most of my jobs?
Don't panic. The first time most contractors run real numbers, they're shocked. The fix is usually some combination of: raise prices (most common), reduce material waste, find ways to do jobs faster without cutting quality, or fire the bottom 10% of unprofitable customers. The data tells you which lever to pull first.