Note: This is a composite case study illustrating patterns we've seen across multiple HVAC clients. The numbers are representative, not from a single specific client.
The conventional wisdom on HVAC pricing pages is that you don't show pricing. The argument goes: every job is custom, the price depends on the unit, the labor, the seasonality, the financing — show a number and you'll lose the customer who imagines the high end of the range.
The data, when you actually look at it, says the opposite. The HVAC pricing page that hides pricing converts worse than the one that shows anchored ranges with an on-page calculator — by a wide enough margin that the difference is structural, not noise.
This post walks through what happened when a multi-location HVAC client (composite of three real engagements) made the change.
The starting point
The original pricing page was the standard contractor template: a hero image of a tech, three service categories (install, repair, maintenance), each with a "call for pricing" button. Calls-to-action everywhere. Zero numbers.
Baseline performance:
- Pricing page traffic: ~1,400 visits/month
- Time on page: 22 seconds (median)
- Bounce rate: 67%
- Conversion to booked appointment: 3.1%
- Calls from pricing-page visitors: low single digits
The conversion rate by itself isn't terrible — it's actually slightly above HVAC industry average for a generic pricing page. The problem isn't the conversion rate. The problem is what happens after the conversion.
The hypothesis
Hidden-pricing pages convert visitors who are already deep in the buying journey. They've researched, they've gotten one quote, they're ready to talk to someone. The booking rate from that traffic is high because the visitors are pre-qualified.
But hidden-pricing pages also filter out the much larger group of visitors who are mid-journey — comparing options, gut-checking budget, trying to figure out if a $4K install or an $8K install is what they should be planning for. That visitor doesn't want to "call for pricing." They want to know if HVAC is going to fit their budget at all.
The hypothesis: if we show ranges with an on-page calculator, we'll convert a wider funnel of visitors and the visitors who do convert will be better-qualified (because they've self-selected on price).
The test page
The new pricing page kept the same hero and visual structure but added three elements:
1. Anchored ranges per service category. Install: $4,200-$11,800 depending on system size and SEER rating. Repair: $89 service call + parts. Maintenance: $189/year for the standard plan. Each range had a "what affects the price" expandable section that listed the 4-5 factors actually moving the number.
2. An on-page calculator for installs. Square footage in, system size out, range estimate out. Based on 5 inputs, the visitor got a personalized range in 30 seconds. The calculator output was followed by "ready to confirm? book a free in-home estimate."
3. A financing module. "Most installs in your range work out to $X-Y/month with our financing partner." Three sample monthly payments. One CTA to "see if you qualify in 60 seconds."
Importantly, none of these elements obligated the visitor to pricing. The ranges were ranges. The calculator output was an estimate. Every CTA still led to "free in-home estimate" — the same conversion event as before.
The results (composite, after 60 days)
- Pricing page traffic: ~1,400 visits/month (held constant — no SEO changes)
- Time on page: 1:48 (median)
- Bounce rate: 41%
- Conversion to booked appointment: 4.3% (up from 3.1%)
- Show-up rate at booked appointments: 78% (up from 56%)
- Close rate at booked appointments: 52% (up from 38%)
The conversion rate moved 38%, which is the headline number. But the quality of the conversion moved harder. Show-ups went up because the visitors arriving at the appointment had already self-priced and weren't there to figure out if they could afford it. Close rate went up because the in-home conversation skipped the "is this in our budget" loop entirely.
The compound effect: booked-and-closed jobs per 1,000 pricing-page visitors went from roughly 6.6 to roughly 17.5 — a 165% lift in actual revenue per visitor.
Why it works
There are three forces operating here, and they reinforce each other.
Self-qualification. Showing ranges filters out the visitor who was never going to buy because the price was wildly off their expectation. That filtering happens on the pricing page instead of after a 90-minute in-home appointment. The operator's most expensive cost (a tech sitting in a kitchen) gets allocated to higher-probability prospects.
Anchoring. A visitor who sees "$4,200-$11,800" mentally lands somewhere in the middle and starts planning around $7,000. When the in-home estimate comes in at $7,800, it feels normal. When the same visitor saw no number on the website and gets quoted $7,800, it feels like a shock — even though the quote is identical.
Loss aversion on the financing side. "Most installs work out to $187/month" is a different mental category than "the installation is $7,000." The financing framing converts visitors who would never have engaged with a lump-sum number, even though the lifetime cost is identical.
The objections that don't survive contact
The most common objection from operators considering this change: "but my competition will see my prices." Yes. They already do. They get the same calls you do, they price the same jobs, they know the ranges in your market within $500. The asymmetric advantage is not that nobody knows your ranges; it's that you've removed the friction that's costing you bookings.
The second objection: "but my prices are higher than competitors." Often this means "I'm not actually higher, I just feel uncomfortable showing the number." When operators run the actual comp analysis, their pricing is usually within 10-15% of the market — and the framing of "premium service, premium pricing" works fine when the page also shows financing.
What's transferable beyond HVAC
The same pattern works for any service business with high price variance and a long consideration window. Roofing, dental, med-spa, custom remodeling, legal retainers, financial planning. The mechanic is identical: anchor the range, give the visitor a self-service way to land somewhere in it, route the qualified visitor to a human conversation.
It works less well for businesses with low price variance (everyone in town charges the same for a tooth cleaning) or extremely short consideration windows (emergency plumbing — the prospect doesn't read your page, they just call the first three numbers in the search results).
Where this fits into an operator playbook
Pricing-page tests aren't a project — they're an ongoing experiment. The operators who win at this run a quarterly cycle: redesign with new hypothesis, hold for 60 days, measure cohort, integrate the winning version, plan the next test.
For agency operators serving HVAC clients, this is the kind of work that justifies the retainer. A booking-rate lift of 40% on a client doing $300K/year in pricing-page-attributable revenue is $120K in the client's pocket. That client doesn't churn for $4K/month. See the pricing model breakdown for how to structure the retainer to capture the upside.
The platform handles the mechanics — the HVAC agent template ships with a pricing-page module that operators can deploy directly to client sites. The only operator work is the hypothesis and the measurement.
The principle: in service businesses with high price variance, hiding pricing protects the operator's emotional comfort and costs the client booked appointments. The visitor wants the number. Give it to them.



