Job Profitability for Contractors: Bid Smarter With Numbers You Already Have

The JobWorkflowPro Team
A person standing in a finished kitchen looking at a job report on a phone.

Quick answers

  • What is job costing in construction? Job costing means tracking revenue and costs against a specific job instead of the business as a whole, so you can see whether that individual job made money.
  • What are the main cost categories in job profitability? Labor cost, material cost, and subs/other direct costs — subtract those three from the job's revenue and you get gross profit.
  • How do you calculate gross margin on a construction job? Divide the job's gross profit (revenue minus labor, materials, and sub costs) by its revenue to get gross margin as a percentage.
  • What is a burdened labor rate? It's the true hourly cost of an employee once payroll taxes, workers' comp, and non-billable time like drive time and shop time are added on top of their wage.
  • Why can a profitable year still hide unprofitable jobs? Because a few big, high-margin jobs can carry the P&L while a batch of small jobs quietly lose money — the yearly total looks fine even though a chunk of the work underneath didn't pay.

Most contractors I know can tell you their revenue down to the dollar. Ask them which kind of job actually makes money, and you get a shrug and a gut feel. "Bathrooms are good. Decks are a headache. That one GC always pays late." That's not nothing, but it's not job costing either. It's a story you tell yourself, and stories don't survive a bad quarter.

The frustrating part is that the numbers you need to settle the argument are already sitting in two places: your job tracking and your QuickBooks file. You're just not putting them next to each other. When you do, bidding stops being a guessing game. You start saying yes to the work that pays and no to the work that quietly bleeds you out.

Here's how to actually get there without buying a finance degree.

Why "we made money this year" isn't job costing

A profitable year can hide a stack of unprofitable jobs. If three big remodels carried you while a dozen small service calls lost money on windshield time and callbacks, your P&L still looks fine. Next year you book more of the small stuff because you were "busy," and the math finally catches up with you.

Job costing flips the lens. Instead of asking did the business make money, you ask did this job make money — and then you look for the pattern across jobs. That pattern is the whole point. It's what tells you what to bid more of, what to bid higher, and what to walk away from.

The good news: per-job profitability is mostly addition and subtraction. The hard part is having the inputs tagged to the right job in the first place.

The four numbers that decide every job

For any job, profitability comes down to four buckets. Get these clean and the rest is easy.

  • Contract / revenue — what you billed (or estimated) for the job.
  • Labor cost — hours times burdened rate, not just the wage on the check.
  • Material cost — what you actually spent, not what you guessed at bid time.
  • Subs and other direct costs — subcontractors, equipment rental, dump fees, permits.

Revenue minus those three cost buckets is your gross profit on the job. Divide that by revenue and you've got your gross margin — the percentage that lets you compare a $4,000 job to a $40,000 job on equal footing.

Two traps that wreck this for contractors:

Unburdened labor. A guy at $28/hour doesn't cost you $28/hour. Add payroll taxes, workers' comp, and the non-billable time — drive time, shop time, the run to the supply house. If you cost labor at the raw wage, every labor-heavy job looks more profitable than it is, and those are exactly the jobs you'll over-book.

Materials by estimate instead of actuals. You bid $3,200 in materials and spent $3,900. If your job costing pulls the bid number, you never see the $700 leak. Multiply that across a season and that's the difference between a good year and a "where did it all go" year.

Where the data already lives

This is the part contractors miss. You don't need a new data-entry habit. You need the data you're already creating to land in the same place.

Your job tracking is the spine. Every job should have its own record — a real job number, a customer, a status, and a home for notes, photos, and documents. That's where field reality shows up: what got done, what changed, the change order the homeowner approved by text.

QuickBooks Online is where the money already lives. Customer invoices, vendor bills, material receipts, estimates, AR — it's all in there. The problem is that QuickBooks organizes by account and customer, not by job profitability the way a contractor thinks about it.

When your job platform and QBO talk to each other, the costs and revenue tagged to a job flow back into one view. That's the whole game: estimates and invoices sync so your contract value is right, costs attach to the job, and you get a per-job profit number without re-keying anything. We built QuickBooks sync into the shared core for exactly this reason — the field crew tracks the job, the office runs the books, and nobody types the same invoice twice.

A simple workflow to get clean job numbers

You don't have to boil the ocean. Here's a sequence that works for a small GC shop.

1. One job, one record, one number

Every job gets created the moment you win it (or even when you bid it). Auto job numbers keep it consistent so nobody's calling it "the Henderson kitchen" in one place and "JB-1042" in another. If a cost or a photo can't be tied to a job number, it doesn't count — that's the rule that keeps your data honest.

2. Tag costs to the job as they happen

The material receipt from the supply house, the sub's invoice, the equipment rental — those get coded to the job, not dumped into a general "materials" bucket at year end. This is where most leakage hides. A receipt that doesn't make it onto the job means free margin you'll never see again. Snap it into the job's documents in the field so it's not riding around in a truck console for three weeks.

3. Track labor against the job

Even a rough version of this beats nothing. Hours logged against a job, costed at a burdened rate, gives you the single biggest variable on most construction work. If you're not ready for full time tracking, at least estimate hours per job and reconcile against payroll monthly. You'll spot the jobs that ran long fast.

4. Let the reports do the subtraction

Once revenue and costs are attached, job profitability reports hand you the margin. You're not building spreadsheets at 9pm. You open the report, sort by margin, and the pattern jumps out. Pair it with AR aging so you also see which jobs are profitable on paper but still owe you money. A high-margin job you can't collect on isn't a high-margin job yet.

Turning the numbers into better bids

Clean job costing is interesting. Better bidding is the payoff. Here's how to actually use it.

Find your real margin by job type. Sort completed jobs by category — kitchens, decks, service calls, whatever your mix is. Look at the average margin in each bucket, not the headline jobs. You'll usually find one or two categories quietly underperforming. That's your first conversation: raise the price or stop chasing them.

Stop bidding off a flat markup. A lot of shops slap the same percentage on every estimate. But if labor-heavy jobs run thinner because of non-billable time, your flat markup is overcharging the easy work and undercharging the hard work — so you win the jobs you should lose and lose the jobs you should win. Let the historical margins set your markup by type.

Price the customers, not just the work. Your job data exposes the GC who always tacks on uncompensated scope, or the homeowner whose "quick change" eats a day. Slow-pay customers show up in AR aging. None of this means you fire them. It means you price the friction in, the same way you'd price a tight crawlspace.

Bid the next one off the last one's actuals. The most useful estimating tool you have is what the same job actually cost last time. When materials and labor are tracked to the job, your next bid starts from reality instead of optimism. That's the difference between job costing software and a calculator with good intentions.

Keep it boringly consistent

The shop that wins here isn't the one with the fanciest dashboard. It's the one where every job gets a number, every cost gets tagged, and somebody looks at the profitability report once a month. Do that for two or three months and you'll have something most contractors never get: an honest answer to "is this work worth doing?"

You already make the data. The only question is whether it's working for you or just piling up in a truck console and a messy chart of accounts.

Frequently asked questions

What's the difference between gross margin and net margin on a job?

Gross margin looks only at revenue minus direct job costs (labor, materials, subs); net margin also subtracts overhead like insurance, office staff, and equipment that isn't tied to that specific job.

How often should a shop pull job profitability reports?

Monthly is enough for most small shops — the value is in someone actually looking at the report and reacting to it, not the frequency itself.

Should every job type carry the same markup?

Not necessarily — a flat markup across all job types tends to overcharge easy, materials-heavy work and undercharge labor-heavy work, so markups are more accurate when they're set by historical margin per job type.

What is AR aging and how does it relate to job profitability?

AR aging tracks how long invoices have gone unpaid; a job can show a great margin on paper and still hurt your cash flow if the customer hasn't actually paid yet.

Does job costing require dedicated software?

Not strictly — a spreadsheet can do it — but it only works if labor, materials, and sub costs actually get tagged to the job as they happen, which is the habit most shops struggle to keep up by hand.

If you want to see your own jobs laid out by profit instead of by gut feel, start a free trial and connect QuickBooks — the construction package keeps the job tracking clean without the insurance clutter you don't need. Want to talk through whether it fits how your shop runs first? Email us at sales@jobworkflowpro.com. No pressure, no pitch deck.