Flyers, posters, and packaging often need a QR code that points to a tracked landing page. Hosted QR platforms charge ~$49/month to swap destinations after print โ but most print campaigns already know the final URL before the ink dries.
A static QR encoding your full UTM-tagged URL is enough. Print once, scan forever, and Google Analytics (or Plausible, etc.) records the utm_source=qr traffic like any other link.
Build the URL first
Example for a summer sale poster:
https://example.com/sale?utm_source=qr&utm_medium=print&utm_campaign=summer2026
Paste that exact string into a generator, download PNG or SVG, drop it into your design file. Done.
Try it in the browser
toolkitlabs-qr live demo โ paste any URL (with or without UTM params), download PNG or SVG. Runs entirely client-side; nothing is uploaded.
Batch posters for multiple locations
Running the same creative in ten cities with different utm_content tags? One CSV row per variant:
npx toolkitlabs-qr@latest qr_batch.py campaigns.csv ./posters/
Sample campaigns.csv:
url,filename
https://example.com/sale?utm_source=qr&utm_medium=print&utm_campaign=summer2026&utm_content=nyc,nyc-poster.png
https://example.com/sale?utm_source=qr&utm_medium=print&utm_campaign=summer2026&utm_content=la,la-poster.png
The batch CLI pack is a one-time EUR 9 purchase (no subscription): Stripe payment link.
When dynamic QR actually helps
If you genuinely need to change the destination after printing โ rotating promo URLs, A/B tests mid-campaign, or scan analytics inside the QR vendor dashboard โ a hosted service earns its fee. For a fixed UTM link on a poster that ships next week, static is honest and free.
CC0 ยท Toolkit Labs







