For the last four years, Custom Product Pages (CPPs) were a niche tool — useful, underused, and capped at 35 versions per app. As of October 29, 2025, Apple doubled that limit to 70. And since July 2025, CPPs can appear in organic App Store search results, with keywords assigned directly from your app's keyword field. That second change is the bigger one, and most indie devs haven't internalized it yet.
This guide walks through what CPPs are in 2026, what changed, and how to build a CPP strategy that actually moves installs — without burning the next three weekends on it.
What Custom Product Pages are, briefly#
A Custom Product Page is an alternate version of your App Store listing. Same app, different screenshots, different promotional text, different app preview videos, different orientation — all targeted at a specific audience, use case, or campaign. Each CPP gets a unique URL you can share, link from ads, deep-link into a specific destination in your app, and — as of last year — surface in organic search.
You can now create and publish up to 70 CPPs per app. Each one is fully localizable, supports up to ten screenshots per device size, and reports conversion data separately in App Store Connect Analytics. If you've ever wanted to test a different positioning for a different user segment, that's the use case.
The Apple Search Ads team's own numbers say users who land on a CPP convert at 156% the rate of users who land on the default page (a 2.5pp lift on average). That number alone justifies the work for most apps.
What actually changed in 2025–26#
Three changes matter:
1. CPP limit raised from 35 to 70. Apple announced this on October 29, 2025. The practical effect for indie developers: there is no longer a ceiling on how granular your audience segmentation can be. If you have 12 paid campaigns, you can have 12 dedicated CPPs and still have 58 to spare for organic search experiments.
2. CPPs can appear in organic search. Since July 2025, you can assign keywords from your main keyword field to specific CPPs. When your app ranks for one of those terms, the matching CPP's screenshots and promotional text can replace your default product page in the search result. This is the first time in the App Store's history that a single app can present different listings to different searchers organically.
3. Keyword assignment per CPP. When you publish a CPP, you can specify which subset of keywords from your keyword field should trigger that CPP in search. This means a "fitness tracking" search and a "marathon training" search can show different screenshots — both legitimate, both organic, both pointing to the same app.
Why this matters for indie developers#
Three structural changes follow from those updates:
Your keyword field is now a hub, not a list. Before, every keyword in your 100-character field pointed at the same screenshots and promotional text. Now you can route different keywords to different listings. If "habit tracker" and "morning routine" both rank for your app, you can show wake-up-routine screenshots to one search and a habit-streak dashboard to the other.
A/B testing got cheaper. Apple's Product Page Optimization (PPO) tool already lets you test variants, but PPO is limited to four variants and one test at a time per app. CPPs in organic search are not formally A/B tests — but they let you ship multiple "winning" variants simultaneously for different keyword clusters. That's a different model than PPO and it stacks on top of it.
The cost of bad positioning went up. When everyone has the same default page for every keyword, the default page is roughly fair. When competitors are routing different searches to different optimized listings and you aren't, your conversion rate gap widens.
Building a CPP strategy that doesn't eat your weekend#
Most indie devs read this and immediately spiral into "I need to make 70 pages." You don't. Start with three to five and earn the right to make more.
Step 1 — Map your keyword field to intent clusters#
Open App Store Connect and look at your current keyword field. Group those keywords into 3–5 intent clusters. Examples:
- "use case A" cluster (e.g. solo runners — keywords like "running tracker," "marathon," "pace")
- "use case B" cluster (e.g. gym training — keywords like "workout," "lifting," "reps")
- "competitor compare" cluster (keywords that include competitor names if you target those)
- "feature search" cluster (keywords that describe a specific feature: "calorie tracker," "macro counter")
- "audience" cluster (e.g. "beginner running app")
For each cluster, write one sentence describing what someone searching this is actually looking for. That sentence is the brief for the CPP.
Step 2 — Build the first three CPPs#
Don't try to build all five at once. Pick the three clusters with the highest current search impression share in your App Store Connect search terms report. Build one CPP per cluster.
For each CPP:
- Screenshots — lead with the screen that addresses the cluster's specific intent, not your generic hero. "Running tracker" search should land on a pace-and-route screen, not your onboarding splash.
- Promotional text — rewrite the 170-character field for the cluster's intent. This is the most underused real estate in the entire listing.
- App preview video — if you have one, swap to a 15-second cut that shows the relevant flow. If you don't, the static screenshots will still convert better than the default.
- Keywords — assign the cluster's keywords to this CPP in the keyword linking panel.
Step 3 — Wait two weeks, then measure#
Conversion rate, install rate, and impressions-to-tap all report separately for CPPs in App Store Connect. Two weeks is the minimum to read signal on a keyword cluster that doesn't get massive traffic. Don't make changes before then. If a CPP underperforms the default for its keyword cluster, you have a positioning problem, not a screenshot problem. Rewrite the brief before redoing the assets.
Step 4 — Layer in paid and campaign CPPs#
Once your organic CPPs are stable, the remaining slots become paid-acquisition territory:
- One CPP per paid campaign (Apple Search Ads, Meta, TikTok, etc.) — each with its own UTM-style attribution via the unique URL
- One CPP per partnership or referral source — useful for influencer-driven installs where the audience expectation is specific
- Seasonal CPPs — holiday, back-to-school, New Year's resolution variants
A common indie mistake here is treating paid CPPs as throwaway. They're not. A campaign CPP that converts 3pp higher than your default page directly cuts CAC. That math is durable across campaign types.
The screenshot problem (and what to do about it)#
The catch with CPPs is that every variant needs its own screenshot set. Up to ten screenshots per device size, across iPhone 6.7", iPhone 6.5", iPhone 5.5", iPad Pro 12.9", iPad Pro 11" — and that's per CPP, per locale. Five CPPs across three locales is potentially 750+ image renders.
This is the part where ASO strategies die for solo developers. You map the clusters, write the briefs, then look at the screenshot pipeline and realize you have ~40 hours of work ahead of you to populate three CPPs across the locales you care about.
The way out is automation. Stora connects to your GitHub repo, builds your app, runs it on every required device size in the cloud, and generates store-ready screenshots with device frames, custom backgrounds, and per-screenshot text overlays. You design one screenshot per intent cluster — Stora renders it across every device size and locale, automatically. That changes the unit economics of CPP work from "weekend-killer" to "afternoon task."
The compliance check matters here too. Every CPP you publish has to pass App Review, and the most common rejection on a CPP submission is screenshot/promotional-text mismatch — the screenshots imply a feature the app doesn't have, or the promotional text claims something the screenshots don't show. Stora's compliance engine flags those before submission, which keeps you out of the "rejected, resubmit, wait" loop.
Common mistakes to avoid#
A few patterns show up repeatedly in CPP audits:
- Treating CPPs as "default page, but worse." A CPP exists to convert a specific audience better than the default. If you can't articulate the specific audience, don't publish the CPP.
- Forgetting to localize. A CPP in English only, when your app is published in 15 locales, leaves money on the table. Stora handles per-locale screenshot generation, and the AI store listing module generates the localized promotional text — both designed to make the locale-fanout cheap.
- Stale CPPs. A CPP from 2024 still showing iOS 17-era screenshots looks abandoned. Cycle through your active CPPs quarterly. Kill the ones with no impressions. Refresh the ones with traffic.
- Skipping the deep link. Each CPP supports a deep link into a specific destination in your app (iOS 18+). If your CPP sells the "habit streak" feature, deep-link to the habit-streak screen on install, not the onboarding tour.
The bigger ASO shift#
Custom Product Pages started out as a paid-acquisition feature in 2021. In 2025 Apple turned them into an organic search feature. In 2026 they're the most under-priced lever in App Store optimization for indie developers — the conversion lift is documented, the page count is generous, and the keyword linking turns your existing keyword field into a routing layer.
The work to populate CPPs has historically been the bottleneck. That's a tooling problem, not a strategy problem. Solve the tooling, and CPPs become one of the few ASO interventions that genuinely compounds — every cluster you ship widens the conversion gap on competitors who are still serving the same default page to every searcher.
Start with three clusters. Ship them this week. Measure in two. The 156% conversion lift is sitting there waiting.