when someone downloads your app from the App Store, apple doesn't tell you how they found it. did they come from your HN post? that reddit comment? your blog? twitter?
apple provides free tracking through custom product pages. here's how to use it.
why this matters:
you're posting about your app in different places. some channels bring lots of downloads, others barely any. without tracking you keep doing everything, no idea what works. with tracking you see which channels bring downloads and can focus there.
what is a campaign:
a campaign = any place you post about your app. posted on reddit /r/productivity → campaign "reddit-productivity". Show HN on hacker news → campaign "hn-show". wrote blog post with download link → campaign "blog-feature-x". tweeted about update → campaign "twitter-update". comment on HN → campaign "hn-comment".
each place gets its own tracking link. then you see: "40 downloads from HN, 12 from reddit, 3 from that blog post"
apple's free tracking: custom product pages:
normally your app has one App Store URL: https://apps.apple.com/app/id123456789
with custom product pages, you create multiple URLs with tracking codes: https://apps.apple.com/app/id123456789?ppid=reddit-productivity, https://apps.apple.com/app/id123456789?ppid=twitter-launch, https://apps.apple.com/app/id123456789?ppid=email-weekly, https://apps.apple.com/app/id123456789?ppid=hn-show
the ?ppid=whatever is your tracking code. you make it up.
what apple tracks:
for each ppid, apple shows you in App Store Connect: how many people viewed your app store page, how many downloaded, conversion rate (views → downloads).
example results: ppid=reddit-productivity had 1,200 views → 45 downloads (3.75%), ppid=twitter-launch had 800 views → 67 downloads (8.4%), ppid=email-weekly had 450 views → 89 downloads (19.8%). now you know email converts best!
how to set it up:
step 1: create custom product pages. go to App Store Connect, click your app → Product Page → Custom Product Pages, click "+" to create new page, give it a name (internal only, users don't see this), set the ppid using descriptive names like "reddit-productivity" or "twitter-launch", customize the page (or keep it same as default), submit for review (takes ~24 hours).
step 2: create tracking codes for each campaign. make a list of where you'll promote your app: reddit /r/productivity → ppid=reddit-productivity, reddit /r/apps → ppid=reddit-apps, twitter → ppid=twitter, hacker news → ppid=hackernews, email newsletter → ppid=email, blog post → ppid=blog, Product Hunt → ppid=producthunt. create a custom product page for each one.
step 3: use unique links everywhere. when you post about your app, use the ppid link. posted on reddit /r/productivity: "Check out my new app: https://apps.apple.com/app/id123456789?ppid=reddit-productivity". tweeted: "New feature released! Download: https://apps.apple.com/app/id123456789?ppid=twitter-launch". email newsletter: "Try the app: https://apps.apple.com/app/id123456789?ppid=email-weekly".
step 4: check results weekly. in App Store Connect: go to Analytics → App Store Product Page, filter by Custom Product Page, see views, downloads, conversion rate per ppid.
campaign naming tips:
keep ppid names simple and descriptive. ✅ good: reddit-productivity (which subreddit), twitter-launch (which campaign), email-2024-02 (which batch), hn-show (where on HN). ❌ bad: campaign1 (what is this?), test (too vague), reddit (which subreddit?), 20240213 (what happened this day?).
reuse ppids for ongoing channels: if you tweet regularly about your app, use same ppid (all tweets → ppid=twitter). if you post in same subreddit regularly (all /r/productivity posts → ppid=reddit-productivity). this way you see cumulative performance: "twitter brought 245 downloads total".
create unique ppids for one-time campaigns: if you're running a specific promotion use ppid=black-friday-2024, ppid=launch-week, ppid=producthunt-launch.
what you can't track:
apple only tells you: app store page → download. it doesn't tell you: which downloads became paying customers, lifetime value per source, retention by acquisition source. for that, you'd need to estimate or use paid tools.
estimating subscriptions from downloads:
rough math: if 100 people download your app and 15% subscribe (typical for paid apps), you got ~15 customers from that campaign.
track this manually: downloads from reddit ppid are 89, estimated subscribers 89 × 15% = ~13, cost $0 (organic), estimated CAC $0.
vs paid ads: downloads from google ads are 45, estimated subscribers 45 × 15% = ~7, cost $400, estimated CAC $400 ÷ 7 = $57 per customer.
even rough estimates help you decide what's worth doing.
paid attribution tools: when to upgrade:
companies like Branch, AppsFlyer, Adjust offer more advanced tracking. what they give you that apple doesn't: deferred deep linking (user clicks ad before installing, opens app after install → taken directly to the promo), cross-device tracking (user sees facebook ad on laptop, installs app on phone later, tool connects the dots), fraud detection (detects fake installs from bots/click farms), multi-touch attribution (user sees 3 ads before installing, tool splits credit between them).
costs: Branch free up to 10k users/month then $200+, AppsFlyer $200-500/month, Adjust $300-800/month.
when to use them: spending >$10k/month on ads (ROI justifies cost), running complex campaigns across many channels, need to prove which ads work to investors.
don't use them if: spending <$5k/month (use apple ppid instead), bootstrapped (overkill), mostly organic growth.
common mistakes:
using same link everywhere: if you post the same link on twitter, reddit, email - you'll never know which worked. always add ?ppid=source.
too many campaigns: don't create new ppid every day (twitter-feb-1, twitter-feb-2, twitter-feb-3). you can't see the big picture. instead group by channel: twitter (all tweets), reddit-productivity (all posts in that subreddit).
forgetting to create ppid first: you can't add ppid retroactively. if you post a link without ppid, those downloads are lost. create your ppid campaigns before you start promoting.
not checking results: set a weekly reminder to check App Store Connect analytics. seeing "reddit brought 0 downloads this week" tells you to try different subreddits.
real example: productivity app:
developer posts about their macOS productivity app in different places.
week 1: no tracking. posted on HN, reddit, twitter, got 85 downloads total, no idea which channel worked.
week 2: added ppid tracking. hacker news ppid=hn got 68 downloads, reddit /r/productivity ppid=reddit-productivity got 12 downloads, twitter ppid=twitter got 5 downloads.
insight: HN brought 80% of downloads (high-intent users), reddit brought some (decent community fit), twitter brought very few (low conversion).
what changed: focused on HN (post every few months with updates), kept reddit (20 min posts, okay return), reduced twitter time (low ROI).
understanding where downloads came from changed where they spent time.
summary:
setup (5 minutes): create custom product pages in App Store Connect, assign unique ppid for each channel, use ppid URLs when promoting your app.
check weekly: App Store Connect → Analytics → Custom Product Pages, see which channels drive downloads, double down on what works, kill what doesn't.
works for: iOS apps, macOS apps, any app distributed through App Store. completely free, built into App Store Connect.
see also: attribution index, app unit economics, freemium economics