In This Guide
- What Is Job Costing for Roofing Contractors?
- Why Job Costing Changes Your Business
- Which QuickBooks Plan You Need
- Setting Up Your Chart of Accounts
- Enabling and Using the Projects Feature
- Step-by-Step: Recording a Job in QuickBooks
- Job Costing Reports to Run Monthly
- What Are Healthy Profit Margins for Roofing?
- 3 Job Costing Mistakes That Kill Your Data
What Is Job Costing for Roofing Contractors?
Job costing is the process of tracking all revenue and expenses for each individual roofing job — so you can calculate the actual profit or loss on every project you complete.
Instead of seeing "we made $60,000 in March," you see:
| Job | Revenue | Job Costs | Gross Profit | Margin |
|---|---|---|---|---|
| Henderson Re-Roof | $18,500 | $10,200 | $8,300 | 45% |
| Smith Storm Claim | $22,000 | $9,800 | $12,200 | 55% |
| Downtown Commercial | $41,000 | $31,200 | $9,800 | 24% |
| Taylor Repair | $3,200 | $2,900 | $300 | 9% |
Now you can see the commercial job is dragging down your margin and small repairs are barely worth doing. That's the information that changes how you bid and what work you take.
Why Job Costing Changes Your Business
Most roofing contractors price jobs based on gut feeling, past experience, or square footage estimates. Job costing gives you actual cost data to validate or correct those instincts.
With job costing data, you can answer:
- Which job types (residential, commercial, restoration) have the best margins?
- Which crews are running over budget on materials or labor?
- Are your material estimates consistently under by 10–15%?
- Is a specific type of job (flat roofs, TPO, tile) costing more than you bid?
- Are small repairs actually profitable at your current pricing?
Real outcome: One roofing contractor we work with discovered their commercial jobs averaged 21% gross margin — well below residential at 44%. They raised commercial pricing by 18% on new bids and declined low-margin commercial jobs. Revenue dropped slightly but profit increased $140,000 in the first year.
Which QuickBooks Plan You Need for Job Costing
Job costing in QuickBooks Online requires the Projects feature. Projects is only available in QuickBooks Online Plus and Advanced.
| Plan | Price | Projects (Job Costing) | Verdict |
|---|---|---|---|
| Simple Start | ~$30/mo | ❌ No | Not for roofing |
| Essentials | ~$55/mo | ❌ No | Not for roofing |
| Plus | ~$90/mo | ✅ Yes | Most roofing companies |
| Advanced | ~$200/mo | ✅ Yes + custom reports | Multi-crew, $3M+ revenue |
If you're on Simple Start or Essentials, you'll need to upgrade to Plus. Contact QuickBooks support or your bookkeeper to upgrade without losing data.
Setting Up Your Chart of Accounts for Roofing
The chart of accounts is the list of all the categories your transactions are recorded under. Most default QuickBooks charts of accounts are built for retail or service businesses — they're not set up for construction job costing.
Here's the chart of accounts structure we set up for roofing companies at JobCostBooks:
Income Accounts
- Roofing Revenue — Residential
- Roofing Revenue — Commercial
- Restoration Revenue — Storm/Insurance
- Service & Repair Revenue
- Retainage Revenue (separate — only recognized when released)
Cost of Goods Sold (Direct Job Costs)
- Materials — Shingles & Roofing
- Materials — Underlayment & Accessories
- Materials — Gutters & Sheet Metal
- Labor — Direct Crew Wages
- Subcontractor Labor
- Equipment Rental
- Permits & Inspections
- Dumpster & Disposal
Operating Expenses (Overhead — Not Job Costs)
- Vehicle Expenses (fuel, maintenance, insurance)
- Business Insurance (GL, workers comp, commercial auto)
- Tools & Small Equipment (<$2,500)
- Office & Administrative
- Marketing & Advertising
- Software (QuickBooks, Jobber, etc.)
- Owner's Salary / Officer Compensation
Key distinction: Job costs (COGS) are costs that exist because of a specific job. Overhead expenses exist regardless of jobs. Separating these correctly gives you accurate gross margin per job AND accurate overhead cost tracking. Getting this wrong is the single biggest bookkeeping mistake roofing contractors make.
Enabling and Using the Projects Feature in QuickBooks Online
Step 1: Enable Projects
- Click the gear icon (Settings) in the top right
- Select "Account and Settings"
- Click "Advanced" in the left menu
- Find "Projects" and toggle it on
- Click Save
Step 2: Create a Project for Each Job
- Go to the "Projects" tab in the left sidebar
- Click "New Project"
- Name it clearly (e.g., "Henderson - 142 Oak St Re-Roof - Jun 2026")
- Link it to the customer
- Add start date and expected end date
- Enter your estimated revenue and costs (optional but useful)
Step 3: Assign Transactions to Projects
Every transaction related to a job must be assigned to that project:
- Invoices: Select the project from the "Project" dropdown when creating an invoice
- Bills (supplier invoices): Select the project on each line item
- Expenses: Select the project when entering the expense
- Payroll (if applicable): Allocate hours per job using time tracking
If a transaction isn't assigned to a project, it won't appear in your job cost reports. This is the most common error — consistency in assigning every transaction is critical.
Step-by-Step: Recording a Complete Job in QuickBooks
Here's how to record a typical roofing job from start to finish:
1. Create the Project
As soon as you sign the contract, create the project in QuickBooks. 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 amount, linked to the project. If retainage applies (commercial jobs), create a line item for the contract total and a negative line item for the retainage amount. The net is what the customer owes now.
3. Record Materials Purchases
When you buy materials at the supply house, enter the bill in QuickBooks immediately. Assign it to the correct project. Split the bill if materials were bought for multiple jobs.
4. Record Subcontractor Costs
When you pay a subcontractor, record the bill or expense and assign it to the project. If the subcontractor works on multiple jobs in the same payment, split it proportionally.
5. Record Labor Costs
If your crew is on payroll, use QuickBooks Time (or manual time entries) to allocate hours to each project. This moves labor cost from overhead into job costs for that project.
6. Invoice Completions and Retainage Releases
On job completion, invoice the final amount. If retainage was withheld, create a separate retainage invoice using the Retainage Revenue account.
7. Close the Project
Once fully invoiced and paid, mark the project as complete. Run the Project Profitability report and record the final margin.
Job Costing Reports to Run Monthly
Project Profitability Report
Go to Reports → search "Project Profitability." This shows revenue, job costs, and gross profit for every project. Run it at month-end for all jobs active in the month.
What to look for:
- Any job with gross margin below 30% — investigate why
- Any job where actual costs exceeded estimated costs — was it materials, labor, or subs?
- Year-to-date margin by job type (residential vs. commercial vs. restoration)
Unbilled Costs by Project
Shows costs recorded for a project that have not yet been invoiced. Useful for catching jobs where work was done and costs entered but no invoice was sent.
Open Projects Summary
Lists all active projects with their current revenue, costs, and estimated vs. actual comparison. Alerts you to jobs that are running over budget before they're complete.
What Are Healthy Profit Margins for Roofing?
Gross margin is revenue minus direct job costs, divided by revenue. It does not include overhead.
| Job Type | Target Gross Margin | Below This — Investigate |
|---|---|---|
| Residential Re-Roof | 35–50% | Below 28% |
| Storm Restoration / Insurance | 40–55% | Below 32% |
| Commercial Roofing | 20–35% | Below 18% |
| Service & Repair | 45–65% | Below 35% |
| New Construction | 15–25% | Below 12% |
Net profit margin (after overhead) for a well-run roofing company should be 10–20%. If your net margin is below 8%, either your job margins are too low or your overhead is too high — job cost data tells you which.
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. Review unassigned transactions weekly.
Mistake 2: Using the Wrong Cost Categories
Recording subcontractor payments as overhead expenses instead of job costs. This inflates overhead and understates job costs — making jobs look more profitable than they are. Subcontractors always go to COGS, always assigned to a project.
Mistake 3: Lumping All Materials into One Account
Using a single "Materials" account for everything. You lose visibility into which material types (shingles, underlayment, flashing, gutters) are running over budget. Break materials into 3–4 subcategories for meaningful data.
We Set This Up For You — Correctly, in 1–2 Weeks
Setting up proper job costing in QuickBooks takes time and construction accounting knowledge to do right. We do it every day, exclusively for roofing and restoration contractors. Book a free 15-minute assessment to see what your current setup is missing.
Book My Free Assessment →About JobCostBooks
JobCostBooks is a specialized bookkeeping service for US roofing, restoration, and real estate companies. We set up and maintain QuickBooks Online with full job costing, retainage tracking, and monthly reporting — starting at $600/month, delivered remotely from India.