Bulk QR Generator

Upload a CSV and generate hundreds of QR codes at once, with a live progress bar, a cancel button and a single ZIP download. Everything runs client-side.

Loading tool…

The CSV workflow, step by step

Step 1 — build the spreadsheet. Put a short label in the first column (it becomes the file name) and the content to encode in the second, then export as CSV from Excel, Numbers or Google Sheets. Keep labels free of slashes and other characters that file systems dislike.

Step 2 — upload the file above and pick the content type so the generator interprets the values correctly, whether they are URLs, phone numbers, WhatsApp links or WiFi credentials.

Step 3 — choose PNG, SVG or PDF, then start the run. A progress bar shows how far along the batch is, and a cancel button stops it cleanly if you spot a mistake in the data.

Step 4 — download the ZIP, or grab individual codes from the results list. Spot-check two or three files with the QR code decoder before handing the set to a printer or uploading it to a catalogue.

Where bulk generation saves real time

Product catalogues are the clearest case: one code per SKU pointing at its product page, generated in a single pass instead of one at a time, then dropped into label artwork by file name.

Events use it for per-ticket or per-session codes — a code for each workshop's feedback form, or a code per exhibitor stand pointing at their profile.

Property and rental portfolios generate a code per listing for signage, and asset registers generate a code per item for maintenance records or serial-number labels.

Multi-location businesses build one code per branch — separate review links, WiFi credentials or contact numbers — with file names that match each site, so the right code reaches the right store.

Working with large batches without locking up the page

Generation runs on your device, so the practical limit is memory rather than a server quota. The tool renders codes one at a time and yields back to the browser between them, which keeps the interface responsive and lets you cancel mid-run without leaving a half-written download.

For very large sets, split the CSV into chunks of a few hundred rows. Smaller ZIPs are quicker to download, easier to check, and far less painful to regenerate if you spot a data error after the fact.

Before a print order, decode a sample from the middle of the batch as well as the first row — errors in spreadsheets tend to appear where a formula was dragged, not at the top.

File naming, duplicates and matching codes back to data

The label column is the only thing connecting a generated file to the row it came from, so treat it as an identifier rather than a description. A SKU, a room number, a ticket reference or a branch code all merge cleanly into label artwork; 'Front window poster (new)' does not.

Strip characters file systems dislike — slashes, colons, question marks — and keep names short and consistent in case. If two rows share a label, the second file is saved as name-2 rather than overwriting the first, which protects the batch but usually means the spreadsheet has a duplicate worth fixing before the run.

Sort the CSV by label before generating. A ZIP whose file order matches the spreadsheet order makes a variable-data print merge trivial and makes a missing row obvious at a glance.

Catching data errors before they reach print

Empty rows are skipped and unencodable values are reported rather than dropped in silence, so the count in the results list should match the number of data rows in your CSV. A mismatch is the first sign that something in the file needs attention.

The most common cause of a broken batch is not the generator but the data: a URL missing its https prefix, a phone number that lost its leading zero to spreadsheet formatting, or a trailing space that turns two identical values into two different ones. Format the column as text before pasting values in.

When a handful of rows fail, fix those rows in a small separate CSV and run them alone. Regenerating a whole catalogue to correct three labels wastes time and risks introducing a new inconsistency in styling.

Testing a batch properly

Decode a sample from the start, the middle and the end of the ZIP with the QR code decoder. Errors introduced by a dragged formula appear partway down a sheet, so a first-row check is the least useful test you can run.

Print one physical proof at the final size on the actual material — label stock, vinyl, thermal paper — and scan it on both an iOS and an Android phone. Codes that pass on screen still fail on gloss laminate or a curved bottle.

Keep the approved CSV alongside the ZIP. Reprints months later should regenerate from the same source data rather than from a fresh spreadsheet that may have drifted.

Ready to try it?

Frequently asked questions

How do I create multiple QR codes at once?

Prepare a CSV with one row per code — a name column for the filename and a value column for the content — upload it above, choose the export format, and start the run. Every code is generated in your browser and collected into a single ZIP you download at the end.

What should my CSV file look like?

Two columns are enough: a label used for the file name and the content to encode, such as a product URL or a phone number. Empty rows are skipped, and if two rows share a label the second file is saved as name-2 so nothing gets silently overwritten.

How many QR codes can I generate in one batch?

Hundreds in a single run. Generation yields between codes so the progress bar keeps updating and the cancel button stays responsive, and very large batches are limited mainly by your device's memory rather than by any account or plan cap.

Which formats can I download?

PNG for screens and quick print jobs, SVG when the codes are going to a printer and need to scale cleanly, or PDF when you want a document per code. All the files for a run arrive in one ZIP.

Can I download an individual code instead of the whole ZIP?

Yes. After a run finishes, each generated code appears in the results list with a preview and its own download button, which is handy when you only need to resend one or two files.

Are my CSV contents uploaded to a server?

No. The CSV is parsed and every code is rendered locally in your browser, so product URLs, customer links or contact details in the file never leave your device. There is no account and no batch history stored anywhere.

What happens if two rows have the same name?

Nothing is overwritten. The second file is saved as name-2, the third as name-3, and so on, so every row in the CSV produces its own file in the ZIP even when labels repeat. It is still worth de-duplicating the spreadsheet first, since repeated labels usually signal a copy-paste error in the data.

What if a row fails to generate?

Rows that are empty are skipped, and a row whose value cannot be encoded is reported rather than silently dropped, so the count in the results list tells you whether every row made it. Fix the offending rows in the CSV and re-run just that subset rather than regenerating the whole batch.

How should I name the files for a print run?

Use the identifier the print or catalogue system already knows — a SKU, a room number, a ticket reference — rather than a human description. Avoid slashes, colons and other characters file systems reject, and keep names short so a variable-data merge can match them automatically.

How do I check a batch before sending it to print?

Decode a sample from the start, the middle and the end of the ZIP with the QR code decoder. Spreadsheet errors cluster where a formula was dragged rather than at row one, so checking only the first file misses the most common failure.

Related tools and guides