Paste a list or load a CSV. The rows never leave your browser.
Making one code at a time is fine until somebody hands you a spreadsheet with 300 asset numbers in it. This page takes the whole list at once, draws every code in your own browser and packs them into a single ZIP. The file is read locally, so nothing is uploaded and nothing is stored here.
Drawn with the settings above, from the list as it stands. Scan one with a phone before you print 500.
Codes made here are static: the content sits in the pattern, so it cannot be changed or counted after printing.
Your list is parsed by JavaScript running on your machine. Each row is encoded into a QR pattern, drawn onto a canvas or written out as SVG, and added to a ZIP that is built in memory. When the last row is done the browser hands you the archive as a download. No request goes to this server after the page has loaded, which you can confirm by opening the network tab and watching it stay silent, or by pulling the network cable out once the page is up. The practical effect is that a customer list, a set of internal URLs or a column of order numbers stays on your computer.
The codes that come out are static. The content is baked into the pattern, so a code cannot be repointed later and no scan of it is counted anywhere. That suits labels and inventory, and it rules out campaign tracking. If you need to change a destination after printing, one editable link code made by hand is the better fit, though those are made one at a time.
Size and contrast decide whether any of this works. Scan distance divided by ten gives the minimum side of a printed code, so a label read from 2 m needs roughly 20 cm, and anything under 2 cm is not going to read at arm's length. Keep the pattern dark on a light background, since inverted codes still fail on older readers, and leave the quiet zone of four modules clear when you drop the images into a label template. SVG output is the one to take for print because it scales without going soft. The format comparison goes into when a PNG is enough.
There is no row limit here beyond what your device can cope with, which is the trade-off a bulk QR code generator running in the browser makes. A thousand short rows at 300 px is unremarkable on a laptop from the last five years, and the progress counter keeps moving because the work yields back to the browser every few codes. Push the size to 800 px and the number of rows into the thousands and memory becomes the limit, because every image is held until the ZIP is written. Long content makes this worse: rows over 1000 characters are flagged, and a very long row can exceed what a single code holds at all, at which point that row is skipped and counted in the report.
Two columns is the arrangement that pays off. Column one becomes the file name, column two becomes the content, so store-114,https://example.com/units/114 lands in the ZIP as store-114.png rather than qr-7.png. Names are cleaned to letters, digits, dots, dashes and underscores, and a duplicate name gets a numeric suffix so nothing is silently overwritten. A single column file works too and the codes are numbered in order.
Export as CSV from the spreadsheet rather than XLSX, check that the separator is a comma, and wrap any value containing a comma in double quotes. Empty rows are dropped without complaint. Before committing a print run, generate five rows, print one at final size on the real label stock and scan it with an ordinary phone. Mistakes in a list of 500 are cheap to fix at that point and expensive afterwards.
No. The parsing, the drawing and the zipping all happen in your browser, and no request is made to this site once the page has loaded. You can verify it by watching the network tab while you generate, or by disconnecting from the internet after the page appears and running the job offline.
There is no limit set by this page. The constraint is your device, because every image is kept in memory until the archive is written. A thousand rows at 300 px is ordinary on a current laptop. Several thousand at 800 px may run out of memory, so split the list.
One file per row, PNG or SVG as you choose, named after the first column of the CSV or numbered in order when there is only one column. Names are reduced to safe characters and duplicates are given a numeric suffix, so nothing gets overwritten inside the archive.
No. Codes made here are static, so the content sits in the pattern and there is no redirect to change or count. Tracking is only available on the editable link code, which is created one at a time and reports scans by day and country.
Blank rows are dropped, and a row is skipped when its content is too long to fit in a single QR code at the error correction level you chose. The summary after the run lists the count and the reason for each group, with the row numbers so you can fix them.
Not on this page. The logo option, the frame styles and the EPS format live in the main generator, which works one code at a time. If a logo matters more than the batch, make the codes there and raise error correction to Q or H so the covered modules are recoverable.