Most roofing estimates carry one permit line, usually a flat number copied from the last job. The city then charges by project valuation, the inspector shows up on Thursday instead of Tuesday, and your crew stands around for two hours. None of that lands on the job report, so the next estimate repeats the same mistake.
Worked Example: A $13,200 Reroof
All figures are illustrative. You estimate a 28-square reroof at $13,200 with a flat $300 permit line. Here is what the job actually carries:
| Line | Estimated | Actual |
|---|---|---|
| Permit fee | $300 | $425 |
| Re-inspection fee | $0 | $90 |
| Office time (3 hrs at $35 burdened) | $0 | $105 |
| Crew standby (4 people, 2 hrs at $30 burdened) | $0 | $240 |
| Total | $300 | $860 |
The gap is $560, or 4.2 points of margin on a $13,200 job. If a similar gap shows up on 120 jobs a year, that is $67,200 of profit that never appears on a job report. Your estimate was not wrong because of one bad job. It was wrong by design.
Recording It in QuickBooks
- Create a Permits and Inspections account under cost of goods sold, not general office expense.
- Assign every payment to the job. City portal charges, re-inspection fees and permit runner invoices each get the customer or project tag at entry.
- Log standby and office hours on the job. A simple time-entry code for permit work keeps labor out of unassigned payroll.
- Reimbursed fees stay visible. If a contract bills the permit separately, record the billed amount as revenue and the fee as cost on the same job so the two net out in the job report.
Fixing the Estimate
Once ten or more closed jobs carry permit costs, compare estimated to actual by municipality. Most contractors find two or three jurisdictions that account for most of the overrun. Set a separate permit default for each, built from the fee schedule plus average re-inspection and hours, not one flat number.
Then track one operating number: first-pass inspection rate. Every failed inspection is a measurable cost, and the crew leads who fix their punch lists before calling for inspection will show it in the data. For the margin math behind the numbers, see markup vs margin, and for the same estimated-versus-actual method applied to another line, read tear-off and disposal costs.