Do paywalls show the price in the CTA button or only above it?

Only 11.6% of 1,886 primary paywall CTAs (219 buttons) embed a price in the button text; a further 8.2% (155) show a price in the copy above the button but keep the button price-free.[1][2] In the extracted copy, 80.2% of primary CTAs have no price in the button or its adjacent copy at all.[3] Putting the price in the button is the minority pattern — most apps keep it out.

11.6% of 1,886 primary paywall CTAs (219) embed a price in the button; another 8.2% show price only above it — Lazyweb Research, July 2026.

Lazyweb Research · n=1886 · Published 2026-07-07

paywallpricingmonetizationcheckoutux-patterns

The finding

Price-in-button is measured by matching a currency symbol plus digits, or a decimal price plus a period unit (/mo, per year, etc.), in the CTA text. 219 of 1,886 primary CTAs (11.6%) do this.[1] A separate 155 (8.2%) have no price in the button but do have one in the extracted title/subtitle above it.[2]

Where the price sitsShare of primary CTAs
Inside the button11.6% (219/1,886)
Above the button only8.2% (155/1,886)
Not in extracted CTA copy80.2% (1,512/1,886)

Real examples of price-in-button: Zeus ('$50.99/year'), iam ('Only $49/year'), Elevate ('Unlock for $3.3 per month').[1]

How to apply it

If your button shows a price, you are in the 11.6% minority — a defensible, transparency-forward choice, but not the norm. The larger group either keeps price in the offer copy above the button (8.2%) or shows no price in the CTA area at all.

The decision hinges on your offer: a trial-led paywall usually wants the button to say 'Start Free Trial' and the price to sit below as the post-trial terms, keeping the tap frictionless. A direct-purchase paywall (no trial) more often benefits from price-in-button transparency. Match the button to the offer type rather than defaulting either way.

Caveats

'Price not visible' (80.2%) means no price in the *extracted CTA-adjacent copy* only — prices on plan cards elsewhere on the screen are not captured by this extraction.[3] Frame the 80.2% as 'no price in the button or its immediate copy', never as 'no price on the paywall'. Role-based cuts use the 1,886 primary rows; 39% unknown-role rows are excluded. Figures are a July 2026 pull.

The numbers

StatComputed from
11.6% (219/1,886)price_in_cta_share: currency+digits or decimal+period-unit in cta_text
8.2% (155/1,886)price_above_cta_only_share
80.2% (1,512/1,886) no price in extracted CTA copyprice_above_cta_only_share denominator note
Methodology. Universe: 1,886 primary paywall CTAs across ~800 tracked apps, July 2026. Price detected via currency/decimal-plus-unit regex over button text and CTA-adjacent copy; 'no price' reflects extracted CTA copy only, not full-screen plan cards.

Sources & citations

  1. [1] Lazyweb Research analysis of 1,886 primary paywall CTAs (~800 tracked apps), July 2026. Price regex on cta_text; named examples from extracted CTA copy.
  2. [2] Lazyweb Research analysis of 1,886 primary paywall CTAs (~800 tracked apps), July 2026. Price absent from button but present in extracted surrounding title/subtitle.
  3. [3] Lazyweb Research analysis of 1,886 primary paywall CTAs (~800 tracked apps), July 2026. 'No price visible' counts only CTA-adjacent extraction, not plan cards elsewhere on screen.

Source: Lazyweb Research — proprietary analysis of real, in-market app screens. Cite as Lazyweb Research, 2026-07-07.

Related questions

Explore the underlying screens, flows, and A/B tests inside Lazyweb. More research