Skip to content
Security Tool

QR Expiry Checker

Check whether a QR destination is expired, redirected, or unreachable. Enter the destination URL and, if the campaign had one, its expiry date. The tool compares the date and attempts a real browser fetch — and reports the outcome honestly, including when the browser cannot tell.

Check a destination

Example: https://example.com/spring-offer

The date the campaign or ticket was meant to end. Leave blank if there was none.

Read the verdict carefully. A failed browser fetch usually means the destination blocks cross-origin reads (CORS) — it does not mean the destination is dead. Only the expiry-date comparison is a firm verdict, and only for the date you entered.

Enter a URL and run the check to see the verdict here.

Why QR destinations die, and how to tell

A QR code almost never dies; the thing behind it does. The most common cause is embarrassingly ordinary: a campaign page is taken down, a product slug changes, a ticketing platform retires an event, or a short link is deleted in a tidy-up. Because the printed code cannot change, every poster, package, and business card carrying it quietly becomes a dead end. The fix is organisational, not technical: someone must own each destination, know when it ends, and retire it deliberately.

The first distinction to make is between a static and a dynamic code. A static code has the destination baked into its pattern; if the page moves, the code is wrong and only reprinting fixes it. A dynamic code points at a redirect you control, so you can change the destination behind the printed pattern. Dynamic codes cost you a redirect service to maintain, but they are the only sane choice for anything with a lifespan — campaigns, events, menus, tickets. If you print static codes for temporary things, you are scheduling future dead ends.

The second distinction is between expiry and reachability. Expiry is a fact about your own plan: the campaign ended on this date, the ticket was valid until that date. Only you can state it, which is why this tool asks you for the date instead of guessing. Reachability is a fact about the network: does the destination answer? A browser page like this one can attempt a fetch, but cross-origin rules mean many destinations will refuse to be read, and the browser will not reveal intermediate redirect hops. A failed fetch from this page is therefore an unknown, and this tool labels it as such rather than dressing it up as a verdict.

For a conclusive reachability answer, use a tool that is allowed to see the full picture: open the link in your browser and watch the address bar, issue a redirect-following request from a terminal and read each status code, or rely on a monitoring service that checks your destinations on a schedule. If the destination is yours, your own server logs and redirect rules are the fastest source of truth — a changed slug or a retired campaign shows up there immediately.

Finally, retire codes with the same care you used to launch them. Point a retired redirect at a short page that says the campaign ended and where to go next, rather than leaving a bare error. Remove codes from circulation where you can, and keep a register of every live code, its destination, its owner, and its end date. A register turns expiry from a surprise into a scheduled task — and a QR programme with a register is one whose codes keep working.

Frequently Asked Questions About QR Expiry

Can a QR code itself expire?

A static QR code — one whose payload is printed into the pattern — never expires on its own. What expires is the thing behind it: a campaign page, a ticket, a booking link, a short URL. A dynamic QR code, where the printed pattern points at a redirect you control, can be retired by changing or removing the redirect.

Why does the fetch attempt often fail to give an answer?

Because a web page may only read responses from destinations that allow cross-origin reads. Many sites refuse, which makes the fetch fail even though the site is fine. Browsers also hide redirect details from pages. A failed fetch is an unknown result, not evidence the destination is dead.

How should I check whether a destination is really dead?

Open it in your browser and watch what happens, use a command-line request that follows redirects and prints each status code, or check it with a monitoring service you trust. If the page belongs to you, check your own server logs and redirect rules — a changed slug or a retired campaign is the most common cause of a dead QR destination.

What should I do with QR codes whose campaigns have ended?

Retire them deliberately: point the redirect at a short page that says the campaign ended and where to go next, or remove the code from circulation. A dead end teaches scanners not to trust your next code, while a polite landing page preserves the relationship.