TL;DR: A pricing page exists to qualify. Visitors come specifically to find out whether they can afford you. A page that hides pricing reads as one of three things: too expensive, secretly cheap, or willing to charge whatever the buyer will pay. None convert. The patterns that work: real numbers (or real ranges like $1–10k), three tiers max, the included scope listed by tier, an honest who-is-this-for line per tier, and a single CTA per tier. The exception where Contact us is correct: enterprise deals priced per seat or per integration, where the number genuinely depends on a 30-minute conversation. Everything else, price the page.
A pricing page exists to qualify. Visitors come to it specifically to find out whether they can afford you. A pricing page that doesn't price doesn't qualify. It just delays the disqualification by one form submission and one email exchange.
Here is the case for pricing pages that price, the patterns that work, and the cases where hiding pricing is genuinely correct.
What "Contact us for pricing" actually says
When a visitor lands on your pricing page and sees "Contact us," they read one of three things:
- "We're too expensive for you to afford." (most likely)
- "We're cheap and don't want to admit it."
- "We change pricing per buyer, which means we'll charge you what we think you'll pay."
None of those are good signals. The visitor has come to a pricing page expecting an answer. Refusing to give one breaks trust and loses the bottom-funnel demand that was about to convert.
The exception: when "Contact us" is correct
Honest cases where hiding pricing is right.
Enterprise contracts where pricing genuinely depends on usage. A company selling to Fortune 500 with 12-month contracts and per-seat plus per-API-call pricing. Listing a starting price would mislead. "Contact us" is correct.
Services where the spec defines the price. Custom builds at $25k+ where the scope determines the number. "Contact us" works if the page also includes "Most projects are $X–$Y" so visitors can self-select.
Two-sided marketplaces. Pricing depends on both sides. Listing a number is misleading.
Outside these, "Contact us for pricing" is almost always wrong. It loses you the visitor who would have converted at your stated price.
What a pricing page should actually do
Three jobs.
- Qualify. Visitors who can't afford you self-disqualify. You stop wasting their time and yours.
- Sell. Visitors who can afford you see specifically what they get for what they pay.
- Reduce friction. Visitors who are ready to buy don't have to ask "how much" to get to "yes."
Every element on a pricing page should serve one of these three. Anything else is decoration.
Patterns that work
1. Tiered plans with clear differences
Three or four tiers, each with a name, a price, a one-line use case, and a list of what's included. Differences across tiers are obvious without squinting.
What makes this work: tier names map to buyer self-image. "Solo," "Team," "Enterprise" are clearer than "Basic," "Pro," "Premium." The buyer recognizes which one they are.
2. "Starting at" with a real number
For service businesses where the project price varies, "Starting at $X" is honest enough. It filters tire-kickers, signals seriousness, and qualifies up-market buyers.
The number has to be real. "Starting at $999" when most projects are $5k+ is bait-and-switch. "Starting at $5,000" or "Most projects are $5–10k" is honest.
We use this on our own services page. Specifically: "Projects $1,000 to $10,000." That filters anyone who wanted a $300 site and qualifies anyone who wanted a $50k agency.
3. The "what each tier buys" line-item
Each tier on a SaaS pricing page should have:
- The price (not "Custom" unless genuinely custom).
- A one-line use case ("For solo developers" / "For small teams" / "For organizations").
- A list of what's included, with the most important features first.
- A primary CTA, plus a secondary if relevant.
- If a tier doesn't include something a buyer might assume, an explicit "Not in this tier" line.
The mistake is feature parity comparison tables that try to show everything. Keep the per-tier card concise. Use the comparison table for the buyer who wants the full breakdown.
4. Annual / monthly toggle done right
If you offer both, make the discount visible. "Save 20% with annual" or "$83/mo billed annually."
Don't:
- Default to annual without a clear toggle.
- Hide the monthly price.
- Show a slashed-out price with no real reference.
The toggle works if both options are honest and the discount is real.
5. Pricing FAQs
A 4–6 question FAQ at the bottom of the pricing page absorbs the questions that delay decisions. Common ones:
- "Can I cancel anytime?"
- "What happens when I exceed [limit]?"
- "Do you offer a discount for [annual / nonprofit / startup]?"
- "How does billing work for teams?"
Answer them in 2–3 sentences each. Long answers signal a complicated product.
Patterns that don't work
Three tiers all priced as "Contact us." The pricing page is doing zero work. Skip it entirely.
A 50-row feature comparison table above the tier cards. Visitors don't read these top-down. They look at the cards, decide a tier, then read the row that matters to them. Put the cards first.
Volume-based pricing without a calculator. If pricing scales with usage, give the buyer a way to estimate their bill. A simple input ("how many users? how many GB?") with a real-time price beats a paragraph of math the buyer has to do themselves.
The "Free" tier that's a trap. Free tiers that are useless or that paywall the only useful feature train buyers to distrust the rest of your pricing. Either make the free tier real or skip it.
What we put on our own pricing language
Webdimonia doesn't have a pricing page in the traditional sense. We have:
- A range on the services page: "Projects $1,000 to $10,000."
- Three blog posts that break down what $2k, $5k, and $10k specifically buy.
- A line item on every project quote: "Here's what's in scope at $X. Here's what's not."
The three transparency posts function as the pricing page. Each is built around a specific search query ("what does a $5000 website include") and ranks on its own. The buyer who searches that query lands on a real answer, not a contact form.
This works because we sell custom projects, not subscriptions. SaaS companies have to publish a pricing table. Custom service businesses can substitute three honest blog posts and a "Starting at" line.
Three questions to decide what to put on your pricing page
- Can a visitor self-qualify in 30 seconds without leaving the page? If no, the page isn't doing its job.
- Is "Contact us" the price, or are you hiding a number? If hiding, replace with "Starting at $X" or a real range.
- Does the pricing FAQ absorb the top 4 questions buyers ask before signing? If no, add it.
If you want a 10-minute review of your pricing page (or the case for adding one), send us the URL. We send these back within a day.