Hiding pricing behind a "Contact Sales" gate or omitting billing cycles creates real friction — visitors who cannot find a price point often leave rather than email a stranger to ask. Even a simple "From $29/month" anchor lets pricing-curious visitors self-qualify, reduces bounce from the pricing page, and improves the quality of inbound demo requests by filtering out visitors whose budgets do not match.
High because opaque pricing causes qualified visitors to bounce rather than initiate a sales conversation.
Publish at least one concrete price point with billing cycle and feature list per tier on a public /pricing route, even if one tier remains custom-quoted. If Stripe integration already holds your prices, expose them to the marketing surface. Edit app/(marketing)/pricing/page.tsx:
export default function PricingPage() {
return (
<div>
<PricingCard name="Starter" price={29} billing="month" features={[...]} />
<PricingCard name="Pro" price={79} billing="month" features={[...]} />
</div>
)
}
ID: marketing-conversion.trust-social-proof.pricing-transparency
Severity: high
What to look for: Examine the pricing page or pricing section of the marketing site. Check: (1) Is there a publicly accessible pricing page or section (a route at /pricing or a section component on the landing page)? (2) Does the pricing show actual prices or dollar amounts — not just "Contact us for pricing" for all tiers? (3) Are billing cycles (monthly/annual) indicated? (4) Is there a clear indication of what each tier includes (feature comparison, included limits)? Freemium products may have one free tier and paid tiers — both should be visible.
Pass criteria: Count all pricing tiers displayed on the pricing page. A pricing page or section exists, shows at least 1 concrete price (dollar amount), and includes enough detail that a visitor can make an informed purchase decision. Each tier must show at least 3 details (price, billing cycle, feature list). Report: "X pricing tiers found with Y average details per tier."
Fail criteria: No pricing page or section exists on the marketing site. OR the pricing page exists but shows only "Contact Us" for all tiers with no price ranges or starting prices. OR pricing exists but omits billing cycle (annual vs. monthly not indicated).
Skip (N/A) when: The project is purely enterprise B2B where all pricing is custom contract — verifiable only by examining landing page content and not inferrable from codebase structure alone. In that case, skip with note that pricing model cannot be determined from code.
Detail on fail: Describe what was found. Example: "No /pricing route or pricing section component found on marketing site." or "Pricing page exists at /pricing but all three tiers show 'Contact Sales' with no price indication.".
Remediation: Hiding pricing creates friction. Visitors who cannot find your price often leave rather than asking. Even a starting price ("From $29/month") reduces bounce on pricing-curious visitors.
If you have a Stripe integration, your pricing data likely already exists — expose it:
// pricing/page.tsx
export default function PricingPage() {
return (
<div>
<PricingCard name="Starter" price={29} billing="month" features={[...]} />
<PricingCard name="Pro" price={79} billing="month" features={[...]} />
</div>
)
}