Make a QR code for a link, Wi-Fi, a contact, an event or both app stores, and see it proven before it goes to print. Every code is decoded again the moment it is drawn, then checked for contrast, quiet zone, density and printed size. Nothing you type leaves this browser.
1 · What the code opens
Add UTM tags so the scans show up in GA4
Need every channel tagged, or a link checked for GA4? Build UTM link
One code for both stores. iPhone and iPad open the App Store, Android opens Google Play, and everything else sees a page with both buttons. The fallback is only ever shown as a link, never opened automatically.
Times are converted to UTC, so the calendar shows the right hour in every time zone.
2 · Style
Logo and brand presets Pro
A logo switches error correction to H, and the code is decoded again with the logo in place.
3 · Print size
Preview
Downloads need a free account: 10 codes a month, each downloaded as often as you like, unlimited with Pro. The preview is open to everyone.
Preflight
Exact text inside the code
Dynamic QR codes (edit the destination after printing, scan statistics) are coming to Pro.
Barcode for packaging, labels and tickets
For EAN and UPC, type the number without its last digit and the check digit is added, or type all of it and the check digit is verified.
The barcode engine loads the first time this tab opens.
Downloads need a free account: 10 codes a month, each downloaded as often as you like, unlimited with Pro. The preview is open to everyone.
A GTIN has to be licensed from GS1 before it goes on a product. This tool draws the symbol and checks the digits, it does not issue numbers.
One QR code per row Pro
Columns: name, url or data, and optionally utm_source, utm_medium, utm_campaign, utm_content. Every code gets the same scan check as a single one, and the ZIP carries a CSV report. The colours, quiet zone and error correction come from the QR code tab. Anyone can preview the first three rows.
Code
Name
Content
Scan check
Why a QR code needs a preflight
A QR code that looks fine on screen can still fail on the shelf. The usual causes are a brand colour with too little contrast, a design that crops the white border, a long tracking link that makes the modules tiny, and a print that is simply too small for the distance people stand from it. None of those show up until the job is printed, so this generator checks them before you download.
What the scan check does
Each time the code is drawn, the pixels are read back by jsQR, an open source decoder, exactly as a phone camera would read an image. The decoded text has to match what you typed byte for byte, including accents and line breaks. If a logo, a colour or a missing quiet zone stops it decoding, the check fails and says so. The other checks are graded pass, warning or fail:
Contrast. Scanners work on brightness, so the colours are compared with the WCAG contrast formula. Below 3:1 fails, below 4.5:1 warns. Light modules on a dark background warn, because some scanner apps never try the inverted image.
Quiet zone. The QR standard, ISO/IEC 18004, asks for a light margin four modules wide on every side. Less than that warns.
Density. The version and module count are shown. From version 8 the code needs a larger print, and a shorter link is usually the better fix.
Print size. The printed width is checked against your scanning distance and a minimum module size.
How big to print a QR code
The rule of thumb used here is the ten to one rule: the code should be at least one tenth of the scanning distance wide, so a poster read from two metres needs a 20 cm code. QR Code Generator publishes the same ratio in its minimum size guide, together with a floor of 2 by 2 cm. A dense code needs more room than the ratio suggests, so each module is also kept at 0.4 mm or more, which is the smallest module the GS1 General Specifications allow for retail QR codes (0.396 mm). The calculator takes the largest of the three, then adds the quiet zone. The print export writes that size and resolution into the PNG, so layout software places it at its real size, and the SVG carries the size in millimetres.
Which type to choose
Type
What the phone does
Website
Opens the link. Add UTM tags so scans are attributed in GA4.
App link
Sends iPhone to the App Store and Android to Google Play from one code.
Wi-Fi
Offers to join the network, no typing.
Contact
Offers to save a vCard 3.0 contact.
Event
Offers to add the event to the calendar, in UTC.
Email, SMS, phone
Opens a prepared message or starts a call.
Tracking scans in GA4
A QR code cannot tell analytics where it was printed, so the link has to. Tag it with utm_source for the placement and a utm_medium that GA4 maps to a channel. utm_medium=qr is popular but lands in Unassigned unless you define a custom channel group, which the generator warns about. The UTM builder checks a link against the full GA4 channel list.
Questions about QR codes
No. They are static codes: the link or text is stored in the pattern itself, so they keep working for as long as the destination exists. There is no redirect service in between that could be switched off. The one exception is the app link, which passes through adchecklab.com so it can pick the right store.
No. Encoding, decoding, the checks and the exports all run in this browser. Wi-Fi passwords, contacts and CSV files never reach a server. Analytics records which features are used, never what you typed.
SVG for print and for anything that will be scaled, because it is vector and stays sharp at any size. PNG for slides, email and social posts. For print, use the print PNG, which is rendered at the exact physical size and resolution you chose.
M suits most print. L keeps a long link compact on screen. Q helps on rough surfaces and outdoor signs. H is needed for a logo in the centre, and the generator switches to it automatically when you add one.
The app link page only ever redirects to an App Store or Google Play address it builds itself from a numeric app id or a valid package name. The fallback website is shown as a labelled link that the visitor has to click, and only https addresses are accepted, so the link cannot be abused to send people somewhere else.