Create a dynamic QR code, open Routing, and add an Android rule. Free, no sign-up, and the Play link stays editable after you print.
Encode the https listing URL, not market://
Your app has two addresses. The web one is https://play.google.com/store/apps/details?id=your.package.name, using the package name exactly as Play Console shows it. The other is market://details?id=your.package.name, an Android-only scheme that hands off to the Play app a fraction sooner.
Put the https one in print. A QR code on a poster is scanned by whoever walks past, and market:// is not a web address: an iPhone, a desktop browser, or a Huawei device with no Play services gets an error instead of a page. The https URL opens the Play app when Play is there and a normal listing page when it is not. The fraction of a second you save is not worth the people you lose.
Huawei is the case everyone forgets
Huawei devices sold since Google services were withdrawn ship without Play. Send one a Play listing and the person gets a web page with no install button, which reads as a broken link rather than a missing app. If your app is on AppGallery, that is a different URL and needs its own rule.
Toolember treats Huawei as a narrower kind of Android: an android rule still catches a Huawei scanner, so nothing breaks if you never think about it, and adding a huawei rule above it takes priority when you do. Both are on the free plan. Among the tools we compared, most do not mention Huawei at all, and one puts device routing of any kind behind a paid tier, which is worth knowing before you build a print run around it.
Whether it matters depends entirely on where your scanners are. If your audience is North American, you can ignore this. If it includes markets where Huawei kept meaningful share, a single rule is cheap insurance on a code you cannot reprint.
Set it up in four steps
Create a dynamic QR code with your website as the destination. That is what desktop scanners will get, so make it a real page rather than a store link.
Open Routing and add a rule for android pointing at your Play listing URL.
Add an ios rule for the App Store if you ship on both, and a huawei rule above the Android one if you are on AppGallery.
Scan it yourself on a real Android phone before it goes anywhere near a printer.
That last step is not padding. A routing rule with a typo in the package name still produces a valid QR code that scans perfectly and lands on a Play error page, and you will not find out from looking at the pattern.
What it will not do
Routing picks a destination from the device and country of the scan. It cannot tell whether your app is already installed, and it cannot open an installed app on a particular screen. That is deep linking, and it needs Android App Links set up on your own domain plus handling inside the app.
It also does not attribute installs. If you need to know that a specific scan became a specific install, that is deferred deep linking, which is what the paid attribution platforms sell and what Firebase Dynamic Links used to bundle before it shut down in August 2025. What you get here is the scan count and the device split, which answers “is the poster working” without answering “who installed”.
Google Play, AppGallery and the App Store are trademarks of their respective owners; this page is not affiliated with any of them.
Frequently Asked Questions
What URL should a Google Play QR code point to?▾
Use the https listing URL, https://play.google.com/store/apps/details?id=your.package.name, where the id is your app’s package name exactly as it appears in Play Console. It opens the Play app on an Android device and a normal web page anywhere else, which is what you want from a printed code that strangers will scan.
Should I use the market:// scheme instead?▾
No, not in a printed QR code. market://details?id=your.package.name opens Play slightly more directly on a device that has it, but it is not a web URL: an iPhone, a laptop or a Huawei device without Play services gets an error rather than a page. The https listing URL degrades gracefully on everything, so it is the safer thing to commit to print.
What happens when a Huawei phone scans a Play link?▾
Newer Huawei devices ship without Google Mobile Services, so a Play listing opens as a web page they cannot install from. If your app is on AppGallery, a routing rule can send Huawei scanners to the AppGallery listing instead. Toolember treats Huawei as a narrower case of Android: an Android rule still catches those devices, and a Huawei rule placed above it takes priority when you add one.
Can one code serve Play and the App Store?▾
Yes, and it usually should. A dynamic code checks what the scanner is running and forwards accordingly: Android to Play, iPhone to the App Store, desktop to your website. Printing two codes side by side asks the reader to work out which is theirs, and spends half your poster or box panel on that decision.
Does the QR code know if the app is already installed?▾
No. Routing chooses a destination from the device and country of the scan; it cannot see what is installed. Opening an installed app at a specific screen is deep linking, which needs Android App Links configured on your own domain plus handling inside the app. Routing gets people to the right store listing, and does not attribute installs.
Can I change the Play link after the code is printed?▾
Yes. The QR pattern encodes a short redirect you control, not the store URL, so editing the rule updates every copy already printed. In practice this is what lets you ship a code on packaging before the Android build is live, then add the Play rule the day it is approved.
How do I tell whether Android or iPhone users are scanning?▾
Each scan records the device that made it, so the split shows up in the code’s own scan history. That is usually more honest than store-side install numbers, because it counts the people who scanned regardless of whether they went on to install.