Repository navigation
feat(get-app): tag App Store links for App Analytics campaigns - #6958
Merged
Merged
Conversation
Every App Store link on the webapp now carries Apple's campaign parameters (pt, our App Store Connect provider ID, and a ct surface tag), so App Store Connect > App Analytics > Campaigns can report impressions, downloads and conversion per surface. Before this, store taps only carried utm_source, which Apple ignores, so they all landed in one undivided Web Referrer bucket. - GetAppButton links straight to the App Store with ct=webapp_get_app_button. - The mobile header, footer and sheet CTAs and the landing install card go through the r.daily.dev/get smart link, which forwards its whole query string to the store, so pt and ct ride along (ct=webapp_<utm_source>). utm_source stays for our own redirector logs. - The static QR codes are unchanged: longer URLs would make them denser around the logo knockout, so their store attribution belongs on the redirector (api.daily.dev/get). The Smart App Banner now passes app-argument with the page's canonical URL. Readers who already have the app and tap Open land on the same page instead of the app's home. The iOS app already loads https URLs it receives through openURLContexts, on the same daily.dev origin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
idoshamun
approved these changes
Oct 19, 2026
idoshamun
left a comment
Member
There was a problem hiding this comment.
Store links pick up pt/ct, and tracking events stay the same. The only change users see is the Smart App Banner app-argument, which opens the current page in the app. The iOS SceneDelegate loads incoming https URLs on both cold and warm start. Two notes, neither blocking: please check banner Open on an iPhone with the app installed after deploy. And on /search, the canonical query isn't encoded, so a comma in the search text would cut app-argument short.
Reviewed by AI.
Approved through AI review.
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
pt(our App Store Connect provider ID,125432506) plus actsurface tag. App Store Connect → App Analytics → Acquisition → Campaigns can then report impressions, downloads and conversion per surface. Today store taps carry onlyutm_source, which Apple ignores, so they all land in one undivided "Web Referrer" bucket.GetAppButton(desktop popover) links to the App Store withct=webapp_get_app_button.r.daily.dev/getsmart link. It forwards its whole query string to the store, soptandct=webapp_<utm_source>reach the App Store.utm_sourcestays for our redirector logs, and Google Play ignores the Apple params. Verified live:r.daily.dev/get?utm_source=mobile_header&ct=…&pt=…ends atapps.apple.com/…?utm_source=mobile_header&ct=…&pt=….features/getApp/appStoreLinks.ts(with spec). It capsctat Apple's 40-character limit.app-argument: the banner now passes the page's canonical URL (https://daily.dev/...). Readers who have the app and tap Open land on the same post instead of the app's home. The iOS app already loads https URLs it receives throughscene(_:openURLContexts:), anddaily.devis its primary origin.getAppQr.svgsays, their store attribution belongs on the redirector (api.daily.dev/get). A follow-up could addptthere and maputm_source→ctserver-side, which would also cover emails and QR scans.Context: the daily.dev iOS ASO plan, where web is about 30% of iOS first-time downloads and the plan relies on owned-channel download bursts we need to measure per surface. The marketing site (main-site) got the same
ptin dailydotdev/recruiter-landing#601.Events
No new tracking events. Existing
download appevents are unchanged.Experiment
No.
Manual Testing
NODE_ENV=test jest src/features/getApp src/features/onboarding/components/signupHeroin shared: 9 suites, 55 tests passpnpm --filter webapp test: 86 suites, 642 tests passpnpm --filter webapp typecheck: clean;scripts/typecheck-strict-changed.js origin/main: passesapp-argumentshould be checked on an iPhone with the app installed after deploy🤖 Generated with Claude Code
Preview domain
https://feat-app-store-campaign-links.preview.app.daily.dev