Skip to content

Should the price go inside the paywall button or above it?

  • By Ali Abouelatta
  • n = 1,886
  • Published
  • Updated
  • 3 min read
  • paywall · pricing · monetization · checkout · ux-patterns · design

Short answer

Most apps keep price out of the button: only 11.6% of 1,886 primary CTAs embed a price, while a further 8.2% show the price in the copy above the button, and roughly 80% show no price in the extracted CTA-adjacent copy at all source[1]source[2]number[3]. The dominant pattern is a soft CTA verb with the price living in the surrounding line — not on the button itself.

The quotable stat
Only 11.6% of 1,886 primary paywall CTAs embed a price; 8.2% show it just above the button — July 2026.

2×2

How 630 paywalls combine offer framing × price-in-button

Most paywalls (70%) are direct with no price in the button; putting a price in the button is the exception in every quadrant. Source: Lazyweb Research, 630 paywalls.

← Direct (no trial)Trial-led →

top-left: Trial-led · no price
108 (17%)
top-right: Trial-led + price
20 (3%)
bottom-left: Direct · no price
443 (70%)
bottom-right: Direct + price
59 (9%)

← No price in buttonPrice in button →

Bar chart · Share

Share — The finding: the button rarely carries the price

One block is about 2.9%

Inside the button text
11.6% [1]
Above the button (adjacent copy)
8.2% [2]
No price in extracted CTA-adjacent copy
80.2% [3]

The finding: the button rarely carries the price

Where the price sitsPrimary CTAsShare
Inside the button text21911.6% source[1]
Above the button (adjacent copy)1558.2% source[2]
No price in extracted CTA-adjacent copy1,51280.2% number[3]

So among CTAs where a price is visible near the button, price-above-the-button (8.2%) and price-in-button (11.6%) are the same order of magnitude, but both are minorities — the norm is a button with no price on it and often no price in the immediately adjacent copy either source[1]source[2]number[3].

What each pattern looks like

Price in the button is a direct, transactional style — the number is the commitment:

  • Zeus — "$50.99/year" number[4]
  • iam — "Only $49/year" number[4]
  • Elevate — "Unlock for $3.3 per month" number[4]

Price above the button pairs a soft verb with the offer detail in the line above — e.g. PictureThis's "Continue" under "Try 7 days free, then $39.99/year" number[5]. This is the more common shape overall given that 'Continue' (21.2%) and 'Start' (16.9%) lead the primary-CTA verbs number[6].

How to apply this

Default to keeping the price out of the button and placing it in a clear line above — that matches the majority pattern and pairs naturally with the dominant soft verbs ('Continue', 'Start') number[3]number[6]. Put the price in the button when you want a maximally transparent, transactional feel (common in price-forward categories like Graphics & Design) — it's a legitimate ~12% pattern, not a mistake source[1]. Whichever you choose, if there's a trial, the price should still appear somewhere adjacent as a trial-then-price line so the renewal terms are clear. Treat in-button vs above-button as an A/B test, since both are established.

Caveats

'No price visible' (80.2%) means no price in the extracted CTA-adjacent copy only — prices on plan cards or elsewhere on the screen aren't captured, so this is 'price outside the button/CTA area,' not 'no price on the paywall' number[3]number[7]. Price detection uses a currency-symbol/decimal + period-unit regex; primary-role CTAs only (39% unknown-role excluded) number[8]. Whole-percent rounding applies.

Real in-market screens

Screens from real, in-market apps, tracked by Lazyweb Research.

  • Accuweather Paywall (Home modal) screen — real in-market example tracked by Lazyweb Research
    Accuweather603 × 1306opens the full image
  • Grok paywall screen — real in-market example tracked by Lazyweb Research
    Grok1206 × 2622opens the full image
  • Translate Now paywall screen — real in-market example tracked by Lazyweb Research
    Translate Now1206 × 2622opens the full image
  • Robinhood Checkout upsell screen — real in-market example tracked by Lazyweb Research
    Robinhood1125 × 2436opens the full image

The numbers

#StatComputed from
[1]Price inside the button: 219/1,886 (11.6%)price_in_cta_share: 219/1886 = 11.6%
[2]Price above the button only: 155/1,886 (8.2%)price_above_cta_only_share: 155/1886 = 8.2%
[3]No price in adjacent copy: 1,512/1,886 (80.2%)price_above_cta_only_share note: 1,512 = 80.2%
[4]Zeus, iam, Elevate price-in-button examplesqualitative price in CTA entries
[5]PictureThis 'Continue' + 'Try 7 days free, then $39.99/year'qualitative picturethis 7-day entry
[6]Continue 21.2%, Start 16.9% lead CTA verbscta_verb_families: continue 399 (21.2%), start 318 (16.9%)
[7]'No price visible' = adjacent copy only, not whole screensmallSampleWarnings: price not visible framing
[8]39% CTA rows role='unknown', excludeduniverse note

Methodology

Universe: 1,886 primary CTAs across ~800 tracked apps, July 2026. Price detected via regex over CTA button text and adjacent extracted title/subtitle only; 'no price' means no price in that adjacent copy, not the whole screen.

Sources

  1. [1]

    Lazyweb Research analysis of 1,886 primary paywall CTAs (~800 tracked apps), July 2026

    Price-in-button via currency/decimal + period-unit regex on cta_text; 219 rows.

    Back to text

  2. [2]

    Lazyweb Research analysis of 1,886 primary paywall CTAs (~800 tracked apps), July 2026

    Price-above-button = no price in button but price in adjacent title/subtitle; 155 rows. 'No price' (1,512) means adjacent copy only.

    Back to text

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

Explore the evidence