How to Make App Store and Play Store QR Codes
Where to find the right URL, what each part means, and how to handle iPhone and Android with one or two codes.
Last updated
The Apple App Store URL (https://apps.apple.com/…)
An App Store link can look like this: https://apps.apple.com/us/app/example-app/id1234567890. The numeric ID is the required part; the storefront path and app-name slug are optional.
| Part | Example | Required? |
|---|---|---|
| Storefront path | /us/ | No - omitting it lets Apple choose a storefront |
| App name slug | /app/example-app/ | No - cosmetic, canonicalized by Apple |
| Numeric ID | /id1234567890 | Yes - this is what identifies the app |
You can shorten the URL all the way down to https://apps.apple.com/app/id1234567890 and it will still resolve. Apple's own campaign-link documentation uses that storefront-less format, so the numeric ID is the part that has to be correct.
Real examples to scan-test against: WhatsApp Messenger (id310633997) and Google Maps (id585027354). Open either link in a desktop browser and you can see exactly what a scanner will land on.
Where to find it: open your app on apps.apple.com in any browser and copy the address bar. If you are the developer, App Store Connect shows the URL on the app information page once the record exists; you can generate the QR code before the app is even approved.
The Google Play Store URL
Google Play uses a query-string format: https://play.google.com/store/apps/details?id=com.example.app. The id parameter is the package name from the app manifest. For instance, WhatsApp is com.whatsapp and Google Maps is com.google.android.apps.maps.
Where to find it: open the app listing on play.google.com and the package name is right there in the URL after id=. If you are the developer, the Play Console shows the package name on the app dashboard. For internal or closed tests, Google's Play Console help says testers may need that Play Store URL and, in some cases, the separate opt-in link.
Country And Language Routing
The /us/ in an App Store URL and locale parameters on Google Play are optional. If you omit them, the store decides which storefront or language to show. If you hardcode them, users can stay on that specific territory or language, which is helpful for single-market material but not ideal for general distribution.
If you are printing material for a single market and want the listing to display in that market every time (for example a poster in a Tokyo subway station), the country code in the path is fine. For everything else, omit it.
One QR code or two?
A QR code points at exactly one URL. To cover both iPhone and Android with a single code you need a redirect service that detects the device and forwards to the right store. Services like AppsFlyer OneLink, URLgenius, Branch, and similar smart-link providers do this.
You can instead place two codes side by side and label them "iPhone" and "Android". This approach avoids a third-party redirect service and tells readers which code to scan.
Smart-link services provide one code, attribution data, and deep links into an installed app. They also add a service dependency and a redirect. Choose based on your layout, analytics needs, and tolerance for that dependency.
Before printing anything, open the encoded URL in a desktop browser to confirm it resolves to the right app, then scan-test the exported file from both an iPhone and an Android phone. An iOS-only test misses the case where Android users land on an App Store link they cannot open, and a wrong numeric ID or package name will not surface until the posters are already on the wall.