Create a dynamic QR code

Dynamic QR codes: editable after printing, with scan analytics

A static code has its data baked in forever. A dynamic code points to a short redirect URL you control — so you can change where a printed code goes, and see exactly how it performs in the real world.

Static vs. dynamic, in one table

Static codeDynamic code
What’s encodedYour URL, literallyA short redirect URL
Editable after printingNo — everYes — anytime
Scan analyticsNone possibleTime, device, browser, OS, location
Works offline / foreverYes, unconditionallyNeeds the redirect service reachable
Code densityGrows with URL lengthAlways small — short URL
Cost hereFree, unlimitedPaid plans, from $3/mo billed yearly

Neither is “better” — they solve different problems. A wedding-invite code that will be scanned for one month: static. Ten thousand product boxes with a two-year retail life: dynamic, without question.

How the redirect actually works

Instead of encoding your destination, a dynamic code encodes a short tracking link (bulkqrtool.com/api/q/…). A scan requests that link; the server logs the scan’s metadata, looks up your current destination, and answers with an instant redirect. The hop adds tens of milliseconds — imperceptible next to the destination page’s own load time. Because the printed pattern only ever contains the short link, two useful properties fall out: the code’s density never depends on how long your destination URL is (a 300-character UTM-tagged monster produces the same clean, coarse pattern as a short link), and the destination can change as many times as you like without the ink changing at all.

What editability is worth in practice

Reading the analytics

Every scan through a dynamic code records a timestamp, device type, browser, operating system, and approximate location (country and city, derived from the request — no GPS involved). The dashboard turns that into scans-over-time, top-device and top-location breakdowns, and a recent-scan log. How to actually use it:

Privacy of the people scanning: metadata only, no names, no accounts, no cross-site tracking. Details in the privacy policy.

Setting one up

  1. Sign in with Google in the generator (the free generator itself needs no account; dynamic codes do, since they live on a server).
  2. Create a URL code, flip on Analytics & Tracking, and save it to your collection with a recognizable name.
  3. Download the code from My Collection — that version encodes the tracking link. This is the step people miss: the plain generator preview encodes your raw URL and tracks nothing.
  4. Edit the destination or open analytics from the same collection row, whenever you need to.

Honest limitations

Plans

Static codes: free forever, unlimited. Dynamic codes and analytics start on the Personal plan — $3/mo billed yearly ($36/yr) or $6 month-to-month — with 2 dynamic codes and 500 tracked scans a month. Past that quota the codes keep redirecting perfectly; only the analytics pause until the month rolls over. Pro ($15/mo billed yearly) raises that to 250 dynamic codes, unlimited tracked scans, and 500-code bulk batches. Both include a 7-day free trial, and the pricing modal in the generator always reflects the current numbers.

Migrating existing printed codes toward dynamic

Plenty of teams arrive here with static codes already in the wild and wonder what can be salvaged. The honest inventory: printed static codes cannot be converted — their destination is in the ink — but the destinations they point at are still yours. If an old code points at a page on your domain, you can keep that specific URL alive as a permanent redirect on your own site, which rescues the deployed print without any QR-level change. Going forward, the cleaner policy is to make dynamic the default for anything that will be printed, and reserve static for screens (where regenerating is free) and for the never-changes category. Migration is also the right moment to build the habit that makes dynamic codes manageable at scale: name every code for its physical placement when you create it, because a collection of codes named after where the ink actually lives — not what campaign it ran — is what lets you confidently repoint the right one two years later.

Anatomy of a scan, millisecond by millisecond

Walking through one scan makes the architecture obvious. The camera decodes the pattern locally and finds a short URL — that part is identical to any static code and involves no network at all. The phone then requests the short URL; the server receives that request along with the standard metadata every web request carries (user-agent string, from which device/browser/OS are derived, and the network’s approximate location), writes one analytics row, looks up the destination currently assigned to that code, and responds with an HTTP redirect. The browser follows it, and the visitor is on your page. Total added time is one round trip — typically 30–80 ms — which is why nobody perceives the hop. Two things this design deliberately does not do: it does not run scripts on the visitor’s device (there is no page in between, just a redirect header), and it does not set cookies or fingerprint the visitor — the analytics row is the request metadata and nothing more. When you later edit the destination, you are changing a single database field; the next scan reads the new value, which is why edits are instant and reprint-free.

Deciding static vs. dynamic: a checklist

Run each printed piece through four questions:

  1. Can the destination change during the print’s life? Menus, campaigns, packaging: yes → dynamic. A wedding website that dies in October on invitations that die in October: static is fine.
  2. Do you need to know if anyone scans it? If the answer affects a decision — placement, spend, reprints — that alone justifies dynamic; a static code is a black box forever.
  3. How expensive is being wrong? Reprinting ten table tents is a nuisance; reprinting 50,000 boxes is a budget line. The bigger the run, the stronger the dynamic argument as insurance.
  4. Must it work with zero dependencies, forever? Memorial plaques, safety instructions, archival material: static, pointed at the most durable URL you control.

Most real projects sort themselves in seconds against these four. When a project mixes both — say, packaging with a dynamic support code and a static regulatory URL — that mix is correct, not indecisive; the two codes are doing different jobs.

Common questions

Do dynamic codes expire?
They redirect for as long as your plan is active. The printed image itself never degrades — reactivate the plan and the same code works again.
Can I convert a static code to dynamic?
No — the ink already says what it says. This is exactly why the static/dynamic decision belongs before the print run, not after.
How fast is the redirect?
Typically imperceptible — a single HTTP redirect measured in tens of milliseconds, dwarfed by the destination page’s own load.
Does editing the destination change how the code looks?
Never. The pattern encodes the short link, which is permanent; only the server-side pointer changes.
Can a dynamic code point to a PDF? A video? A form?
Anything with a URL — the redirect does not care what is on the other end.
What do the people scanning see?
Just your destination, after an instant redirect. No interstitial page, no branding of ours, no cookie banner from us.

Create a dynamic QR code →

Related guides