Static vs dynamic QRs
When to use a static QR, when to use a dynamic one, and what cannot change once a QR is printed.
The most consequential decision you make about a QR is what it encodes. Once printed, that decision cannot be undone.
Static QRs
A static QR encodes the destination directly. Scanning it yields the
exact string you put into data.
flowchart LR
Phone[Phone camera] -->|scans| QR[Static QR]
QR -->|encodes| Dest[https://yourbusiness.com]
Dest -->|redirect happens<br/>on the destination server| Final[Final URL]- The encoded payload is fixed at print time.
- No infrastructure between the scanner and your destination.
- Free with QR Code Agency, no scan limit, no analytics.
- Cannot be changed after print. Period.
When this matters: a static QR pointing at a marketing landing page that you later kill is now a dead QR. The only fix is to reprint.
Dynamic QRs
A dynamic QR encodes a short URL that QR Code Agency hosts. Scanning hits us first; we look up the live destination and 302 redirect the browser there.
flowchart LR
Phone[Phone camera] -->|scans| QR[Dynamic QR]
QR -->|encodes| Short[https://q.qrstudio.agency/q/aBc12dEf/]
Short -->|HTTP request| Lookup[QR Code Agency]
Lookup -->|302 + analytics row| Dest[Live destination_url]- The encoded payload is the short URL
q.qrstudio.agency/q/<short_id>/. destination_urlis stored in our database and can change anytime viaPATCH /api/v1/dynamic/<short_id>/.- Every scan is logged with timestamp, country, device family, browser, referer, and approximate location (when available).
- Plan-gated: included on Free at 1 QR / 1 lifetime edit, scaled up through paid tiers.
When this matters: a printed restaurant menu QR can swap to the seasonal menu in October without reprinting the table tents. A conference badge QR can repoint to the post-event archive when the keynote ends.
When to choose which
| Need | Pick |
|---|---|
| A QR I will never want to change | Static |
| Massive scale, no scan analytics needed | Static |
| The destination URL might change | Dynamic |
| I want to know how many people scanned, from where, on what device | Dynamic |
| A/B test two destinations | Dynamic with variants |
| White-label custom domain for the redirect | Dynamic + Agency plan |
| Compliance forbids hosting the redirect on a third party | Static (or self-host the redirect, contact us about Enterprise) |
What dynamic costs
The render itself is one quota credit, same as a static QR. The only ongoing cost is in plan tier:
- Dynamic QR allowance: how many can be active at once
- Edits per dynamic QR: Free is capped at 1 lifetime edit per QR
- Scans per month: Free caps at 50 scans across all dynamic QRs
See Plans and limits for the full table.
Performance characteristics
| Aspect | Static | Dynamic |
|---|---|---|
| Time to first byte at scan | DNS + TLS to destination | DNS + TLS to q.qrstudio.agency + 302 + DNS + TLS to destination |
| Latency overhead | 0 ms | ~80-150 ms (region dependent) |
| Cache headers on the redirect | controlled by the destination | Cache-Control: no-store (mandatory) |
| Reliability after print | depends on destination | also depends on QR Code Agency |
| Reliability after we go offline | unaffected | fails until we are back |
Our SLA on the redirect path is 99.95% on Enterprise, 99.9% on Agency, and 99.5% on Pro. See Reliability and SLA.
What you can change about a printed dynamic QR
| Property | Editable after print |
|---|---|
destination_url | yes, anytime |
name (internal label, never visible to scanners) | yes |
is_active (kill switch, all scans 302 to a "QR is paused" page) | yes |
variants (A/B test split, Pro+) | yes |
| The encoded short URL itself | no, that is the print |
| The visual design (logo, colors, frame) | no, that is also the print |
What you cannot change about any QR
Once a QR is printed:
- The encoded data is part of the physical print
- A reprint with new encoded data is a new QR, even if it looks similar
The whole point of dynamic is that destination_url is not part of the
encoded data. The encoded data is q.qrstudio.agency/q/<short_id>/,
which never changes.
DYNAMIC_QR_BASE_URL is forever
The base host that gets encoded into every dynamic QR
(q.qrstudio.agency) cannot change once your QR is printed. Even
we cannot move it without breaking every QR in the wild. We treat
it as a permanent commitment and so should you when planning a
custom-domain migration.
Migrating a static QR to dynamic
You cannot. The encoded data of a printed static QR is forever pointing at the original URL. Best you can do is:
- Set up a redirect on your origin server. The destination is now indirected, but only as long as you keep that server alive.
- Reprint with a dynamic QR. The new prints can be repointed.
This is the most common reason customers move to QR Code Agency: they have a campaign of static QRs in the world and want every future campaign to be repointable.
What is next
- Data types: the encoding rules for each
data_type - API reference: dynamic QRs: CRUD plus analytics
- Guide: dynamic campaign with analytics: end to end walk-through