All posts

DSO for Roofers: the one A/R number that decides your cash flow

Days Sales Outstanding (DSO) is the average time it takes a roofing company to get paid after invoicing. Here is how to calculate it, what a good number looks like, and how much cash a lower DSO frees up.

Accounts ReceivableSymFlowJuly 6, 20267 min read

You just finished a $22,000 roof. The crew has already loaded up and driven to the next address. The homeowner is thrilled. On your P&L, that job is revenue. So why is payroll on Friday going to be tight again?

The answer is almost never in your sales number. It is in how long that $22,000 sits in someone else’s bank account before it reaches yours. There is a single metric that measures exactly that, and most roofing owners have never once calculated it. It is called Days Sales Outstanding.

What DSO actually measures

DSO is the average number of days it takes you to get paid after you send an invoice. If your DSO is 45, the typical invoice sits open for about 45 days before the cash lands. That is the whole idea.

Revenue tells you what you earned. DSO tells you how long you wait to touch it. Those are two different businesses. Every day an invoice stays open, you are lending that money to your customer at zero percent. You never agreed to run a bank on the side, but a high DSO means you are.

This is why lenders, buyers, and sharp operators look at DSO before they look at almost anything else on the balance sheet. Two roofing companies can post the exact same revenue; the one collecting in 30 days instead of 70 is the healthier business, every time.

How to calculate it

You need three numbers and about five minutes. The standard formula is simple: divide what customers owe you by what you invoiced over a period, then multiply by the days in that period.

The formula

DSO = (Accounts Receivable / Credit Sales) × Days in the period

Worked example (illustrative)
  • Invoiced work last quarter: $1,200,000
  • Open accounts receivable today: $300,000
  • Days in the quarter: 90

($300,000 / $1,200,000) × 90 = 22.5 days

On average, it takes about 22 and a half days to collect after you invoice. That is your baseline.

Two things trip people up. Match the period to the days: if you use a quarter of revenue, use 90 days, not 365. And if your volume swings with storm season, do not read too much into a single snapshot. Measure it the same way at the same point each quarter and watch the trend. For heavily seasonal or fast-growing shops, accountants use a more precise countback method, but the simple version above is enough to run your business by.

So what is a “good” DSO?

Here is where most articles hand you one number and move on. The honest answer is that “construction DSO” depends entirely on who you measure. Across all U.S. industries the median is in the mid-50s. Contractors reporting to the CFMA Benchmarker land around the same. But specialty-trade contractors, where roofing lives, run closer to 77 days, and the largest engineering-and-construction firms drag the industry ceiling all the way to 100, the highest DSO of any sector.

Average DSO, in days

“Construction DSO” depends entirely on who you measure. Roofing sits with the specialty trades, highlighted below.

Healthy target40 days
recommended, not an average
All U.S. industries (median)57 days
Hackett, 2024
Contractors, self-reported57 days
CFMA, 2024
Specialty-trade contractors77 days
CreditPulse, 2025
All construction83 days
CreditPulse, 2025
Large engineering & construction firms100 days
Hackett, 2024

So do not benchmark yourself against “all industries.” A DSO of 60 is unremarkable for a large builder and a genuine cash-flow problem for a 10-truck roofing shop. The useful target for a roofing company is under 45 days, and the best-run operations get well below that. When we measured a real one, Dr. Roof in Atlanta, they were at 38 days. After putting a consistent follow-up process in place, they dropped to 20.2, cutting the wait nearly in half while revenue grew more than 30 percent, without adding a single person to the A/R desk.

Why roofing runs high in the first place

Some of your DSO is structural and you will never fully remove it. Insurance work pays in two checks: an initial one after the claim is approved, and recoverable depreciation released only after the job is done and documented. Supplements for code items or decking trigger a separate, later payment. Retainage of 5 to 10 percent is withheld until completion. None of that is your fault.

But a large chunk of roofing DSO is not structural at all. It is the follow-up that happens only when someone remembers. The office manager means to call, but she is also running permits, scheduling, and payroll, and nobody enjoys the awkward “checking on that invoice” call. So it slips. And the numbers show how common that is:

82%

of contractors wait more than 30 days past their expected pay date

Rabbet, 2024
83 days

average time to get paid after sending an invoice in construction

Levelset, 2022
$280B

estimated annual cost of slow payments across U.S. construction

Rabbet, 2024

A roof invoice that could have been paid in three weeks becomes a 60-day, then 90-day receivable, not because the customer refused, but because nothing chased it on day 8, day 20, and day 35.

What those extra days actually cost

This is the part worth internalizing, because it turns an abstract metric into real money. Your accounts receivable balance is just DSO expressed in dollars. Lower the days and you release cash you already earned. The math is direct: multiply the number of days you cut by your daily revenue.

Cash tied up in receivables

Illustrative $5M/year roofing company. Every day you cut off DSO puts real cash back in the business.

75 day DSO$1.03M
60 day DSO$822K
$205K freed vs. 75 days
45 day DSO$616K
$411K freed vs. 75 days
30 day DSO$411K
$616K freed vs. 75 days

Going from 75 to 30 days frees roughly $616K of your own cash. On a 10% line of credit, that is about $62K a year in interest you stop paying.

That freed cash is not a paper gain. It is the money for your next material order, the payroll you currently float on a line of credit, the truck you have been putting off. Fast-growing roofing companies often feel poorer, not richer, precisely because every new job ties up more cash in receivables. Cutting DSO is how growth starts funding itself instead of draining you.

How to actually lower it

The lever is not working harder. It is consistency. The reason DSO creeps up is that human follow-up is uneven by nature, and it collapses entirely the week the office manager is out sick. A collection process that never drops the ball at 30, 60, or 90 days will beat a heroic but inconsistent one every time.

Practically, that means: invoice the day the job closes, not the end of the week. Start friendly follow-up early, around day 7, before an invoice is even “late.” Use more than one channel, because a text gets answered when a voicemail does not. And make the sequence automatic, so it runs whether or not anyone has a spare hour. This is exactly the gap automated A/R tools are built to close; reported reductions run 20 to 35 percent. It is also, not by coincidence, what SymFlow does for roofing companies.

Do this today

Pull your A/R aging report and calculate one number: your DSO for last quarter. Write it down. Then count the invoices sitting past 60 days. That total is the size of the interest-free bank you are currently running for your customers, and it is the clearest scoreboard you have for every collections decision you will make this year.

See what a 20-day DSO looks like

SymFlow's AI agent follows up every unpaid invoice by call, text, and email, inside your existing roofing CRM, so your cash comes home without anyone chasing it. Book a 20-minute demo.

Book My Free Demo

Sources: Hackett Group 2024 working-capital data (via CFO.com); CFMA 2024 Construction Financial Benchmarker; CreditPulse 2025 DSO benchmarks; Levelset 2022 Construction Cash Flow & Payment Report; Corporate Finance Institute. Worked example and $5M projection are illustrative. Dr. Roof figures are SymFlow customer data (Aug 2025–Apr 2026).