Roofing job costing in QuickBooks: a per-job setup guide

Roofing job costing means recording every cost against the roof it belongs to (materials, labor or sub pay, dump fees, permit, commission) and comparing the actual total with what you estimated. Gross margin per job is the job's price minus those direct costs, divided by the price. In QuickBooks you do it by making each job a project or sub-customer, coding every bill and expense to that job, and using a short, consistent list of cost items. Alvin matches supplier invoices and receipts to jobs and flags the ones that are over estimate.
On this page
- What to track on every roofing job
- Estimated vs actual: the comparison that matters
- How to set up job costing in QuickBooks, conceptually
- Worked example: gross margin on one job
- Overhead allocation and what a job really earned
- Keeping the numbers current
- What Alvin handles and what stays with you
- Questions
What to track on every roofing job
Scroll sideways to see every column.
| Cost | Where the number comes from | Common leak |
|---|---|---|
| Materials | Supplier invoices, delivery tickets, credit memos for returns | One invoice covering two jobs; returns never credited to the job |
| Labor or sub pay | Sub invoice per square, or crew hours times loaded wage | Extra pay for steep, tear-off layers or decking not recorded |
| Dump fees | Dumpster or landfill receipt | Paid on a card and coded to a general expense |
| Permit | City receipt | Paid months earlier, never tied to the job |
| Commission | Your commission sheet | Paid in a payroll batch with no job attached |
| Overhead allocation | A rate you set, applied to each job | Left out, so every job looks better than it is |
Decide once whether commission sits above or below your gross margin line. Shops do it both ways. What matters is that every job is measured the same way, so the numbers compare.

Estimated vs actual: the comparison that matters
Job costing is only useful with a budget beside it. For each job, keep the estimated cost by category from the day it was sold, then set the actual next to it when the job closes. The difference by category tells you what to fix:
- Materials over: waste factor too low, a second delivery, a price increase since the estimate, or returns not credited.
- Labor over: pitch or layers misjudged, decking replaced beyond the allowance and not billed.
- Dump over: a second layer nobody saw, or weight overage.
- Revenue under: a change order done but not invoiced, or a supplement approved but not added to the final invoice.
The estimate side needs a clean line item list. See the roofing estimate template.
How to set up job costing in QuickBooks, conceptually
The steps below describe the structure, not the clicks. QuickBooks plans differ in which features they include (projects and classes are not in every plan), and menus change, so check Intuit's current documentation or ask your bookkeeper for the exact screens.
- Make every job its own project or sub-customer. The homeowner is the customer; the roof is the job under them. Use the same job name or number your CRM uses, so the two systems line up.
- Build a short list of items. Products and services such as Roofing materials, Roofing labor, Dump fees, Permit, Commission. Map each to the right income and cost of goods sold accounts. Six to ten items is enough.
- Code every bill and expense to a job. When a supplier bill, sub invoice or card charge is entered, assign the customer or project on each line. This is the habit the whole system depends on.
- Get labor onto the job. Sub crews are simple: one bill per job. For hourly crews, record hours by job and apply a loaded hourly cost that includes payroll taxes and workers' comp.
- Use classes for the bigger split. Classes work well for the type of work: retail re-roof, insurance, repair, commercial. Then you can see margin by line of business as well as by job.
- Enter the estimate as the budget. Keep the estimated cost by item on the job so reports can show estimate vs actual.
- Review profitability by job when each one closes, and again monthly for everything still open.
This article is general information, not tax or accounting advice. How costs are classified, how overhead is allocated and how workers are paid have tax and legal consequences. Work with your accountant on the setup.
Worked example: gross margin on one job
The Patel re-roof sold for $15,000. Every number here is an example.
Scroll sideways to see every column.
| Category | Estimated | Actual | Difference |
|---|---|---|---|
| Materials | $5,400 | $5,950 | $550 over |
| Labor (sub crew) | $3,600 | $3,900 | $300 over |
| Dump fees | $450 | $520 | $70 over |
| Permit | $250 | $250 | $0 |
| Commission (8% of price) | $1,200 | $1,200 | $0 |
| Total direct cost | $10,900 | $11,820 | $920 over |
| Gross profit | $4,100 | $3,180 | |
| Gross margin | 27.3% | 21.2% |
Gross margin is gross profit divided by price: $3,180 divided by $15,000 is 21.2%. The job was sold at 27.3% and finished six points lower.
The detail explains why. The crew replaced seven sheets of decking against an allowance of three. The extra four sheets meant more material, a second delivery, more sub pay and a heavier dumpster. The contract priced extra decking at $85 a sheet, so $340 should have been billed as a change order and was not. Billing it would have brought revenue to $15,340 and gross profit to $3,520.
Overhead allocation and what a job really earned
Gross margin ignores the office, trucks, insurance, software and marketing. To see what a job contributes after those, apply an overhead rate. A simple method: divide last year's overhead by last year's revenue and apply that percentage to each job.
For example, if overhead ran 12% of revenue, the Patel job carries $1,800 of overhead. Actual gross profit of $3,180 minus $1,800 leaves $1,380, or 9.2% of the price. Other shops allocate by crew day or by square. Pick one method with your accountant and apply it to every job.
Keeping the numbers current
Most job costing fails on data entry. The supplier invoice has a PO number but no job name, the dump receipt is in a truck, and the bookkeeper parks what is unclear in a general account.
- Put the job name or number on every purchase order, so the supplier invoice carries it back. See roofing material orders.
- Have crew leads forward receipts the same day.
- Close each job with a checklist: all bills in, change orders invoiced, returns credited.
What Alvin handles and what stays with you
| Alvin does | You do |
|---|---|
| Reads forwarded supplier invoices and receipts and matches each to a job by PO, address or customer | Decide the chart of accounts, items and classes with your accountant |
| Prepares the bill or expense in QuickBooks coded to the job, for the bookkeeper to review | Approve entries and resolve anything Alvin could not match |
| Compares actual cost with the estimate and flags jobs running over, by category | Decide what to do: bill a change order, talk to the sub, fix the price sheet |
| Lists jobs with unbilled change orders or missing bills before close-out | Set overhead rates and commission rules |
| Keeps a receipt of every entry: who asked, who approved, what changed | Tax filings, payroll and accounting judgment |
To check one job quickly, use the free job profit calculator.
Frequently asked questions
What is job costing in roofing?
Job costing in roofing is recording the income and every direct cost of each roof separately: materials, labor or sub pay, dump fees, permit and commission. Comparing those actual costs with the estimate shows the profit on each job and where estimates are off.
How do I set up job costing in QuickBooks for a roofing company?
Create each job as a project or sub-customer under the homeowner, use a short list of items for materials, labor, dump, permit and commission, and assign every bill and expense line to its job. Classes can separate retail, insurance and repair work. Feature availability depends on your QuickBooks plan, so confirm with Intuit or your bookkeeper.
How do you calculate gross margin on a roofing job?
Subtract the job's direct costs from its price to get gross profit, then divide gross profit by the price. For example, a $15,000 job with $11,820 of direct costs has a gross profit of $3,180 and a gross margin of 21.2%.
What is a good gross margin for a roofing job?
It depends on your market, your mix of retail and insurance work, and what you count as a direct cost, so one shop's target does not transfer to another. Set your own target from your overhead and the profit you need, then measure every job the same way against it.
Should sales commission be included in job cost?
Many roofing companies include commission as a direct job cost because it is paid per job. Others show it below gross margin as a selling expense. Either is workable if you apply it consistently; ask your accountant which fits your books.
Know the margin on a roof before the next one starts.
Forward supplier invoices and receipts to Alvin. Alvin codes them to the job in QuickBooks for review and flags jobs running over estimate.