The 14-day expiration trick: how 'free' QR sites actually work
An honest tour of the standard freemium playbook in the QR industry, what's really happening when your code stops scanning, and how to tell before you print 500 flyers.
- industry
- explainer
If you’ve used a “free” QR code generator and had a code stop working two weeks later, you weren’t imagining it. You were on the demo plan and didn’t know it. Here’s what’s actually going on under the hood.
A QR code is just a picture of a URL
The QR code itself is a static image. It encodes a string — usually a URL — and any scanner that sees it will dutifully send the user to that URL. Forever. There is no expiration date in the QR spec. There can’t be, because the code is just dots on paper.
So when your QR “stops working,” the dots haven’t changed. Something at the other end of the URL changed.
The redirect sleight of hand
Here’s what most “free” generators do without telling you:
- You type in
https://my-restaurant.com/menu. - They generate a QR code. But the QR code does not encode your URL.
- Instead, the QR encodes something like
https://qr-provider.example/r/abc123. - When someone scans, they hit the provider’s server, which then redirects to your real URL.
This is a dynamic QR. It’s a useful pattern — you can change the destination later, see scan analytics, etc. — and there’s nothing inherently wrong with it.
The problem is that none of this gets disclosed up front. You think you got a static QR for free. You actually got a free trial of a paid product. The clock starts the moment you download.
The expiration is a feature flag
When the 14-day “trial” is up, the provider doesn’t change the QR. They flip a flag in their database. The redirect now points to an upgrade page instead of your menu. Same QR, same dots, completely different behavior — because they own the middle hop.
You can verify this in about ten seconds. Take any “expired” QR, scan it, and look at the URL bar of where you land. If you see the QR provider’s domain in front of an upgrade prompt, that’s the trick in action.
How to tell which kind you’re getting
Before you print anything, check the URL the QR encodes:
- Open the QR in any decoder (or just point your phone camera at it without tapping).
- If the decoded text is your URL (
https://my-restaurant.com/menu), it’s a static QR. It will work forever, no matter what happens to the company that generated it. - If it’s someone else’s URL (
https://qr-provider.example/r/abc123), it’s a dynamic QR — and the company in the middle controls whether it keeps working.
That doesn’t mean dynamic is bad. Dynamic QRs are genuinely the right answer when you want to update the destination later, or see scan stats. They just need to come from a provider whose business model isn’t “rent your codes back to you.”
What we do differently
On Actually Free QR Codes:
- Static QRs encode your URL directly. We never put ourselves in the middle. You don’t need an account, you don’t get an email, the code lives or dies with whatever URL you encoded.
- Dynamic QRs redirect through
afqr.codes, but the redirect doesn’t expire. There’s no 14-day clock, no upgrade prompt, no billing trigger. You make a free account so you can edit the destination later — that’s it.
If we ever shut down, the static QRs keep working forever. The dynamic ones would stop, same as any other redirect — that’s an unavoidable property of dynamic QRs from any provider. We’d give as much notice as humanly possible, and we’d export your destinations so you could rehost them.
That’s the entire promise. It is shockingly easy to keep, once you decide not to lie about it.
Need a QR code that won't expire?
Make one in your browser, free, no signup. Or sign in with Google to manage dynamic codes with scan stats.