Mint hundreds of QR codes from one CSV
One code per row, named from whichever column you choose, packed into a single ZIP. Export the spreadsheet, drop it here, download the folder.
100% client-side•up to 500 codes per run•free
Your CSV
Drop a .csv file here
Columns
Options
Center logo
Your image is read in this tab with FileReader and drawn straight onto the code — it is never uploaded.
Preview
Paste or drop a CSV and the codes show up here.
What the CSV needs to look like
One row per code, and one column holding whatever each code should carry. Anything a single QR code can hold works per row — a URL, a WIFI: payload, a phone number, or plain text. A second column can name the files, so Table 12 comes out as Table-12.png instead of qr-012.png. Export straight from Excel, Numbers, Google Sheets or a database dump; commas, semicolons, tabs and pipes are all detected automatically, and quoted fields containing the delimiter are handled properly.
name,url Table 1,https://example.com/menu Table 2,https://example.com/menu?t=2 Front door,WIFI:T:WPA;S:Cafe Guest;P:flatwhite;;
Who this is for
- Events — one code per ticket or badge, named by attendee
- Restaurants and cafés — a per-table menu link that tells you which table ordered
- Retail and inventory — a code per SKU, shelf or asset tag
- Print runs — pick SVG and every code stays razor-sharp at any size
- Campaign links — a row per channel, each with its own tracking parameters
Printing the batch
A ZIP of loose PNGs is the right output when each code goes somewhere different — a per-attendee badge, a per-SKU record, an email to a client. When the whole batch is destined for one sheet of paper, hand-placing thirty images in Word is the wrong end of the job: print the labels instead. The same CSV, the same parser and the same delimiter detection lay the codes out on A4 or US Letter as table tents, place cards, Avery 5160 / L7160 address labels or a 30‑up sticker grid, captioned from the column you already have, with a calibration rule on every sheet so a scaled print shows up before you have wasted the stock.
How the ZIP is built
Each row is encoded into a QR code and drawn in your browser, then the whole set is packed into a ZIP archive by roughly a hundred lines of JavaScript on this page — no upload, no server, no third-party zip service. PNGs are stored rather than re-compressed inside the archive, because a PNG is already compressed and squeezing it again would save almost nothing.
Frequently asked questions
Is there a row limit?
500 rows per run, purely to keep your browser responsive — minting a few thousand codes at full resolution in one tab is a good way to freeze it. Split a larger file and run it twice.
Does my spreadsheet get uploaded?
No. The file is read by your browser's own file reader, parsed in this tab, and never sent anywhere. That matters more than it sounds for batch work, since these files tend to hold customer names, ticket numbers and internal URLs.
What happens to duplicate names?
They get numbered — ticket.png, ticket-2.png, ticket-3.png — so nothing silently overwrites anything else. Accented characters are transliterated and anything a filesystem would object to is replaced, so the ZIP extracts cleanly everywhere.
What if one row is too long to encode?
That row is skipped and counted in the summary rather than failing the whole batch. A QR code tops out at a few thousand characters, and lower error-correction levels leave room for more.
Can every code in the batch carry my logo?
Yes — set a Center logo once and every code in the ZIP gets it, PNG or SVG. Error correction locks to H for the whole run, and each code in the preview is decoded again in your browser so a logo that breaks the batch shows up before you download 500 of them.
PNG or SVG?
SVG for print — it stays sharp at any size and the files are tiny. PNG for slides, docs and the web, where a fixed-size image is simplest.