# What Is Job Costing?

Job costing is tracking the actual cost of each job (materials, labor hours, subcontractors, equipment and permits) and comparing it with the estimate and the price. It shows which jobs made money and why. A $14,000 roof estimated at $9,600 of cost that actually cost $10,900 lost $1,300 of profit to overruns.

## Key takeaways

- Job costing answers one question per job: did this job make the money we priced it to make?
- Track the same cost buckets you estimate with: materials, burdened labor, subcontractors, equipment, and permits or disposal.
- Labor hours by job are the hardest and most important number. Without them, job costing is guesswork.
- The value is in the variance: estimated vs. actual, line by line, so you can fix the estimate or the field process next time.
- A small contractor can job cost with tagged receipts, timesheets by job and a simple report. Fancy software helps, but discipline matters more.

## How does job costing work?

Job costing works by giving every job its own ledger. Each material purchase, each hour a tech works, each sub invoice and each rental gets tagged to the job it was for. When the job closes, you add those costs up, compare them with what you estimated, and subtract them from what you billed. The result is the job's real [gross profit](https://www.brix.so/learn/gross-margin).

**Job costing formulas**

```
Job gross profit = Job revenue − Actual job cost   |   Variance = Actual cost − Estimated cost
```

Where:
- Job revenue = everything billed on the job, including approved change orders, before sales tax
- Actual job cost = materials + burdened labor + subcontractors + equipment + permits and disposal tagged to the job
- Variance = positive means the job cost more than estimated (an overrun)

> **Worked example: job cost report for a roof replacement**
>
> Illustrative numbers. A roofer sold a replacement for $14,000 based on $9,600 of estimated cost: a 31.4% gross margin.
>
> Actuals came in at $10,900: materials ran $400 over because the takeoff missed a valley, a rain day added 12 crew-hours ($540), a second dumpster added $250, and $110 of extra flashing was picked up mid-job.
>
> Job gross profit = $14,000 − $10,900 = **$3,100**, a 22.1% margin instead of 31.4%. The overrun cost $1,300 of profit.
>
> The fix is specific: adjust the takeoff for valleys, and add a weather contingency to multi-day roofs.

**Sample job cost report (same roof, illustrative)**

| Cost bucket | Estimated | Actual | Variance | Note |
| --- | --- | --- | --- | --- |
| Materials | $5,200 | $5,710 | +$510 | Missed valley in takeoff; extra flashing |
| Burdened labor | $3,800 | $4,340 | +$540 | Rain day: 12 extra crew-hours at $45 |
| Dumpster and disposal | $350 | $600 | +$250 | Second dumpster |
| Permit | $250 | $250 | $0 |  |
| Total cost | $9,600 | $10,900 | +$1,300 |  |
| Revenue | $14,000 | $14,000 |  | No change order written |
| Gross profit | $4,400 | $3,100 | −$1,300 | Margin 31.4% → 22.1% |

Want to run this on your own jobs? The [job costing calculator](https://www.brix.so/tools/job-costing-calculator) lays out estimated vs. actual by bucket, and the [job costing spreadsheet](https://www.brix.so/templates/job-costing-spreadsheet) gives you a template to track every job.

## What costs should you track on each job?

Track every cost that exists because of the job, in the same buckets you use to estimate. If your estimate has a line for materials, labor, subs and disposal, your job cost report needs the same four lines, or you can't compare them.

- **Materials and equipment:** supplier invoices and receipts tagged with the job name or number, plus parts pulled from truck stock.
- **Labor:** hours per tech per job, multiplied by each tech's [burdened labor cost](https://www.brix.so/learn/labor-burden), not just their wage.
- **Subcontractors:** sub invoices assigned to the job.
- **Equipment and rentals:** lifts, excavators, jetters rented for the job.
- **Permits, dumpsters, disposal and inspection fees.**
- **Overhead (optional):** some shops allocate an [overhead](https://www.brix.so/learn/overhead) rate per labor hour to see net profit per job. Start with gross profit; add overhead allocation once the basics are reliable.

## Job costing by trade

Every trade job costs differently, and the cost that usually blows up is different too. Focus your tracking on the line that moves.

**Where job costs go wrong, by trade**

| Trade | Cost that drifts most | What to track | Typical fix |
| --- | --- | --- | --- |
| HVAC | Install labor hours on replacements; extra parts on service | Crew-hours per install by system type; parts used vs. pricebook | Update install hour standards by system type |
| Plumbing | Labor on diagnostics and repipes; second trips for parts | Hours per job, trips per job | Better truck stock and flat-rate task times |
| Electrical | Labor on old-house rewiring; wire and conduit | Hours by phase (rough-in, trim), material by circuit | Phase-level estimates; walkthrough before pricing |
| Roofing | Materials (waste, missed valleys) and weather days | Bundles ordered vs. used; crew-days | Measure-based takeoffs; weather contingency |
| Landscaping | Crew hours on installs; drive time on maintenance | Hours per property, per visit | Re-price routes that run long; tighter routing |
| Remodeling and GC | Scope creep and sub overruns | Change orders, sub invoices vs. bids | Signed [change orders](https://www.brix.so/learn/change-order) before extra work |
| Cleaning | Labor hours per visit | Clocked hours vs. quoted hours per home or site | Re-quote accounts that run over; adjust team size |

## How do small contractors set up job costing?

Small contractors can set up job costing in a week without new software: give every job a name or number, make sure every receipt and every hour is tagged to it, and review a report when each job closes. The habit is the hard part, not the tools.

1. **Give every job an ID.** Use the customer name plus address or a job number, and use it everywhere: estimate, purchase orders, receipts, timesheets and invoice.
2. **Tag hours by job.** Techs clock in and out per job, including drive time to the job. Daily paper timesheets work if they're filled out daily, not Friday from memory.
3. **Tag every purchase.** Ask suppliers to put the job name on the invoice or PO. Photograph receipts and label them the same day.
4. **Book it in your accounting.** In QuickBooks, assign costs to the customer or project. See [how to do job costing in QuickBooks](https://www.brix.so/learn/how-to-do-job-costing-in-quickbooks) and [classes vs. projects](https://www.brix.so/learn/quickbooks-classes-vs-projects).
5. **Review the job when it closes.** Compare estimated vs. actual for each bucket. Write down one thing to change in the next estimate.
6. **Look at patterns monthly.** Which job types, crews or salespeople run over? That's where pricing or process needs to change.

Long jobs that span months need more than a close-out review. A [work in progress report](https://www.brix.so/learn/wip-report) tracks cost to date against percent complete so overruns show up while there's still time to act.

## Job costing vs. estimating

Estimating predicts what a job will cost before you do it; job costing records what it actually cost after. They're two halves of one loop. Without job costing, your estimates never get better, because you never learn which assumptions were wrong. Without good estimates, job costing has nothing to compare against.

## Common job costing mistakes

- **Using wages instead of burdened labor.** A $30 an hour tech can cost $40 or more an hour once payroll taxes, workers' comp and benefits are in.
- **Leaving drive time and shop time out.** If it's paid and it's for the job, it's job cost.
- **Untagged truck stock.** Parts pulled off the truck vanish from job cost unless techs record them.
- **Not writing change orders.** Extra work without a signed change order shows up as an overrun instead of extra revenue.
- **Reviewing only at year-end.** A pattern of overruns caught in month two saves the next ten jobs.
- **Blaming the crew for estimate errors.** Variance tells you where to look; separate a bad takeoff from a slow job before you act.

BRIX tracks crew clock-ins and job hours, keeps materials and expenses categorized, and ties each quote, job and invoice to one customer record that syncs with QuickBooks, so estimated and actual costs live in the same place.

- [Crew timesheets](https://www.brix.so/#use-cases): Clock-ins, job hours and payroll-ready timesheets.
- [Bookkeeping and tax help](https://www.brix.so/features/bookkeeping-taxes): Keeps expenses categorized, tracks 1099 subcontractors and sales tax, and reminds you of quarterly estimated tax dates. BRIX does not file taxes or give tax advice.
- [QuickBooks sync](https://www.brix.so/integrations/quickbooks): Syncs customers, invoices and payments with QuickBooks so the books match the jobs.
- [CRM](https://www.brix.so/features/crm): One record for every customer, lead, call, job, quote and invoice.

## Frequently asked questions

### What is job costing in simple terms?

Job costing means adding up everything a specific job actually cost you (materials, labor hours, subs, rentals and permits) and comparing it with what you estimated and what you billed. It tells you which jobs made money, which lost money, and why.

### Is job costing worth it for a small contractor?

Yes, especially for small contractors, because one underpriced job type can wipe out a month's profit. Basic job costing only needs hours and receipts tagged by job and a short review when each job closes. It's how estimates get more accurate over time.

### What's the difference between job costing and process costing?

Job costing tracks costs for each unique job, which fits contractors because every roof, repair and install is different. Process costing averages costs across many identical units, which fits factories making the same product all day.

### Should overhead be included in job costing?

It's optional. Start by tracking direct costs to see gross profit per job. Once that's reliable, you can allocate overhead with a rate per labor hour or per job to estimate net profit per job, but keep the allocation method simple and consistent.

### How do you track labor hours by job?

Have techs clock in and out of each job, including drive time, on a phone app or a daily timesheet. Multiply each tech's hours by their burdened hourly cost. Daily entry matters: hours reconstructed on Friday are usually wrong.

### Can I do job costing in QuickBooks?

Yes. QuickBooks lets you assign income and expenses to customers or projects, and some versions add classes or project profitability reports. Labor needs payroll or time entries assigned to the job. See the step-by-step guide on how to do job costing in QuickBooks.

### How often should I review job costs?

Review each job when it closes, and review patterns across job types once a month. For long jobs, check cost to date against percent complete every week or two so overruns are caught while you can still fix them.

## Related

- [How to Do Job Costing in QuickBooks Online](https://www.brix.so/learn/how-to-do-job-costing-in-quickbooks)
- [What Is Gross Margin?](https://www.brix.so/learn/gross-margin)
- [What Is Labor Burden?](https://www.brix.so/learn/labor-burden)
- [What Is a WIP Report (Work-in-Progress Schedule)?](https://www.brix.so/learn/wip-report)
- [What Is a Change Order?](https://www.brix.so/learn/change-order)
- [What Is Gross Profit per Hour?](https://www.brix.so/learn/gross-profit-per-hour)
- [Job Costing Calculator](https://www.brix.so/tools/job-costing-calculator)
- [Job Costing Spreadsheet Template](https://www.brix.so/templates/job-costing-spreadsheet)
- [Bookkeeping for contractors that keeps your books tax-ready all year](https://www.brix.so/features/bookkeeping-taxes)
- [QuickBooks for contractors: the right version, real job costing and a sync that keeps the books matched to the jobs](https://www.brix.so/integrations/quickbooks)

---
Written by BRIX Editorial Team. Last updated 2026-10-12.
Canonical: https://www.brix.so/learn/job-costing
