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.

💡 QBO plan check: Projects is only available on QuickBooks Online Plus ($90/mo) and Advanced ($200/mo). If you don't see the Projects setting, you're on Simple Start or Essentials — you'll need to upgrade before proceeding.

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.

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 →