App download QR code generator
100% Private & Local — Your data never leaves your browser. These QR codes are permanent and will never expire.
App download settings
Design
Add a centre logo
The image is read in this page and embedded in the code as a data: URL. It is not uploaded, and it stays inside the file you download.
More design options
The dark half of the code. Keep it well below the background in lightness.
Covers the quiet zone as well as the gaps between modules. A transparent background leaves it out of the file, so nothing is drawn with it.
Contrast 11.5:1 between the modules and the background.
PNG and WebP keep an alpha channel; the SVG simply omits the background rectangle. Whatever the code is placed on becomes the light half of the contrast.
A gradient fills the dark modules only. Its lighter end sets the contrast a scanner actually gets, so both ends have to stay dark.
The second colour, used only while a gradient is selected. It is measured for contrast alongside the first.
Degrees clockwise from a left-to-right sweep. A radial gradient spreads from the centre outwards, so the angle applies to a linear one only.
Rounded shapes cover less of each cell. The centre stays covered, which is where a decoder samples, but a small print of a dense code reads more reliably as squares.
The ring of the three finder patterns.
The eye inside each finder pattern.
The blank margin around the code, measured in modules. 4 is the specified minimum.
Higher recovery survives more damage and costs capacity, so the same content produces a denser symbol.
A logo sits at the centre and holds the level at H. Its width limit follows the symbol: 14% on the smallest code, 30% on a dense one.
Live preview & export
Enter the address of the page that offers both stores, or choose a single store link instead.
Export
Raster, for screens
Complete the form to enable the downloads.
Export size and encoded text
- Payload
- Nothing encoded yet
- Symbol
- Not built yet
- Recovery
- M
Waiting for input
Encode an App Store link, a Google Play link, or a page of your own that offers both. Which of the three the code carries is your choice, made explicit below because a single code cannot make it for you.
When someone scans it
The phone opens the URL you selected. A store link normally hands off to the App Store or Play Store app; a link to your own page opens in the browser.
Why one code cannot send iPhones and Android phones to different stores
A QR code is a fixed string of characters. The pattern that gets printed encodes that string and nothing else — there is no logic inside it, no variables, and no way for it to inspect the phone that reads it.
Products that appear to branch by operating system do it one step later. The code carries a link to a redirect service, the service receives the request, reads the User-Agent header the phone sends, and answers with a redirect to the matching store. The branching happens on a server.
This site has no server. Every page is a static file and the encoding runs in your browser, which is what keeps the data local and the codes free of an expiry date — but it also means there is nothing here that could receive a scan and decide where to send it. Rather than pretend otherwise, this tool encodes exactly one address and asks you which one.
Using a landing page you control
If you need one printed code to serve both platforms, the redirect has to live somewhere you own. Two approaches work, and neither requires anything from this site.
The simplest is a plain page — example.com/get-the-app — with an App Store button and a Play button on it. The visitor picks. It costs one extra tap, it works on desktop browsers and on platforms neither store covers, and it never breaks. The alternative is a server-side redirect on that same path that inspects the User-Agent and issues a 302 to the right store, falling back to the two-button page when the header is unfamiliar.
Either way the printed code points at your own URL, so you can change stores, add a third platform or swap the app entirely without reprinting anything.
- Two-button page: no server logic, works everywhere, one extra tap
- User-Agent redirect: one tap, needs a server, needs a fallback for unknown agents
- Both keep the printed code pointed at a path you own
Store link formats worth knowing
Apple listings live at apps.apple.com/app/id followed by the numeric app identifier, often with a country segment such as /gb/ or /us/ before it. Including a country locks the link to that storefront; leaving it out lets Apple choose by account region, which is usually what a printed code wants.
Google Play listings are play.google.com/store/apps/details?id= followed by the package name, for example com.example.app. Both stores append campaign and referral parameters when you copy a link from a marketing dashboard. Those parameters lengthen the payload and make the printed grid denser, so strip anything you do not need before encoding.
Questions and answers
Every other generator offers an iOS-and-Android code. Why not this one?
Because those codes point at the generator's redirect service rather than at a store. That works while the service runs and while your subscription is current, and the code dies with either. The trade is real and it is yours to make — this site simply cannot offer the service half of it, so it does not sell the appearance of one.
Does an App Store link work when an Android phone scans it?
It opens, but not usefully. The Android browser loads the App Store web page, which shows the listing and cannot install anything. The reverse is the same: a Play link on an iPhone renders a web listing with no install path. That is exactly the case the landing page option exists to cover.
Can I add a campaign tag to see where installs came from?
You can — both stores accept their own attribution parameters, and you paste the finished URL here. Be aware that the parameters lengthen the string, which raises the QR version and makes the modules smaller at any given printed size. Check the code still scans from your intended distance after adding them.
What if my app is not in either store?
Encode the download page directly with this tool's landing page option, or use the URL tool if that is all you need. A direct link to an installer file is a poor choice for a printed code: browsers on both platforms warn about or block sideloaded packages, and the file path tends to change with every release.
How a static QR code works
Every code on this site is static: the payload is written into the black and white modules themselves. Nothing is looked up when the code is read, no server of ours takes part, and no subscription holds the printed code up. The same property is the limit — once it is printed, what it contains cannot be changed.
Three things then decide whether a printed code reads: how many bytes the payload came to, which recovery level absorbs the damage, and how wide a single module ends up on paper. These guides work through each of them with the numbers.