High-Ticket Trades 4 min read

Why Most Roofers Undercharge by 18% (and the Pricing Page Fix That Stops It)

Most roofers leave 12-18% of margin on the table on every quote — not because of competition, but because of how the bidding conversation starts. Here's the pricing page structure that changes the conversation before it begins.

A roofer in Costa Mesa quoted a $19,000 asphalt shingle replacement last week. The job was worth $22,500 in the current market. The customer didn't push back on price — they would have paid the higher number. The roofer just hadn't anchored high enough at the start of the conversation.

This is the most common pattern in residential roofing. It isn't a sales problem. It's an anchoring problem. And the fix lives on a single page of the website.

The honest answer: roofers undercharge because they price defensively

Most roofers learn to bid by sitting in the truck after a measurement, looking at their materials cost, adding labor, adding overhead, adding 25-30% margin, and writing a number. That number is then defended against the competition the customer is also quoting.

The problem with this approach: it starts from cost, not from value. Every quote is a defensive position. The customer asks "how much?" and the roofer answers — and from that moment, every conversation is about justifying the number.

Roofers who consistently capture market-rate pricing don't do this. They've already established a price range on their website before the first measurement happens. The customer arrives at the bid conversation with an expectation set by your website, not by the lowest competitor.

What the pricing page actually needs

Three things make a roofer pricing page work as an anchor.

Project-type ranges, not specific quotes. A "Roof Replacement Investment" section showing realistic ranges by material: "Asphalt shingle: $14,000-$22,000 for typical OC homes (2,200-2,800 sq ft). Standing seam metal: $32,000-$58,000 for the same size. Tile (concrete or clay): $28,000-$48,000." Real numbers in real ranges.

The fear most roofers have is that posting prices will lose them the low-end customers. Good. Those customers shop to the lowest bidder regardless. The customer worth winning is the one who reads "$14,000-$22,000" and thinks "that's about what I expected — I just need to find the right roofer."

A factors-that-affect-price section. Most customers don't know what drives roof replacement cost. The pricing page should explain: roof pitch (steeper = more expensive), tear-off vs. overlay, decking condition, flashing requirements, gutter integration, permits in different cities. Educating the customer on what affects price reduces price negotiation later. They understand why the quote is what it is.

Financing as part of the pricing presentation. The "$22,000" total sitting next to "as low as $312/month for 84 months" reframes the whole conversation. A customer reading both numbers makes a different decision than a customer seeing only the total.

What roofer pricing pages still get wrong

Three patterns leave money on the table.

"Call for a free quote" with no information. This is the most common pricing page in roofing. It's also the worst — it tells the customer nothing, gives them no anchor, and forces every price conversation to start from zero. Replace it.

Pricing per square instead of per project. Industry terms confuse customers. Saying "we charge $4.50 a square for tear-off" means nothing to a homeowner who doesn't know what a "square" is. Translate to project totals.

Hiding behind "every roof is different." Yes, every roof is different. So show ranges, not single numbers. "$14,000-$22,000" handles the variation. It doesn't require a single committed number; it does set the bracket.

The framing language that lifts close rates

The pricing page isn't just numbers — it's how you talk about the numbers.

Instead of "Our prices start at $14,000" — defensive, cost-led — use "Most asphalt shingle replacements on OC homes run between $14,000 and $22,000 in the current market." That sentence does three things at once: it states a range, it positions you as informed about the market, and it puts the burden of justifying lower pricing on competitors.

Instead of "We're competitive" — vague — use "We're priced in line with the upper-middle of the OC residential roofing market. We're not the cheapest, and that's intentional — we use real GAF Master Elite installers, full tear-offs, premium underlayment, and a 25-year workmanship warranty." That positions you above the budget tier without sounding arrogant.

Instead of "Free estimates" — generic — use "Detailed written estimate within 24 hours of measurement, including line-item materials, labor, permits, and project timeline." Specificity signals professionalism.

Built for businesses like yours. One flat rate, one focused day. The site is live by sundown — no more six-week timelines.
See Pricing →

What this looks like in a real conversation

A roofer in Long Beach added a real pricing page to his website in early 2024. Before the change, his average ticket was $18,200 and he was closing 31% of bids. The pricing page went live in March.

Three things shifted in the months that followed.

First, his lead volume dropped slightly. Customers who would have called him for the cheapest possible roof stopped calling — the pricing page filtered them out. This was a good thing.

Second, his close rate on the remaining leads rose to 44%. The customers reaching out had already accepted the price bracket. The bidding conversation became about choosing the right roofer, not negotiating the cheapest number.

Third, his average ticket rose to $22,400. The pricing page's anchoring effect made the bid feel reasonable instead of high. Customers who would have pushed back on $22,000 from a roofer with no pricing page accepted it from a roofer whose website had already prepared them.

Same crew. Same trucks. Different framing.

The pricing page that pays for itself in a week

If you're a roofer doing $2M+ a year on bids that average 12-18% below what the market would actually pay, the pricing page rebuild is the highest-leverage hour you'll spend on your business this year.

Specific structure: a "Roof Replacement Investment" page in the main navigation. Three sections — material-by-material ranges, factors that affect price, and the financing overview. Total page length: 800-1,200 words plus a comparison table. Plus the framing language across the rest of the site updated to match.

The first quote that lands at full market price after the page is live pays for the page rebuild ten times over. Every subsequent quote compounds.

Frequently asked questions

Won't posting prices lose customers who want to negotiate?
It loses customers who want to negotiate aggressively — typically the lowest-margin customers anyway. It captures more of the middle-market customers who arrive pre-qualified. The net effect on revenue is positive even if total lead volume drops slightly. The leads you keep are higher-quality.
How specific should roofer pricing ranges be?
Project ranges by material type ('asphalt shingle: $14,000-$22,000 for typical OC homes') hit the right specificity. Avoid square-foot pricing ($4.50/sq) because customers don't understand it. Avoid single committed numbers because every roof varies. The range communicates 'roughly this' without locking in a quote.
Should the pricing page show financing options?
Yes. Showing total project cost alongside financed monthly payment ('$22,000 total, or as low as $312/month for 84 months') reframes the buying decision. Customers who would have flinched at $22,000 process $312/month differently. Close rates lift 12-18% with visible financing on the pricing page.
What about competing on price for jobs?
Don't. Position above the budget tier with specific quality signals — material grade, installer certifications, warranty terms, tear-off vs. overlay practices. Customers shopping purely on price are the lowest-margin customers and the most likely to dispute work. Filter them out at the pricing page; compete on quality with everyone who's left.

Ready to launch in one focused day?

Custom branding and a website built for high-ticket trades. $4,500 flat — Year 1 of the Care Plan included.

Reserve Your Launch Day →