Why mobile app QRs are different from generic URL QRs
A standard URL QR points at a web URL. Scanners open the browser, the page loads, conversion happens (or doesn't) on the web. For app install campaigns, the destination isn't a web page — it's a native app store, and the OS-detection requirement adds a layer of complexity that generic URL QRs don't handle gracefully.
The failure mode is concrete. An app developer prints a QR on product packaging encoding apps.apple.com/app/acme-utility/id123456789. iPhone scanners land in the App Store, install path is one tap. Android scanners land on a webpage that says 'Open this URL in the App Store' — a path that requires the Android user to manually find the same app in Google Play. 40-60% of Android scanners give up.
The right pattern: an app store QR that detects the scanner's OS at scan time and routes iPhone to the App Store and Android to Google Play. The QR is the same printed code on the packaging; the routing happens server-side based on the User-Agent string the scanner's browser sends.
Three categories of mobile app QR campaigns:
Brand-driven install campaigns. A consumer brand launches an app (loyalty, ordering, AR experiences) and prints QRs on packaging, in-store signage, and direct mail. The goal is install, then engagement.
Event and contextual install campaigns. A conference, sporting event, or temporary exhibit has a dedicated app (event navigation, in-venue ordering, AR overlays). The QR is the install bridge for attendees who don't already have it.
Acquisition campaigns from print and OOH. Billboards, magazine ads, transit signage with QR codes for app installs. Scan-to-install attribution is the metric; cost-per-install is the lever.
Each category has slightly different optimization patterns, but all three benefit from the same OS-aware routing infrastructure.
The App Store and Play Store URL patterns
App Store URL pattern (Apple):
https://apps.apple.com/{country}/app/{app-name}/id{numeric-id}
countryis the two-letter region code (us, gb, jp, au) — used for Apple's URL routing but the scanner's account region determines what they actually seeapp-nameis a URL-safe slug of the app's display namenumeric-idis the App Store ID
Real examples:
- apps.apple.com/us/app/instagram/id389801252
- apps.apple.com/us/app/spotify-music-and-podcasts/id324684580
Play Store URL pattern (Google):
https://play.google.com/store/apps/details?id={package-name}
package-nameis the Android package identifier (e.g.,com.instagram.android,com.spotify.music)
Real examples:
- play.google.com/store/apps/details?id=com.instagram.android
- play.google.com/store/apps/details?id=com.spotify.music
For an OS-aware QR campaign, you need both URLs. Encode them in a dynamic QR that detects the scanner's OS and routes to the correct store. EZQR's app store QR generator handles this routing automatically — paste both URLs, generate one QR.
Avoid `itunes.apple.com` URLs. Apple deprecated this pattern; legacy iTunes links redirect inconsistently in 2026.
Avoid third-party shortener URLs (bit.ly, t.co, custom-domain shorteners) for app store routing. Shorteners add a redirect hop that increases scan-to-install latency, can trigger spam filters on corporate networks, and reduces the URL's self-describing quality. The user sees bit.ly/xyz in the URL preview before scanning rather than apps.apple.com/... — trust matters.
For multi-region apps where the storefront URL varies by country, the country code in the path doesn't constrain the scanner's region — Apple substitutes based on the scanner's account.
OS-aware routing — how the single-QR-two-stores trick works
OS-aware routing for mobile app QRs works through standard web technology — no special infrastructure required, just a redirect URL that reads the scanner's User-Agent string and routes accordingly.
The flow:
1. The QR encodes a redirect URL pointing at EZQR's (or another generator's) routing service.
2. The scanner's phone camera scans the QR; the QR decodes to the redirect URL.
3. The phone's browser opens the redirect URL, sending its User-Agent string.
4. The redirect server reads 'iPhone' / 'iPad' / 'Android' from the User-Agent and routes to the appropriate store URL.
5. The scanner lands at the App Store on iOS or Google Play on Android, ready to install.
From the scanner's perspective, the experience is seamless — point camera, tap notification, store opens. The OS detection is invisible.
For edge cases:
Desktop browsers typically fall back to a web landing page or default to one store (usually iOS for symmetry with Apple-heavy creative audiences, or a landing page with both store badges for explicit choice).
Older iOS or Android with limited App Store support (uncommon but exists) may need fallback URLs. Most generators handle this gracefully.
Non-mobile devices (Linux tablets, niche hardware) typically get the web landing page fallback.
For any production install campaign, OS-aware routing is the right default. The cost is the dynamic QR subscription ($5/mo Lite plan); the benefit is 40-60% recovery of scanners who would otherwise hit the wrong store and bounce. Pays for itself on the first 50-install campaign.
Deferred deep linking — the post-install context handoff
A standard app install QR delivers a scanner from the QR to the store to the installed app's default-launch screen — usually the login or onboarding flow. The scanner never sees the specific content the QR campaign was promoting.
Deferred deep linking solves this. The QR encodes a URL that:
1. Detects whether the app is installed on the scanner's phone.
2. If installed → opens the app at the specific content (a product page, a discount code, a campaign-specific onboarding flow).
3. If not installed → routes to the App Store / Play Store, installs the app, and then opens the app at the same specific content on first launch.
The 'deferred' part is critical. Standard deep links only work if the app is already installed. Deferred deep links carry the post-install destination through the store install flow and deliver it to the app on first launch.
Four major platforms support deferred deep linking:
Branch (now owned by Mozn) — the long-time standard; sophisticated attribution, broad SDK support, free tier sufficient for most app launches.
Adjust — strong attribution focus; popular with mobile-first companies running paid install campaigns.
AppsFlyer — enterprise-scale attribution; common in large CPG and gaming brands.
Firebase Dynamic Links (Google) — formerly free; Google deprecated the product in 2025 with sunset through 2025-2026, so any new campaigns should pick one of the alternatives above.
The practical pattern: pick one platform, integrate the SDK in your iOS and Android apps, generate a Branch (or Adjust / AppsFlyer) link with the desired post-install context, and encode that link in the QR. The platform handles OS detection, store routing, and post-install deep linking — all in one URL.
For any install campaign where the post-install experience matters (campaign-specific landing screen, discount code redemption, contextual onboarding), deferred deep linking is the standard. For pure 'install the app' campaigns where the default first-launch flow is fine, the standard OS-aware QR is sufficient.
Step-by-step: generate a high-converting app install QR
The full workflow from picking a destination to printing at scale:
Tips
- **Step 1: Decide static vs dynamic.** Static OS-aware routing requires a third-party redirect (Branch, etc.); dynamic QRs through EZQR's [app store generator](/qr-codes/app-store) handle the OS detection without external SDKs. Use the platform that matches your install-tracking stack.
- **Step 2: Copy both store URLs.** App Store: `apps.apple.com/us/app/{name}/id{id}`. Play Store: `play.google.com/store/apps/details?id={package-name}`. Use canonical URLs, not shortened or `itunes.apple.com` formats.
- **Step 3: Set up deferred deep linking** if post-install context matters. Branch is the standard; SDK integration takes a sprint; the resulting link replaces the raw store URL in the QR.
- **Step 4: Add UTM parameters or platform-specific tracking.** Apple Search Ads UTM equivalents flow into App Store Connect; Google Play campaign tracking flows into Play Console. Tag the QR per placement for per-placement attribution.
- **Step 5: Generate the QR.** Paste the OS-aware routing URL (or deep link URL) into [EZQR's URL generator](/qr-codes/url). Customize colors and embed a logo to match the brand.
- **Step 6: Export at the right size.** Packaging QRs work at 2-3 cm; in-store signage at 5-8 cm; OOH (billboard) at 30+ cm. See the [QR code size guide](/guides/qr-code-size-guide).
- **Step 7: Pair with prompt copy.** 'Get the app' / 'Install in 10 seconds' / 'Free download' in 10–12pt type below the QR. Doubles scan-to-install conversion vs naked QRs.
- **Step 8: Test on iPhone, Android, and desktop before printing.** Verify the QR routes correctly to each store, the install flow completes, and the post-install deep link (if applicable) delivers the correct first-launch experience.
Best print placements for app install campaigns
Five categories of placement that consistently outperform digital-only install campaigns on cost per install:
Product packaging. A consumer brand's app QR printed on the product box, the bag insert, or the inside of the lid. Captures the post-purchase moment when satisfaction is fresh and the install context is clear ('the brand wants me to scan this'). Particularly effective for CPG, beauty, food and beverage, and household goods.
In-store signage. Storefront windows, register-area cards, fitting room mirrors. Captures the in-context shopping moment with the highest relevance to the app's value proposition. Works for retail loyalty apps, brand experience apps, and shopping companion apps.
Event signage. Conferences, trade shows, sporting events, festivals. Event-specific apps with in-venue value (navigation, ordering, AR) install at high rates when promoted at the entry, registration desk, and key wayfinding nodes.
Direct mail. A postcard or letter with a QR for app install can complete the install funnel for prospects who reviewed the digital campaign but didn't act. The physical reminder + one-scan install often closes the loop.
Billboard and out-of-home (OOH). Billboards, transit signage, bus stops. Higher scan rate than people expect — scanners standing at bus stops with phones already out scan QRs at meaningfully higher rates than scanners walking past mall storefronts.
For each placement, match the QR size to the scan distance: 2-3 cm for arm's-length scanning (packaging), 5-8 cm for in-store (1-2 m), 8-12 cm for mid-range OOH, 30+ cm for billboard-distance OOH. Always pair with prompt copy and a clear value proposition.
Attribution and measurement — proving the campaign installed apps
Without measurement, the QR-driven install campaign is unmeasurable. The good news: the attribution stack for mobile app installs in 2026 is mature.
Apple Search Ads attribution for iOS installs surfaces install-to-store routing data in App Store Connect. Configure campaign-specific UTMs on the App Store URL and they flow into Search Ads attribution. Apple's App Analytics report includes the source attribution.
Google Play campaign tracking for Android installs works similarly through Play Console. Append &referrer=utm_source%3Dqr%26utm_medium%3Dpackaging to the Play Store URL to flow attribution into Play Console acquisition reports.
Branch / Adjust / AppsFlyer offer cross-platform attribution that's more sophisticated than either Apple's or Google's native tools — install attribution, post-install behavior, LTV cohorts. Branch's free tier is sufficient for most app launches; paid plans unlock retroactive attribution and cohort analysis.
EZQR's [dynamic QR analytics](/qr-codes/dynamic) provide the upstream scan data — timestamp, geography, device — that ties printed-placement performance back to install velocity. Pair scan analytics with attribution data for the full funnel.
The practical pattern for any campaign expected to drive meaningful install volume:
1. Tag the QR with UTMs identifying the campaign and placement.
2. Route through a Branch / Adjust / AppsFlyer link if post-install context matters.
3. Measure scan-to-store-landing via EZQR dashboard and Branch (etc.) dashboard.
4. Measure store-landing-to-install via Apple Search Ads or Play Console attribution.
5. Measure install-to-engagement via your app's analytics platform (Mixpanel, Amplitude, in-house).
The full funnel — scan → store landing → install → app open → engagement — is measurable end-to-end. Without this stack, the cost-per-install math is guesswork.
Common mistakes that bleed installs
Eight failure patterns we see repeatedly when reviewing app install QR campaigns:
1. Single-URL QR for cross-platform apps. Encodes only the App Store or only Play Store URL, losing 40-60% of scanners on the wrong platform. Use OS-aware routing.
2. Third-party shortener URLs. bit.ly, t.co, custom shortened domains add latency, reduce URL preview trust, and can trigger spam filters. Use canonical store URLs.
3. Missing UTM parameters. Without per-placement UTM tagging, the install attribution data is lost. Tag every QR placement with utm_source=qr&utm_medium=packaging (or whatever placement).
4. No deferred deep linking for context-sensitive campaigns. Install completes, the app opens at the default launch screen, the scanner never sees the campaign-specific content. Use Branch / Adjust / AppsFlyer for post-install context.
5. Naked QR without prompt copy. A QR with no surrounding 'Get the app' converts at half the rate of a prompted QR. Always pair with prompt copy.
6. Wrong size for the placement. Billboard QRs at 5 cm fail at 30 m scan distance. Packaging QRs at 8 cm crowd the design. Match size to scan distance using the 10:1 rule.
7. Routing through web landing pages that add a step. 'Scan, land on a landing page, tap Get the App.' Adds 1-2 steps that drop conversion. Route directly to the store unless the landing page genuinely adds value (verification, content gating, etc).
8. Not testing the install flow before printing. Print 5,000 cards with a broken QR, find out after distribution. Test scan-to-store-to-install end-to-end on iPhone and Android before any production print run.