Sign in

Do QR codes expire, and what actually stops working

· 4 min read

No QR code expires on its own. The pattern printed on a flyer is a string of characters encoded as black and white squares, and squares do not have a clock in them. Anything that stops working stopped for a different reason, and it is worth knowing which one, because two of the three reasons are avoidable and the third is a decision somebody made in a pricing meeting.

A static code has the destination baked into the pixels. If it encodes an address ending in summer-campaign, then that is what every camera reads, forever, and nobody can change it including you. Static codes genuinely cannot expire. What they can do is point at a page that no longer exists, which looks identical to the person holding the flyer: they scan, they get an error page, they put the flyer down. That failure is on your web server, not on the code.

A dynamic code encodes a short link owned by whoever generated it. The camera reads that short link, the short link redirects, and the destination behind it stays editable after printing. This is the useful kind. It is also the kind that can be switched off, because the redirect runs on somebody else's server and somebody else decides whether to keep answering it.

So when a dynamic QR code expires, what ended was an agreement, not a file format. That distinction decides how much you should be willing to print.

Two examples from this category, both taken from the vendors' own documentation rather than from angry reviews. QR Code Generator, now branded QRCG by Bitly, deactivates dynamic codes created during its fourteen day free trial when that trial ends; static codes made in the same period keep working. QR Tiger keeps your codes in the account but stops resolving dynamic ones while a subscription is lapsed, so printed material stops working until the account is paid again.

There is a fuller version of that comparison, sourced to their own documentation rather than to reviews, at /blog/alternative/qr-code-generator.

Neither policy is hidden and neither is unreasonable on its own terms. The problem is timing. A trial is fourteen days and a print run is not. Artwork gets designed, approved, sent to a printer, delivered and distributed over several weeks, so a code can be dead before the first box is opened. Public reviews of that product describe exactly this outcome often enough that it is the first thing a search for the brand surfaces.

Codes made here do not expire, on the free plan or the paid one, and they keep resolving after a subscription ends. An account that stops paying returns to the free plan, so scan history trims to thirty days and the daily creation limit applies again. Every code already printed carries on working. That is deliberately not sold as a feature, because a promise that printed material keeps working is not an upgrade, it is the baseline the format already implied.

If you are evaluating anything else, three questions settle it, and they are worth asking in writing. What happens to an existing dynamic code the day a subscription ends. Whether codes created during a trial survive the trial. Whether there is a scan limit, and what happens when a campaign reaches it: a code that pauses at ten thousand scans switches itself off precisely when it starts working.

If the surface you are printing is a flyer, the timing problem has its own page at /qr-code-for/flyers, because that is where the gap between artwork and distribution is longest.

There is also a test you can run yourself, and it beats reading any pricing page. Make one code on the free tier, print it small, and put it somewhere you will see it again in a month. Scan it then. A code that survives a month unattended on a free account is a code that will survive a print run. It is a slow test, and that is the point: nothing about expiry is visible on the day you create the code, which is the only day most people check.

One last thing, and it cuts against our own interest. If the destination will genuinely never change and you do not need to count scans, a static code costs nothing, depends on no service, and cannot be switched off by anyone. Print it and forget it. Dynamic codes earn their keep when you need to fix a URL after printing, repoint a campaign that moved, or find out which poster produced the scans. Those are real needs, and they are the only reason the question at the top of this page has to be asked at all.