Make 250 QR codes at once and download them as one ZIP.
Paste one link per line, or a label and a link, and get a folder of print-ready PNGs named after your labels. Nothing is uploaded, nothing is stored, and a manifest.csv comes with the ZIP so you can tell which file is which without opening 200 images.
The interactive tool loads with this page and runs entirely in your browser.
A batch has one constraint a single code does not
Every code in a batch usually gets printed at the same size, on the same sheet, in the same run. That means the size is not decided by the average code. It is decided by the longest link in the list, because that one produces the densest pattern, and if it is unreadable at the size you chose then so is a slice of your order.
The panel above works that out for you. It finds the longest entry in whatever you pasted, works out how many modules that code needs across, and tells you the smallest width the whole batch can be printed at while keeping each module above the practical floor of 0.4mm. Size to that number and every other code in the batch is comfortably inside it.
The cheap fix for a batch that will not fit is almost always shorter links, not a bigger sheet. A link that is 40 characters shorter can drop a version or two off the symbol and take the whole run down a size.
Filenames are the part people regret
A folder of two hundred PNGs called qr-code (17).png is worse than useless, because the only way to find the right one is to scan them. So the label you put in front of each link becomes the filename, prefixed with the row number so the folder sorts in the order you pasted it.
Labels are optional. Without one, the last part of the link is used, which is usually the slug you already named the destination after. Accents are folded, spaces and punctuation become hyphens, and anything that would upset a filesystem is dropped.
A manifest.csv is included in every ZIP with three columns: file, label and the exact string inside the code. That is what makes a batch auditable. If a printed code goes to the wrong place, the manifest tells you which file was wrong without needing to re-scan the sheet.
These codes are static, and that is worth understanding before you print
Every code here contains the destination directly. There is no server in the middle, nothing to log, and nothing to change later. Print two hundred of them and you have printed two hundred permanent decisions.
That is the right trade for a code that points at a domain you control, because you can always change what lives at that address. It is the wrong trade for a code pointing at a campaign URL with parameters you might revise, or at a third-party page that could move. For those, point the code at a link you own and can redirect, and the printed artifact never has to change.
It also means a code from this page cannot be counted. Nothing is tracked, because there is nothing in the path to do the tracking. If you need to know how many people scanned the code on table four, the code has to point at a link that resolves through something that counts, which is what a tagged link or a Raydar link does.
What the batch deliberately does not do
No logo in the middle. A logo punches a hole in the pattern and has to be paid for with a higher error-correction level, which makes the code denser and pushes the minimum print size up. That is a judgement worth making per code while looking at it, so it lives on the single code generator instead.
No per-row colours or patterns. One batch, one look. Mixed styling in a print run is a mistake more often than an intention.
No upload. The list never leaves the tab. Every code is drawn in your browser and zipped in your browser, which is also why there is no cap beyond what your machine can hold.
Pattern choice matters more in a batch
The three big squares in the corners are finder patterns, and a decoder uses their exact proportions to locate the code before it reads anything. Rounding them off is a style that some scanners tolerate and some do not.
On a single code you can test that with your own phone in ten seconds. On a batch of two hundred nobody does, which is why Square is the default here and why choosing anything else prints a warning. The full explanation is on the QR code generator.
Trace a link's full redirect chain.See every hop in a redirect chain and catch dropped UTM tags and click IDs before they cost you attribution.
Questions
How many QR codes can I generate at once?
250 in one batch. The limit is your browser, not a plan: every code is drawn and zipped in the tab, and a few hundred images at export size is already a large amount of memory to be holding at once. For more than 250, split the list and run it twice.
Can I paste straight from a spreadsheet?
Yes. Copying two columns out of Excel, Google Sheets or Numbers gives you label and link separated by a tab, which is read as label then link. A CSV export with a comma works the same way, including quoted fields.
How do I know which PNG holds which link?
Each file is named after its label with the row number in front, and a manifest.csv inside the ZIP lists file, label and the exact contents of every code. Open it in any spreadsheet.
Can I edit the codes later or change where they point?
No. These are static codes, so the destination is inside the printed pattern and cannot be changed after printing. If a destination might move, point the code at an address you control and change the redirect behind it instead.
Can I track scans on a bulk QR code?
Not on the code itself. A static code has no server in the path, so nothing can count the scan. Point the codes at links that resolve through something that counts, and the tracking happens on the link rather than on the image.
What size should I print a sheet of codes at?
Size the whole sheet for the longest link in your list, because that one produces the densest code. The panel above shows the minimum width for that entry, which keeps every module above 0.4mm. As a rough rule, a code scans reliably from about ten times its own width away.
Is there a watermark or a signup?
Neither. The PNGs are yours, there is no branding on them, and nothing you paste is sent anywhere.
Give your bio link a brain.
Build your page, watch who converts, free to start.