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.
Static vs dynamic QRs
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 | anytime |
name (internal label, never visible to scanners) | |
is_active (kill switch, all scans 302 to a "QR is paused" page) | |
variants (A/B test split, Pro+) | |
| The encoded short URL itself | that is the print |
| The visual design (logo, colors, frame) | 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.
danger: 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