# Where do web apps place in-product upsells?

Source: Lazyweb Research
Author: Ali Abouelatta, Lazyweb Research
Published: 2026-07-07
Updated: July 2026
Sample size: n=11753
Category: [In-product upsell and feature-gating placement](https://design.lazyweb.com/blog/category/in-product-upsell-and-feature-gating-placement)
Tags: web, upsell, saas, monetization, ux-patterns
HTML: https://design.lazyweb.com/blog/where-do-web-apps-place-in-product-upsells
Markdown: https://design.lazyweb.com/blog/where-do-web-apps-place-in-product-upsells.md

**Answer.** In the web corpus, 82% of labeled product screens are in-product (9,645/11,753), and the two largest in-product surfaces are settings (1,351 screens) and dashboard (1,088) — both fully in-product.[4] So on web, the upgrade entry naturally rides the surfaces users live in every session. Anchor web upsells to settings and the dashboard before reaching for interruptive modals.

> 9,645 of 11,753 labeled web product screens (82%) are in-product, led by settings (1,351) and dashboard (1,088) — Lazyweb Research, July 2026.

## Finding

Web in-product surface composition:[4]

| Metric | Screens |
| --- | --- |
| In-product screens | 9,645 |
| All labeled product screens | 11,753 |
| In-product settings | 1,351 |
| In-product dashboard | 1,088 |

At 82% in-product, the web corpus is dominated by the surfaces where returning users spend time — and settings plus dashboard together are the largest single destinations for placing an always-available upgrade entry.

## How to apply

On web, put the persistent upgrade path in the two highest-traffic in-product surfaces: an 'Upgrade' entry in settings/account and a plan/usage nudge on the dashboard. These match how mobile treats settings (35% of apps with a settings screen carry an upgrade entry)[3] and give broad, low-friction exposure without an interstitial. Reserve contextual modals for the moment a user hits a specific limit.

## Caveats

The web corpus (sites_screen_labels, 11,753 screens) is a distinct universe from the 809-app mobile corpus and largely different companies — never mix the denominators.[4] Screen counts are labels, not conversion.

## The numbers

| Stat | Computed from |
| --- | --- |
| 9,645/11,753 (82%) | web_in_product_screens: 9,645/11,753 |
| 1,351 settings screens | web_in_product_screens sql note: Settings=1,351 |
| 1,088 dashboard screens | web_in_product_screens sql note: dashboard=1,088 |
| 35% (112/321) mobile | upgrade_entry_in_settings: 112/321 |

## Methodology

Universe: 11,753 labeled desktop web product screens (distinct web corpus), plus a mobile settings comparison. Method: in-product share and surface counts from sites_screen_labels, July 2026. Caveat: web and mobile are distinct universes; counts are labels, not conversion.

## Visual references

Real, in-market app screens tracked by Lazyweb Research:

- Masterclass: https://zlfyzdmohcskkucuunmk.supabase.co/storage/v1/object/public/screenshots/edu112_masterclass/backlog/2025_11_17_18-33-59_13FC953B.png
- Transit: https://zlfyzdmohcskkucuunmk.supabase.co/storage/v1/object/public/screenshots/uploaded_transit/main_tabs/compare/2026-05-28/1779953053788_00_Transit-20260528-072413-01.png
- Bilt: https://zlfyzdmohcskkucuunmk.supabase.co/storage/v1/object/public/screenshots/uploaded_bilt/main_tabs/compare/2026-05-27/1779937307418_00_BILT-20260528-030147-01.png
- Suno: https://zlfyzdmohcskkucuunmk.supabase.co/storage/v1/object/public/screenshots/uploaded_suno/main_tabs/compare/2026-05-28/1779952060927_00_Suno-20260528-070740-01.png

## Sources & citations

- [4] Lazyweb Research analysis of 11,753 labeled desktop web product screens (distinct web corpus), July 2026. Web (sites_screen_labels) and mobile (screenshots) are distinct universes and largely different companies; never mix the 809-app denominator with the 11,753 web-screen denominator.
- [3] Lazyweb Research analysis of 23,407 canonical mobile screens (tracked app corpus), July 2026. Canonical-screen category counts; is_paywall is NULL on 21,824/23,407 rows so gating is reported as app-count prevalence or absolute screen counts, never as a share of all screens.

## Related questions

- [What percent of settings screens surface the upgrade entry point?](https://design.lazyweb.com/blog/what-percent-of-settings-screens-show-upgrade-entry)
- [Where do freemium apps place upgrade prompts inside the product?](https://design.lazyweb.com/blog/where-freemium-apps-place-in-product-upgrade-prompts)
- [Lock icons, blurred previews, or usage limits: how do apps gate features?](https://design.lazyweb.com/blog/how-apps-gate-features-lock-icons-vs-usage-limits)
- [How aggressive are subscription apps with in-product upsells?](https://design.lazyweb.com/blog/how-aggressive-are-subscription-apps-with-in-product-upsells)
- [Do advertising-model apps upsell differently than subscription apps?](https://design.lazyweb.com/blog/do-advertising-apps-upsell-differently-than-subscription-apps)
- [Should I use a usage meter or a hard lock to gate a feature?](https://design.lazyweb.com/blog/should-i-use-a-usage-meter-or-a-hard-lock-to-gate)
- [Are blurred-preview paywalls actually a common gating pattern?](https://design.lazyweb.com/blog/are-blurred-preview-paywalls-actually-common)
- [Premium badge or unlock CTA: which pattern do more apps use to signal a gated feature?](https://design.lazyweb.com/blog/premium-badge-vs-unlock-cta-which-signals-gating)

## Explore the evidence

- [Billing toggle experiment kit](https://design.lazyweb.com/blog/billing-toggle-experiment-kit?utm_source=lazyweb&utm_medium=research&utm_campaign=billing-toggle-kit)
- [Cal AI annual-plan and trial presentation](https://design.lazyweb.com/blog/cal-ai-paywall-annual-plan-and-trial)
- [Monthly versus annual billing toggles](https://design.lazyweb.com/blog/monthly-vs-annual-billing-toggle-pricing)
- [Billing cadence versus plan tiers](https://design.lazyweb.com/blog/annual-billing-toggle-vs-plan-tiers)
- [Cal AI trial-introduction screens](https://design.lazyweb.com/flow/cal-ai/onboarding-paywall)

## Continue your research

[Connect Lazyweb to your coding agent](https://www.lazyweb.com/mcp-install)
