# How to migrate off a dynamic QR code provider

> Export your code list and destinations while the account is still active — most vendors kill redirects the moment a subscription lapses. Then triage each code: reprint as a static direct link where you can, re-point to a redirect on a domain you control where you cannot, and verify every replacement before cancelling.

Source: https://useqr.app/vs/how-to-migrate-off-a-dynamic-qr-provider · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The clock: what happens when you stop paying

Every dynamic code is a redirect through the vendor's domain, and at most vendors that
redirect stops the moment your plan lapses — every printed copy dies at once. The
documented behaviour varies only in flavour: QRFY deactivates codes after its trial and
holds them pending a minimum spend of roughly **$117 per quarter**;
qr-code-generator.com's expired trials killing printed codes have earned it a
**1.5–1.9★ Trustpilot rating**; Scanova deactivates on lapse and deletes data after
26 months; Bitly's free codes never allowed destination edits in the first place.
[The full anatomy of a dying QR service](/vs/what-happens-when-a-qr-service-shuts-down)
is worth reading before you touch anything. The operational conclusion: **do the whole
migration while your account still works.** After cancellation you may have nothing —
not even the list of what you printed.

## Step 1 — export everything, now

From the vendor dashboard, export (or failing that, manually copy) for every code:

- the **short URL** the code actually encodes (scan one printed copy to confirm),
- the **current destination** it redirects to,
- where it is physically printed, and roughly how many copies exist,
- scan statistics, if offered — your last chance to see which codes matter.

If the dashboard has no export, that is itself information — note it in the vendor's
[lock-in ledger](/vs/hidden-costs-of-free-qr-generators) — and copy the table by hand.
An hour of tedium beats losing the inventory.

## Step 2 — triage every code into three buckets

| Bucket | Test | Action |
|---|---|---|
| **Reprint as static** | Reprinting is cheap (menus, table tents, flyers, labels you reissue anyway) | Make a [static code](/docs/basics/static-vs-dynamic-qr-codes) pointing **directly** at the destination — no redirect, nothing left to expire |
| **Re-point** | Reprinting is expensive or impossible (vehicle wraps, signage, engraving, mass mailings already sent) | These are the hard cases — see the next step before the old redirect dies |
| **Retire** | The scan stats say nobody scans it | Let it lapse deliberately; note where copies hang so they come down |

The scan data from step 1 usually shrinks the problem: most inventories are a few codes
that matter and a long tail that never earned a scan.

## Step 3 — put the redirect on a domain you control

For everything in the reprint bucket, the replacement should encode
`https://yourdomain.com/r/menu` style paths — your own domain, with a redirect rule you
can edit forever. That preserves the one genuine benefit of dynamic codes
(edit-after-print) with no subscription attached, and your server logs provide scan
counts; [the tracking how-to](/docs/how-to/how-to-track-qr-code-scans) shows the setup,
and [changing what a code points to](/docs/how-to/how-to-change-what-a-qr-code-points-to)
covers the redirect mechanics. For the re-point bucket, your options depend on the
vendor: some let you edit destinations until the last paid day — set each one to its
final, most durable destination before lapse. Printed copies encoding the vendor's
domain will still die with the vendor; plan their replacement at the next natural
reprint cycle.

## Step 4 — regenerate, verify, then cancel

Regenerate the reprint bucket in one pass — a CSV of names and destinations through
[bulk generation](/bulk) returns the whole set — and **verify every replacement
decodes** to the right URL with [the validator](/validate) before anything reaches a
printer. Only when new print is physically up does the old subscription get cancelled.
The order matters: cancel first and the old codes go dark while the reprints are still
at the print shop.

## The checklist

1. Export codes, destinations and scan stats while the account is live.
2. Scan one printed sample per code; confirm what is actually encoded.
3. Triage: reprint / re-point / retire.
4. Reprints: static direct links, or redirects on your own domain.
5. Re-points: set final destinations before the last paid day.
6. Bulk-generate, verify each code decodes, print, hang.
7. Cancel — last, not first.

## FAQ

### What happens to my dynamic QR codes if I cancel?

At most providers the redirects stop resolving immediately and every printed copy dies.
Some vendors hold codes for a reactivation fee; some delete data on a schedule. Assume
the worst, and complete your migration while the account still works.

### Can I convert a dynamic QR code to a static one?

Not in place — the printed code permanently encodes the vendor's redirect URL. You
generate a new static code pointing directly at the destination and reprint. That is
why triage starts with what is cheap to reprint and what is not.

### How do I keep editability without a subscription?

Point static codes at short paths on a domain you own and manage the redirects
yourself. Edit-after-print survives, scan counts live in your own logs, and the only
renewal fee is the domain you probably already pay for.

## Try it

- https://useqr.app/url
- https://useqr.app/bulk
- https://useqr.app/validate
