Two different safety questions
“Are QR code generators safe” collapses two separate questions that have different answers, and conflating them is why the advice online is so muddled.
- What does the generator learn about me when I create a code? This is about where the code is built — in your browser, or on someone’s server.
- What does it learn about everyone who scans it, forever? This is about whether the finished code contains your content or a redirect through the vendor.
The second question matters far more, lasts far longer, and is almost never asked. A generator can be impeccable about the first and still put itself permanently in the path between your customers and your content.
What the generator sees when you create a code
It depends entirely on where the encoding happens, and there are only two architectures.
| Where the code is built | What the vendor receives | How to tell |
|---|---|---|
| In your browser (client-side) | Nothing. The content never leaves the device. | The preview updates with no network request; it keeps working offline. |
| On their server | Everything you typed — URL, Wi-Fi password, contact details. | Each change triggers a request; the page breaks without a connection. |
This is not a subtle distinction. If a tool renders the QR image on its server, it has necessarily received your content in order to do so. For a marketing URL that may not matter. For a Wi-Fi password or a full contact record it is a meaningful disclosure to a company you had not previously heard of.
Whether they retain it is a matter of policy rather than architecture — and policy can change, be ignored, or be rendered irrelevant by a breach. Architecture cannot.
What the vendor sees every time someone scans
This is the question that outlives the decision. If the generator produced a dynamic code, the pattern does not contain your URL — it contains a short link on the vendor’s domain. Every scan, for as long as the code exists, goes to their server first.
That means the vendor sees, for every person who ever scans your printed code:
- Their IP address, and therefore their approximate location
- Their device and operating system
- The exact time of the scan
- Which of your codes they scanned, and how often
None of that is a flaw. It is how the feature works: you cannot have scan analytics without someone collecting the scans. The problem is that it is frequently sold as a free bonus rather than as a decision you are making on your customers’ behalf.
How to check a generator yourself
You do not have to trust anyone’s claims. Four checks, none of them technical:
- Scan your own code and read what comes out. This is the decisive test. If your phone shows your URL, the code is static and nothing is in the middle. If it shows a short link on the generator’s domain, every future scan is being logged by them.
- Turn off your network and try to generate a code. A client-side generator keeps working. A server-side one cannot.
- Open the browser’s network tab while you type. If the content you are encoding appears in an outgoing request, it has left your machine.
- Look for an expiry or a scan limit. Free tiers that cap scans or expire codes are, by definition, dynamic — the vendor can only enforce a limit on something that passes through them.
A tool that passes all four cannot be tracking your users, whatever its privacy policy says, because there is no mechanism by which it could.
The other risk: scanning someone else’s code
Everything above is about generating. The more common consumer risk runs the other way — scanning a code someone else placed.
A QR code is an opaque link. You cannot read it before your phone does, which makes it a convenient wrapper for a destination you would not have clicked. Reported patterns include stickers placed over legitimate codes on parking meters and restaurant tables, codes in unsolicited emails and texts, and fake package-delivery notices.
Consumer alert
The US Federal Trade Commission has warned consumers that scammers hide harmful links in QR codes, including by covering legitimate codes in public places with their own stickers, and advises checking the URL before opening it.
Practical habits:
- Read the URL preview before opening it. Both iOS and Android show the destination first — that preview is the entire defence, and it only works if you look.
- Check physical codes for stickers. A code applied over another code is the single most common real-world attack, and it is visible to the naked eye.
- Never enter credentials or payment details on a page you reached by scanning an unsolicited code. Navigate to the site yourself instead.
- Be sceptical of urgency. “Your parcel is held”, “your account is suspended”, “scan to avoid a fine” are the standard framings.
Next: static vs dynamic QR codes, which covers the trade-off behind all of this, and what QRify is if you want the short version.