Job costing in QuickBooks means tracking every dollar of revenue and cost against each individual roofing job — so you see profit per job, not just total company profit. Without it, you're running blind: busy months can hide losing jobs, and you have no data to improve your bidding. Setting it up in QuickBooks Online takes about 30 minutes. Here's exactly how.

Why Does Job Costing Matter for Roofing Contractors?

Job costing matters because total company profit tells you almost nothing useful. A roofing contractor doing $2M in revenue might show a 28% gross margin overall — but that average hides the fact that residential re-roofs run 42% margin while storm restoration jobs run 18%. Without job costing, you keep bidding both at the same rate and wonder why margins don't improve.

With QuickBooks job costing, you get a Project Profitability report every month showing revenue, direct costs, and gross margin for every completed job. That's the data that changes how you bid, which jobs you take, and which crew or subcontractor arrangements actually work.

⚠ Without job costing: You know if last month was profitable. With job costing: you know which of last month's 14 jobs made money and which three lost it — and you can fix the pricing before you bid the next one.

Step 1: Enable QuickBooks Projects (Job Costing)

QuickBooks Online Plus and Advanced include the Projects feature — the engine behind job costing. It is turned off by default. To enable it:

  1. Click the gear icon (Settings) in the top right
  2. Go to Account and Settings → Advanced
  3. Find the Projects section
  4. Toggle Organize all job-related activity in one place to ON
  5. Click Save

After enabling, a "Projects" option appears in the left navigation. This is where all your job costing lives.

PlanPriceProjects (Job Costing)Verdict
Simple Start~$30/mo❌ NoNot for roofing
Essentials~$55/mo❌ NoNot for roofing
Plus~$90/mo✅ YesMost roofing companies
Advanced~$200/mo✅ Yes + custom reportsMulti-crew, $3M+ revenue
💡 QBO plan check: Projects is only available on QuickBooks Online Plus ($90/mo) and Advanced ($200/mo). If you're on Simple Start or Essentials, you'll need to upgrade before proceeding — contact QuickBooks support or your bookkeeper to upgrade without losing data.

Step 2: Build a Roofing-Specific Chart of Accounts

The default QuickBooks chart of accounts is built for a generic small business. For roofing job costing to produce useful data, you need accounts that match how a roofing company actually spends money. Add these accounts if they don't exist:

Account NameTypeDetail Type
Materials — ShinglesCost of Goods SoldSupplies & Materials
Materials — Underlayment & AccessoriesCost of Goods SoldSupplies & Materials
Materials — Flashing & MetalCost of Goods SoldSupplies & Materials
Subcontractor LaborCost of Goods SoldSubcontractors
Employee Labor — FieldCost of Goods SoldLabor & Materials
Permits & DisposalCost of Goods SoldOther Costs of Services
Equipment RentalCost of Goods SoldEquipment Rental
Retainage ReceivableOther Current AssetOther Current Assets

Do not delete existing accounts — add new ones and reclassify transactions going forward. Deleting accounts with transaction history breaks your historical reports.

Step 3: Create a Project for Every Active Job

In QuickBooks, go to Projects → New Project. Name it with the job address and customer name (e.g., "44 Maple St — Henderson"). Link it to the customer. Do this for every active job before entering any more transactions.

For historical jobs already in progress, create the project and assign open bills and invoices retroactively — this restores job costing visibility on active work even if setup is happening mid-project.

Step 4: Assign Every Transaction to Its Project

This is the most important ongoing habit. Every time you enter a transaction in QuickBooks, it must be assigned to the correct Project:

  • Invoices: When creating an invoice, select the Project in the Customer field
  • Bills (subcontractors, suppliers): In the bill, assign each line item to the correct Project using the Customer/Project column
  • Expenses: When recording a job-related expense or credit card purchase, tag it to the Project
  • Payroll: If using QuickBooks Payroll, assign field crew hours to Projects when running payroll
⚠ One missed transaction breaks the report: If a $4,000 materials purchase isn't assigned to its Project, that job's cost is understated by $4,000 and appears more profitable than it really is. Make Project assignment a non-negotiable step when entering every bill and expense.

Step 5: Run the Project Profitability Report

At the end of every month, run this report: Reports → search "Project Profitability". It shows every project with total income, total costs, and gross profit. Sort by gross margin % to immediately see which jobs performed best and worst.

ColumnWhat It ShowsWhat to Look For
IncomeTotal invoiced for the jobMatches your contract + change orders
Cost of Goods SoldAll direct job costsMaterials + labor + subs + permits
Gross ProfitIncome minus COGSShould be 35–50% of income
Gross Margin %Profit as % of revenueFlag any job below 25%

For a deeper walkthrough of what these numbers mean and how to act on them, see our guide on the roofing company P&L report.

Unbilled Costs by Project

Shows costs recorded for a project that haven't yet been invoiced. Useful for catching jobs where work was done and costs entered but no invoice was sent — a common way cash quietly leaks out of a busy schedule.

Open Projects Summary

Lists all active projects with current revenue, costs, and estimated vs. actual comparison. Flags jobs running over budget before they're complete, while there's still time to act.

Recording a Complete Job, Start to Finish

Once setup is done, here's how a typical job flows through QuickBooks from signed contract to closed file:

  1. Create the Project — As soon as you sign the contract, create the project. Name it with the customer name, address, and job type. Add the contract amount as estimated revenue.
  2. Send the deposit invoice — Create an invoice for the deposit, linked to the project. If retainage applies, add a line for the contract total and a negative line for the retainage amount.
  3. Record materials purchases — Enter supply house bills immediately and assign them to the correct project. Split the bill if materials were bought for multiple jobs.
  4. Record subcontractor costs — Assign every sub bill or expense to the project. If a sub worked multiple jobs in one payment, split it proportionally.
  5. Record labor costs — If your crew is on payroll, allocate hours to each project so labor moves from overhead into job cost.
  6. Invoice completion and retainage release — On completion, invoice the final amount. If retainage was withheld, invoice it separately using the Retainage Revenue account.
  7. Close the project — Once fully invoiced and paid, mark the project complete and record the final margin from the Project Profitability report.

What Should Your Job Margins Look Like?

Job TypeTarget Gross MarginBelow This = Problem
Residential re-roof (retail)38–50%Below 28%
Insurance restoration30–45%Below 22%
Commercial flat roof25–38%Below 18%
Repair / service call50–65%Below 40%

If your margins are consistently below these benchmarks, job costing data will show you exactly where the costs are running over — materials, subcontractor rates, or labor inefficiency — so you can fix the specific problem rather than guessing.

Want job costing set up and managed monthly without doing it yourself? See how JobCostBooks handles this for roofing contractors →

3 Job Costing Mistakes That Kill Your Data

Mistake 1: Not Assigning Every Transaction to a Project

The most common mistake. If 20% of your material bills aren't assigned to projects, your job profitability reports are wrong. Establish a rule: nothing gets recorded without a project assignment, and review unassigned transactions weekly.

Mistake 2: Using the Wrong Cost Categories

Recording subcontractor payments as overhead instead of job costs inflates overhead and understates job costs — making jobs look more profitable than they are. Subcontractors always go to COGS, always assigned to a project. See our full guide on tracking subcontractor costs correctly in QuickBooks.

Mistake 3: Lumping All Materials into One Account

Using a single "Materials" account for everything hides which material types — shingles, underlayment, flashing, gutters — are running over budget. Break materials into 3–4 subcategories for meaningful data.