Roofing Bookkeeping: What to Track and Why
You finished a 28-square reroof last month that quoted out at $24,000 and felt like one of your best jobs of the year. The crew was fast, the customer paid on time, and you were home before dark every night that week. So why does your bank account feel just as tight today as it did before the job started?
This is the part of running a roofing business that no one teaches you. You can hang shingles in your sleep, you can call out a hail bruise from the ground, you can manage a three-man crew and a supplier delivery on the same morning. What you probably did not sign up for was sitting at the kitchen table at 9 PM trying to figure out why a job that looked profitable on paper barely covered payroll.
The problem is almost always the books. Most roofing contractors are running with bookkeeping that was never set up for the way a roofing business actually operates. Material waste is invisible, labor is not tracked by job, insurance work and retail work are blended together, and overhead from the truck and the office is buried in operating expenses where it cannot be allocated back to the jobs that should have absorbed it. The result is a P&L that technically balances but cannot tell you which jobs made money and which ones bled.
This post covers what bookkeeping for a roofing contractor should actually look like. We will walk through job costing for tear-offs and new installs, how to handle insurance versus retail work, how to track material waste, and the financial patterns that show up in roofing businesses that are running well.
Why roofing bookkeeping is different
Roofing is one of the trickier trades to keep books for cleanly, and it comes down to a few realities that other contractor trades do not have to deal with the same way.
The first is material waste. A shingle bundle covers a known square footage on paper, but real-world roofs have valleys, hips, ridges, dormers, and pitch changes that drive waste up. A 25-square roof might consume 27 squares of material once cuts and waste are accounted for. If your books are not tracking material against jobs at the unit level, you have no way to see which jobs ran clean and which ones ate through your margin in dumpster scrap.
The second is the split between insurance and retail work. Insurance jobs operate on a different revenue cycle than retail jobs. ACV checks come first, then supplements, then depreciation release after work is verified. Retail jobs are typically deposit, progress, and final payment. The two should never be mixed in the same revenue line on a P&L because they have different timing, different margin profiles, and different cash flow implications. Most contractors blend them.
The third is crew labor allocation. Roofing crews almost always work multiple jobs in the same week, sometimes the same day. Without time tracking by job, your payroll just lands as one big number on the P&L and your job costing reports show every job equally subsidizing or absorbing labor. That is not how the actual cost flows, and it makes it impossible to see which job types or crew leads are most profitable.
The fourth is seasonality and storm work. Most roofing businesses have a busy season that is dramatically different from their slow season, and storm events can produce six-figure revenue spikes followed by months of slower work. Bookkeeping needs to account for this without making slow months look like the business is failing.
Job costing for roofing
Every roofing job needs a job folder in QuickBooks (or whatever software you use) that captures four buckets of cost: material, labor, equipment and dumpster, and subcontractor.
Material includes shingles, underlayment, drip edge, ridge cap, ice and water shield, nails, ridge vent, pipe boots, valley metal, and anything else that goes on the roof. Material gets tagged to the job at the time of purchase or at the time it leaves your warehouse if you stock material in advance. Most contractors miss this by buying material on a credit card and never linking the purchase back to a specific job in the books.
Labor includes the crew hours actually worked on that roof. This requires time tracking by job, not just by week. If you are not running QuickBooks Time, ClockShark, Busybusy, or another field-friendly time tracker, your labor numbers are guesses. Crew burdened cost, including payroll taxes and workers comp, runs roughly 1.25 to 1.4 times base wages depending on your state. Florida workers comp for roofing is high, so most Treasure Coast roofing contractors land near the upper end of that range.
Equipment and dumpster includes the dumpster pull, fuel, equipment rental if you brought in a lift or boom, and any saw or tool consumables specific to that job. Dumpster cost is the most commonly missed item because the bill comes from the dumpster company a week later and gets categorized as a generic expense instead of being tagged to the job.
Subcontractor cost covers anything you sub out. Plywood replacement crews, gutter installers, skylight specialists, anything where you pay a 1099 contractor for work on a specific roof. This needs to be tagged to the job, not just expensed against your overall subcontractor account.
When all four buckets are tagged to the job, you can run a job profitability report at the end of the engagement and see exactly what the gross margin was. The number that matters is gross margin per square. A 30-square roof that earned $8,400 in gross margin produced $280 per square. That number is benchmarkable across your jobs over time and tells you which job types, customer types, and crew leads are most profitable.
Insurance versus retail work
Insurance jobs and retail jobs need separate revenue lines on your P&L. They behave too differently to mix.
Insurance work runs on the carrier's cycle. The homeowner files a claim, an adjuster comes out, you produce an estimate or supplement, the carrier issues an ACV check at the start, and depreciation gets released after the work is completed and inspected. There is often a supplement process where you submit additional charges for items the original adjuster missed, and that supplement may take weeks or months to settle. Cash flow on insurance work is uneven by design.
Retail work runs on whatever payment terms you set. Most roofing contractors take a deposit, an interim payment when material is delivered or work is roughly half complete, and a final payment at completion. The cash flow is more predictable but the margins are usually different. Retail customers often shop multiple bids, so retail margins tend to be lower than insurance margins on comparable scope.
In your QuickBooks chart of accounts, this means two separate income lines: "Roofing Revenue – Insurance" and "Roofing Revenue – Retail." Tag every invoice to the right line. Over time, this gives you a clear picture of your revenue mix, your margin by work type, and your cash flow patterns by season.
Material tracking and waste
Material is the largest variable cost on most roofing jobs, which means it is also the largest source of margin leak when it is not tracked carefully.
The cleanest approach is to bill material to specific jobs at the supplier level. ABC Supply, Beacon, SRS, and most major suppliers can tag invoices by job number if you give them the job number at order time. Those tagged invoices flow into QuickBooks as job-specific material costs without you having to manually categorize each line.
If you stock material in advance instead of ordering per job, you need a slightly different system. The cost flows through inventory or a "Material on Hand" asset account when it is purchased and gets transferred to the job when it is dispatched. This is more bookkeeping work but it produces the same end result, which is material tagged accurately to the job that consumed it.
Waste is the next layer. A clean job runs at 8 to 12 percent waste depending on roof complexity. A messy job can run 18 to 25 percent. If your job costing is set up cleanly, waste shows up as the gap between estimated material and actual material consumed. Tracking this number over time tells you which estimators are bidding tight, which crew leads are running clean, and which job types consistently eat more material than expected.
Crew labor and the burden you might be missing
Roofing labor is expensive and getting more so. Florida workers comp rates for roofing are among the highest in the country, which means the burden on top of base wages is significant. A roofer earning $25 per hour costs you closer to $34 to $36 per hour once you add payroll taxes, workers comp, and any benefits.
Most roofing contractors underestimate this and end up with job costs that look better than they actually are. The fix is simple: in your job costing, charge labor at the burdened rate, not the base wage. Either build the burdened rate into your time tracking software, or apply a standard burden multiplier when you pull labor cost into job profitability reports.
Crew lead pay also needs to be handled correctly. If your crew leads are salaried or paid a flat day rate that does not vary by hours, their cost still needs to be allocated across the jobs they ran that week. Otherwise their pay sits in the salary line on your P&L and the jobs they actually worked look more profitable than they really were.
Cash flow patterns in a healthy roofing business
Roofing is seasonal, storm-driven, and capital-intensive. A healthy roofing business has a few financial patterns worth measuring against.
Gross margin on a typical retail reroof should land between 25 and 40 percent depending on your market and material mix. Insurance work often runs higher because the pricing is built off a different baseline. Anything below 20 percent gross margin on retail work means either your pricing is too low or your job costs are running heavier than your estimates.
Material as a percentage of revenue typically lands between 35 and 50 percent on a residential reroof. Higher than that suggests waste, theft, or pricing issues. Lower than that may mean you are billing too much per square or running unusually efficient jobs.
Labor as a percentage of revenue typically lands between 15 and 25 percent on residential work. Florida is on the higher end because of workers comp.
Cash on hand should cover at least one full payroll cycle and one big material order at peak season. Roofing payroll is heavy and material orders can be five-figure events. Running cash too tight is the most common reason otherwise-profitable roofing businesses fail.
Common bookkeeping mistakes roofing contractors make
A few patterns show up over and over in roofing businesses that have weak books.
The first is mixing personal and business expenses. Groceries on the business card, the family dinner that gets expensed because the business came up at the table, personal Amazon orders mixed in with shingle and underlayment purchases. All of it gets run through the same card and never gets cleanly separated. This makes job costing impossible and creates tax problems at year end.
The second is not tracking dumpster and disposal costs to the job. Dumpster bills come a week or two after the pull, get categorized to a generic disposal expense, and never make it back to the job. On a 30-square reroof, dumpster is $400 to $700. That is real margin getting hidden.
The third is treating insurance and retail revenue as one line. We covered this above but it is worth repeating because it is the single biggest cause of roofing owners not understanding their own revenue mix.
The fourth is not allocating overhead. Truck payments, insurance, office rent, software, the bookkeeper's fee, all of that is overhead that has to be supported by gross margin from the jobs. If your job costing only captures direct cost, your jobs will look more profitable than they actually are because overhead is invisible. The fix is to know your overhead burn rate per month and price your jobs to cover it.
What to look for in a bookkeeper for your roofing business
If you are going to outsource your bookkeeping, the right kind of bookkeeper for a roofing business will know the trade specifics. They will know that ABC and Beacon can tag invoices by job. They will know that workers comp burden in Florida is unusually high. They will know that insurance and retail work need separate revenue lines. They will ask whether you do storm work and how that affects your monthly volume.
The wrong kind of bookkeeper will categorize transactions into a generic chart of accounts, hand you a P&L every month with one revenue line and one materials line, and never mention job costing because they do not know how to set it up. You will pay them every month and never get any closer to understanding your business.
We cover the broader picture of what contractor bookkeeping should look like in Bookkeeping for Contractors: What You Need to Know, and if you want to see how a clean job costing setup actually works in QuickBooks Online, that is covered in How to Track Job Costs in QuickBooks Online.
At Prophet Accounting, we work with roofing contractors and other home service trades across Port St. Lucie, the Treasure Coast, and nationwide.
We set up job costing that surfaces gross margin per square, separate insurance and retail revenue, allocate burdened labor and material correctly, and deliver monthly reporting that tells you which jobs and crews are profitable.
If your books are not telling you the truth about your business, schedule a consultation at prophetaccounting.com/contractors.