Skip to the content

custom-product-pages

Plan an app Product's Custom Product Pages — one brief per audience with the ad groups it serves, screenshot plan and promotional text.

Written by Kwern, after the skill of the same name in Eronred's aso-skills, MIT. Updated 2026-09-25.

The file, as Kwern runs it

Nothing below is rewritten or cut. The description a model routes on comes first, then the file itself. The whole thing, frontmatter included, is at /skills/custom-product-pages.md.

description

Plan an app Product's Custom Product Pages — one brief per audience with the ad groups it serves, screenshot plan and promotional text. Use for "custom product page", "CPP", "different screenshots per ad", "landing page per audience", "which CPP for this ad group", "did the custom product page work". For the default page's screenshots use screenshot-optimization; for the campaigns that route to the pages use apple-search-ads.

Ship 2–4 product page variants that match the message of the traffic landing on them. Output is one listing Proposal per page — its screenshot plan and promotional text — that the User creates in App Store Connect and marks done the day it goes live, plus a brief Output for the routing and the launch plan; assigning a page to an ad group happens in Apple Ads.

Gather

  1. read_context — ICP segments, use cases, channels, positioning per audience.
  2. connector_asc_screenshots and connector_asc_localizations when the ASC Connector exists — the default page's screenshot and preview sets and its promotional text per Locale: the baseline each variant departs from. Look at its first three slots with view_image.
  3. connector_asc_product_pages when the ASC Connector exists — the current CPPs with their state, visibility, URL and deep link, and any product page optimization experiment running on the default page. Without it, assume no CPPs exist and say so.
  4. connector_apple_ads_campaigns when the Apple Ads Connector exists — ad groups by theme, their TTR and CVR: the routing candidates, ad groups with TTR under 3 % first. Without it, route by the Foundation doc's segments and channels.
  5. connector_asc_analytics when the ASC Connector exists — default page conversion overall, read as pageDownloads ÷ pageViews: the baseline to beat.

Plan

Patterns, what a CPP can and cannot change, measurement floors and the mistakes to avoid are in references/cpp-playbook.md; read it before choosing an axis.

  1. Worth it? — a CPP earns its review cycle when a source carries a distinct angle: a paid or partner source with enough volume (≥ 1,000 installs/month from the source), or a keyword theme — a CPP shows in organic search since July 2025 for the keywords assigned to it. A default page that has never been optimized gets aso first.
  2. One axis — audience, use case, feature, channel, funnel stage or market. Pick one and plan 2–4 pages along it.
  3. Per page — the hook the visitor arrived with, the promotional text (170 chars) that restates it, the 10-slot screenshot plan with slot 1 carrying the hook, whether the preview video is reused, and the ad groups or sources that route to it.
  4. Existing CPPs — keep, rewrite, or retire each one against the axis; a CPP with no live source is dead weight.

Output: one Proposal per page, and the brief

Each new or rewritten page is one propose with appStoreField: "customProductPage": content names the page and its promotional text with chars/170, then one block per slot with the screen it shows and its caption (design in screenshot-optimization), and the preview decision; why names the audience, the sources routed (ad group names from the Connector or channels from the Foundation doc), the hypothesis and the success metric as conversion ≥ baseline + X %.

The brief, saved with save_output, carries the reasoning across pages:

  • Routing table — ad group or source × CPP, so every paid ad group with TTR under 3 % lands on a matching page.
  • Launch plan — create and submit in App Store Connect (1–3 day review), assign in Apple Ads, 14 days minimum and ≥ 1,000 product page views per page before judging, monitor in App Store Connect → Analytics → Custom Product Pages.
  • Kill criteria — the install floor and the conversion shortfall that revert a page to the default.

Done when every page has its Proposal with promotional text within 170 characters and a full slot plan, every routed ad group appears in the routing table exactly once, and the brief names the data it lacked (existing CPPs, ad groups, conversion) when a Connector was absent.

Read-out: did the page work

A page is judged on the reports that follow its launch. When you write a report, read out every page the User launched, before planning new ones:

  1. read_proposals with category: ["listing"] — the custom product page Proposals in state done, known by the page they name; doneAt is the day the page went live, and why names the sources routed to it.
  2. read_outputs with kind: "report" — the earlier reports: which pages already have a verdict, and which were left pending.
  3. connector_asc_analytics with from and to, once for the window before the day and once for the window from it — in execute_typescript, product page conversion per source type, pageDownloads:<Source Type> ÷ pageViews:<Source Type>, and overall. The Series counts sources, not pages: the routed sources carry the page's effect, and Apple Ads traffic sits inside App Store search.

Choose the two windows, and decide whether the page is readable yet against the launch plan's floor; until it is, its read-out is pending. Apple's reports run a day or two late, so the Series may stop short of today.

Write the read-out into the report you save with save_output: the page and its day, both windows, and per source the page views, the page downloads, the conversion before and after and the change in points; then the verdict against the Proposal's success metric and the kill criteria, or the day the page becomes readable. The next Run finds a pending read-out through read_outputs and takes it up.

Done when every custom product page Proposal marked done without a verdict in an earlier report has, in this report, a verdict or the day it becomes readable.

  • apple-search-ads — the ad groups that route to each page.
  • screenshot-optimization — the screenshot sets per page.
  • app-preview-video — a variant preview when a page calls for one.
  • ads — Meta, TikTok and Google campaigns that use the CPP URL as destination.

What it discloses

The Skill reads these files only when it needs them, so the model spends nothing on them the rest of the time.

  • references/cpp-playbook.md

From your accounts to a proposal

  1. 01

    Connect what it reads

    Give the ASO agent the accounts it works on. Kwern never asks for a password, and an agent missing a connection says so instead of guessing.

  2. 02

    The loop runs weekly

    Before it writes a word it reads the foundation doc, which holds the positioning, the audience and the voice, and whatever its connectors return that day.

  3. 03

    The custom-product-pages skill runs

    The agent activates it when the run calls for it, and what the model then reads is the file on this page, word for word.

  4. 04

    A proposal waits for you

    Nothing is published and nothing is spent until you approve it. Approve and Kwern posts it where it holds the keys; where it does not, it hands you the text and the link.

The file, the agency, and the agent

On your ownAn agencyKwern
The methodWhatever you remember to do that weekTheirs, and you never get to read itThis file, open on this page
Who runs itYou, when there is timeAn account manager, between other accountsThe ASO agent, weekly
What it readsWhat you can pull by handWhat you remembered to send themYour connected accounts and your foundation doc
What comes outA draft, sometimesA deck, and a report at the end of the monthA proposal you approve or throw away
What it costsYour eveningsA retainerOne subscription, and the model on your own key

Questions about custom-product-pages

Pair it with

The other skills the same agents reach for during a run.

aso
When the user wants to audit or optimize an App Store or Google Play listing.
competitor-profiling
When the user wants to research, profile, or analyze competitors from their URLs.
copywriting
When the user wants to write, rewrite, or improve marketing copy for any page, including homepage, landing pages,…
app-icon-optimization
Brief and evaluate an app Product's App Store icon for tap-through in search and browse.
app-preview-video
Storyboard an app Product's App Store preview video — the 15–30 s autoplay clip in search and on the product page —…
category-positioning
Recommend the App Store primary and secondary category for an app Product, scoring truth fit, competitive density,…
in-app-events
Plan an app Product's App Store In-App Events — one brief per event (name, descriptions, badge, dates, purpose) plus…
localization
Write an app Product's App Store metadata for its priority storefronts — title, subtitle, keywords field, description…
metadata-optimization
Rewrite an app Product's App Store metadata — title, subtitle, keywords field, description, promotional text.
rating-prompt-strategy
Design when and to whom an app Product asks for a rating so the volume of 4–5 star ratings rises.
review-management
Analyze an app Product's App Store reviews into themes and draft replies as "Reply to review" Proposals.
screenshot-optimization
Plan an app Product's App Store screenshot set — per-slot message, caption copy, order, device sizes — plus A/B…
seasonal-aso
Build an app Product's seasonal calendar and, per moment, the keyword, promotional text and screenshot changes with…

Someone is asking for what you built today.

On Reddit, on X, in ChatGPT's answers. Kwern finds them every morning and drafts the reply in your voice; you decide what goes out.