What is actually inside the code

A QR code stores bytes. In the static case those bytes are your destination: https://example.com/spring-sale?utm_source=poster goes into the pattern, and the phone reads it directly. There is no server in the middle and nothing to configure.

In the dynamic case the bytes are a short link: tinyto.me/spring. The phone still reads it directly โ€” it has no idea the code is "dynamic". It opens the link, the link looks up its current destination, and issues a redirect. That redirect is where everything else comes from: editing, measurement, rules.

So the honest definition is: a dynamic QR code is a static QR code plus a redirect you control. Nothing about the image changes.

The only question that matters

Before choosing, answer this: once this is printed, am I ever going to want it to point somewhere else, or to know how many people scanned it?

If the answer is no, use a static code and stop reading. It is free, it has no dependency on any service, and it will still work in ten years. If the answer is yes โ€” or "I don't know yet" โ€” then the cost of a reprint is the number to compare against a subscription.

Side by side

StaticDynamic
EncodesThe final URLA short link you own
Change destinationReprintEdit the link, seconds later
Scan analyticsNoneClicks, country, device, weekday/hour
DensityDenserLighter, so it scans better when small
Survives the provider vanishingYesNo
CostFreeFree tier, then a plan

The failure mode nobody mentions

A dynamic code is a printed promise that someone else's server will keep answering. If that company closes, changes its free plan or starts deleting old links, every code you printed becomes a dead square. It has happened repeatedly across the industry.

This is the question to ask any provider before you commit a print run: what happens to my codes if I stop paying? At TinyTo links do not expire, and a free account is enough to keep them resolving โ€” but you should ask that of anyone, including us, and get it in writing.

The migration trap

You cannot turn a printed static code into a dynamic one. The destination is physically part of the pattern; there is no switch to flip. The only "migration" is a new print run.

The reverse also bites: if a dynamic code's short link was chosen carelessly โ€” a throwaway slug, an intern's account, a campaign name โ€” you inherit that constraint for as long as the code lives. Choose the slug as if it were going on packaging, because one day it might.

Choosing by artifact

In practice the decision is rarely about QR codes and almost always about the surface:

The arithmetic

A thousand A5 flyers is roughly the cost of one or two months on a small plan. A window decal or a packaging run is ten to a hundred times that, plus the design time and the two weeks it takes to come back from the printer. The comparison is not "free versus paid": it is "one reprint versus a plan you can cancel".

That is the whole argument. Everything else about dynamic codes โ€” analytics, rules, A/B tests โ€” is a bonus on top of not having to guess correctly at press time.

Doing it in practice

Generate the code from the short link, not the long URL. Then keep two things: the short link slug, and a note of where the physical code went. A code you cannot find is a code you cannot repoint.

Ready to try it? Start with the free QR code generator if you only need a static image, or read how dynamic QR codes work in TinyTo if the code is going somewhere expensive.