A static QR code holds the destination itself, so once it's printed you can't change where it goes or count its scans. A dynamic QR code holds a short link that redirects, so you can change the destination after printing and see every scan. Most QR tools cap or charge for dynamic codes; LotsLink's are free and unlimited.
Below: how the two types differ, a real run where I changed a printed-style code's destination and watched the history record it, and which QR tools let you edit and track on which plan, checked on 21 October 2026.
Static vs dynamic at a glance
| Static QR code | Dynamic QR code | |
|---|---|---|
| What the code holds | The full destination (a URL, Wi-Fi details, a vCard) | A short link that redirects to the destination |
| Change where it goes after printing | No. You print a new code | Yes. Change the destination; the printed code stays the same |
| Count scans | No. Nothing sits between the phone and the page | Yes. Each scan passes through the short link and is recorded |
| Works without an account | Yes, forever | Only while the short link service keeps redirecting it |
| Typical cost | Free almost everywhere | Often capped or paid. On LotsLink, free and unlimited |
| Good for | Wi-Fi passwords, contact cards, content that never moves | Menus, flyers, packaging, posters, anything you might update or measure |
The rule of thumb: if it's going on paper and the page behind it could ever change, make it dynamic.
How a dynamic QR code works
A dynamic code is just a QR code for a short link. On LotsLink, the code always opens a short URL such as lots.link/your-slug, and that short URL redirects to whatever destination the link has right now. Because every scan passes through the short link, LotsLink records it as a click on that link, with country, city, device and referrer when available. Known bots and link previews aren't counted, and since visitor IP addresses aren't stored, scans are recorded visits, not unique people.
When you change the destination, three things stay put:
- The slug, the short URL and the QR code image. Nothing on the printed piece changes.
- The link's clicks and its UTM tags. If the link was created with UTM tags and the new address doesn't set its own, LotsLink adds the original tags back, so your campaign reporting doesn't break.
- The history. LotsLink records each destination change: the old address, the new one and when it happened.
The new destination gets the same checks as a new link (HTTP or HTTPS only, and known phishing or malware pages are refused), and it reaches every visitor within about a minute. Owners and admins can change any link in a workspace, members only the links they created, and viewers can't change links.
One thing not to change: the slug. A new slug is a new short URL, and every code already printed with the old one stops working. Change the destination, never the slug.
A real run: change a code's destination and check the history
On 21 October 2026 I ran this end to end through the LotsLink MCP server, the same way your agent would, on a test link pointing at example.com pages:
- Created a link to
https://example.com/menu/autumnwith the slugqr-demo-menu-1021and UTM tagsutm_source=qr,utm_medium=print,utm_campaign=menu-demo(lotslink_create_link). - Made its QR code, a 512 px PNG of
https://lots.link/qr-demo-menu-1021(lotslink_create_qr_code). The code's URL was saved on the link. - Checked the redirect. The short link sent visitors to the autumn page, with the three UTM tags attached.
- Changed the destination to
https://example.com/menu/winter, with no UTM tags in the new address (lotslink_update_linkwithoriginal_url). The response confirmed "Destination updated. The short URL and QR code stay the same." and that the redirect cache expires within a minute. The saved destination came back as the winter page with all three UTM tags added again. - Checked the redirect again. Three seconds after the change it still went to the autumn page (the cached redirect); about a minute later it went to the winter page, UTM tags included. Same short URL, same QR code image.
- Read the history with
lotslink_get_link. The link now carries adestination_changeslist, newest first:
"destination_changes": [ { "previous_url": "https://example.com/menu/autumn?utm_source=qr&utm_medium=print&utm_campaign=menu-demo", "new_url": "https://example.com/menu/winter?utm_source=qr&utm_medium=print&utm_campaign=menu-demo", "changed_by": "<user id>", "changed_at": "2026-10-21T03:57:17Z" } ]
The same list comes back with the link's click analytics (lotslink_get_link_analytics), so when you read a spike or a drop in scans you can see whether the destination changed that day.
7. Deactivated the test link (lotslink_update_link with is_active: false). Nothing was deleted.
The whole run took a few minutes, cost nothing, and didn't touch a custom domain. On a dashboard, the same change is Edit Link, then Destination URL.
Which QR tools let you edit and track
Every tool below makes static codes. The difference is how many dynamic (editable, tracked) codes you get, and on which plan.
| Tool | Free dynamic codes | Edit the destination | Scan tracking | Paid entry point |
|---|---|---|---|---|
| LotsLink | Unlimited | Any time, no monthly count, free included | Every scan through the short link, no scan cap | Free. You pay only for your own domain ($4 a month) |
| QR Code Generator (QRCG) | None. 14-day free trial | Yes, on paid plans | 10,000 scans on Starter, unlimited from Advanced | Starter $9.99 a month billed yearly ($119.88), 2 dynamic codes |
| QR TIGER | 3, with 500 scans each | Listed from Regular | Basic on Free, advanced on paid plans | Regular $7 a month, 12 dynamic codes |
| QRCodeChimp | 10, with 1,000 scans a month across all of them | Yes (dynamic codes) | Basic on Free | Starter $6.99 a month billed yearly, 50 dynamic codes |
| Uniqode | None. Static codes free; dynamic codes from a trial | Dynamic codes only | Dynamic codes only | Essential $9 a month billed yearly |
| Bitly | 2 QR codes a month on Free, not editable there | From Core: 5 redirects a month, 20 on Growth | Data history from Core (30 days) | Core $10 a month, annual only |
| QRCode Monkey | None (static only) | No | No | Free, no paid plan on the site |
Checked on 21 October 2026 on each vendor's own pricing page. Prices in US dollars.
A few things worth knowing from those pages:
- QR TIGER's FAQ says dynamic codes have no scan limit within a paid subscription and "will only stop working once the plan expires."
- QRCodeChimp's FAQ says free dynamic codes pause once the 1,000 monthly scans are used and reopen the next month.
- Uniqode's plans page says dynamic codes made during a free trial stop working when the trial ends unless you subscribe, and that Wi-Fi codes can only be static.
- QRCode Monkey says its codes are free, never expire and have no scan limit, because they're static: no editing and no statistics.
- Bitly counts every destination change against a monthly "redirects" allowance, and its free plan has none.
On LotsLink, links on lots.link are free, so a dynamic code there doesn't depend on a subscription. If you put codes on your own domain and later stop paying for it, existing links keep redirecting; only new links on that domain pause.
For the full list with design options and features, see the best QR code generators with tracking.
When a static code is the right choice
- Wi-Fi access. The network name and password live in the code. Uniqode notes Wi-Fi codes are static only.
- A contact card for offline use. A vCard code works with no network at all.
- Something that will never change and that you don't need to count, like a permanent page on your own site.
Everything else on paper (menus, flyers, packaging, event signs, business cards that link to a page) is safer dynamic, because pages move and you'll want to know whether anyone scanned.
Make a dynamic QR code with LotsLink
In the dashboard: create a short link, open it and download its QR code. Later, Edit Link, then Destination URL, to point it somewhere new.
LotsLink also works with the AI agent you already use. Connect https://api.lots.link/mcp (OAuth, no key) from lots.link/mcp, then ask:
Create a short link to https://example.com/menu with utm_source=qr and utm_medium=print, make a 1024 px QR code for it, and give me the PNG. Next month, point that link at https://example.com/menu-winter and show me its destination history.
The agent uses lotslink_create_link, lotslink_create_qr_code, lotslink_update_link and lotslink_get_link. Developers can do the same over REST: PUT /api/v1/lotslink/link/:link_id with original_url, documented in api.lots.link/docs.md.
To read the scans, see how to track QR code scans. Prices for your own domain are on the pricing page.
Common questions
What is the difference between a static and a dynamic QR code?
A static QR code stores the destination itself, so it can't be changed or tracked after printing. A dynamic QR code stores a short link that redirects, so you can change where it goes and count each scan, while the printed code stays the same.
Can I change where a printed QR code goes?
Only if it's dynamic. On LotsLink you change the link's destination in the dashboard (Edit Link, Destination URL) or from your agent, and the printed code opens the new page within about a minute. A static code needs a new print.
Are dynamic QR codes free?
On LotsLink, yes: dynamic codes, scans and destination changes are free and unlimited. Elsewhere it varies by plan. QR TIGER's free plan has 3 dynamic codes with 500 scans each, QRCodeChimp's has 10 with 1,000 scans a month, and QR Code Generator has a 14-day trial instead of a free plan (checked on 21 October 2026).
Do dynamic QR codes expire?
The code itself doesn't, but it only works while the service redirects it. QR TIGER says paid codes stop working when the plan expires, and Uniqode says trial codes stop when the trial ends. LotsLink links on lots.link are free, and if funding for your own domain runs out, existing links keep redirecting.
Can I see when a QR code's destination was changed?
On LotsLink, yes. Each link keeps a list of destination changes with the old address, the new address and when it changed, and your agent can read it with lotslink_get_link or alongside the link's click analytics.
