Codes that cannot expire, at the exact size you will print them. Pick what the code should do, pick the surface it goes on, and the tool tells you whether it will actually scan there - before the flyers are printed. Then it hands every promotion channel its own tagged link so you can see which one sold the tickets.
What should the code do
How it looks
Pattern
Corner ring
Corner centre
The three big corners are what a camera uses to find the code, so whatever shape you pick they keep their 7 / 5 / 3 module proportions. Anything the tool thinks a picky scanner could trip over is flagged on the code itself, with a one-click fix.
Colours
Keep both ends dark. A fade that runs into a pale colour is the fastest way to make a code that scans on your screen and fails on paper - the contrast read-out above always judges the palest end.
Corner colours optional
Dark code on a light background, never the other way round, and never over a photo. Scanners read contrast, not colour.
Logo in the middle
A logo works because a QR code carries spare copies of its own data - the tool measures exactly how much of that spare the logo spends, keeps a tenth of it in reserve for real-world dirt and creases, and decodes the finished code to prove it still reads.
Frame around it
A frame grows outwards, so the code stays exactly the width you picked. The four print pieces below carry their own headline, so they are printed without it.
Where it gets printed
The millimetres are the code itself, not the artboard. The quiet zone around it is added on top and is listed in the placement spec below.
How much damage it survives
More recovery means a denser pattern, so the same link needs a bigger print. The tool re-checks the module size every time you change this.
This code
Before you send it to print
Placement spec for your designer
Four pieces that go straight to the office printer on plain A4, laid out in real millimetres so the code comes out at the size it was checked at.
In the print dialog, set scale to 100% and turn off "fit to page" - that is what keeps the millimetres honest.
One line per code. Write Label | content to name them yourself, or paste bare links and the label is taken from the link. Tabs and label,content CSV work too. Lines starting with # are ignored.
Nothing on the list yet.
The ZIP holds an SVG and a 300 dpi PNG of every code, a list with the file names next to the content, and a README with the printing rules. It is built in your browser, which is why nothing is uploaded.
The list, checked one by one
Put your ticket page in once. Every channel you add gets the same page with utm_ tags on the end, which is what makes Google Analytics, Meta and your own reports show them as separate lines instead of one lump of "direct".
Your channels
| Channel | utm_source | utm_medium | utm_content | Tagged link | Code | Remove |
|---|
Digital channels only need the tagged link - nobody scans a code off their own phone screen. Printed surfaces get a code as well, at a size checked against that surface.
Built for print, not for screenshots
A code is easy to make. A code that still scans off a lanyard in a dark room, six months after the campaign, is the actual job.
Your code cannot expire, because there is nothing to expire. No redirect. No account to cancel. Print it and it still works in five years. Free generators that route through their own domain can start charging, add an interstitial or simply disappear - and every flyer you printed dies with them.
Every code is measured in modules, the little squares. Under about 0.4 mm per module, printers smudge them and phones give up. The tool works out your module size from the link length and the millimetres you picked, and says plainly when a link needs a bigger print.
Roughly ten times the code width, and never further than the camera can resolve one module. That second limit is why a long tagged link shrinks the distance: same paper, denser pattern, guests have to walk closer.
After a code is drawn, a separate piece of code reads the pattern back out of the picture - unmasks it, checks the error-correction blocks, decodes the characters - and compares it to what you typed. That is what the "decoded after rendering" line means.
Table numbers, cloakroom tags, lane signs, guest badges: paste the list and print one labelled sheet with cut guides, or take a ZIP of every SVG and PNG. The label is printed under each code so nobody has to guess which is which after cutting.
The campaign tracker gives the Instagram bio, the flyer, the partner newsletter and the door sign each their own tagged link, warns you when two rows would merge into one line in your report, and prints the physical ones at a size that works on that surface.
Start from the distance a guest scans from, not from what looks nice in the layout. The rule of thumb is a code about a tenth of the scan distance, and these are the surfaces the tool has presets for:
| Surface | Code width | Reads from about |
|---|---|---|
| Lanyard or badge | 20 mm | 20 cm |
| Flyer, A5 | 30 mm | 30 cm |
| Table tent | 40 mm | 40 cm |
| A4 poster | 80 mm | 80 cm |
| Entrance door or A3 | 150 mm | 1.5 m |
| Stage backdrop | 500 mm | 5 m |
Those distances assume a short link. Add a long tagged link and the pattern gets denser, so the same piece of paper is readable from closer up - the tool recalculates it as you type instead of leaving you with a poster nobody can scan from the pavement.
It cannot be re-pointed after printing. That is the trade for never expiring. If the destination might move, print a link you control - your own short URL on your own domain - and change where that goes, rather than trusting somebody else's redirect.
Codes on the tickets, too
Venuera issues every ticket with a unique QR code and the Check-in add-on scans them across as many phones as you like, with or without signal, showing live entry stats per door. The codes on this page get guests to the ticket page - those ones get them through it.
See the Check-in add-on