📦 Bulk QR Code Generator

Paste a CSV or list, generate up to 500 QR codes at once, and download them all as a ZIP of PNGs or SVGs. Perfect for label runs, ticket batches, product launches, and inventory tags.

Input data

Drop .csv or .txt here

Or click to browse. Max 5 MB — up to 500 rows will be processed.

Options
Rows: 0
✓ Valid: 0
✗ Invalid: 0
Max: 500 rows per batch
Preparing…0 / 0

Preview (first 20)

Ready

About Bulk QR Code Generator

Bulk QR Code Generator turns a CSV or list of values into a batch of QR codes — up to 500 at a time — and packages them as a downloadable ZIP of PNG or SVG files, or a single printable HTML sheet. Perfect for label runs, ticket batches, product launches, inventory tagging, or any project where hand-generating each code would take hours.

Everything runs entirely in your browser. Your CSV, URLs, or SKU list never leaves your device — no upload, no rate limit, no cost. The QR encoder and ZIP writer are both self-hosted so nothing is fetched from a CDN at runtime.

100% client-side: encoding and ZIP creation happen in your browser via self-hosted libraries. Product codes, URLs, and any private data stay local.

How to use Bulk QR Code Generator

1

Paste or upload your data

One value per line for plain lists, or a CSV/TSV with a header row for columns like label,url.

2

Map columns (CSV only)

Pick which column holds the QR data, which is the display label, and which is the filename.

3

Style + prefix

Colors, size, error correction, and optional prefix/suffix (e.g. add https:// before plain slugs).

4

Download

ZIP of PNGs for digital use, ZIP of SVGs for print, or a printable HTML sheet with all codes on one page.

Key Features

Up to 500 QRs in one batch

Generate hundreds of codes in seconds without spinning up a script or paying for an enterprise API. All processing happens in the browser — capped at 500 per batch to keep memory reasonable across devices.

CSV or plain-text input

Paste a bare list (one per line) or a full CSV with a header row. Auto-detected header + column mapping lets you choose which column becomes the QR data, which is the visible label, and which drives the filename.

Prefix + suffix wrapping

Turn a list of slugs into full URLs with one field: prefix https://acme.com/ and suffix ?utm=print to every value. No need to pre-process the CSV.

Filename templating

Use placeholders {row}, {label}, {data} to control ZIP filenames. Example: ticket-{label}-{row}.

Colors + error correction

Foreground and background color pickers apply to every code. Error-correction L / M / Q / H — bump to H if codes will be printed onto uneven surfaces or over a logo.

PNG or SVG ZIP

PNG — rasterized at high DPI for direct print or web use. SVG — lossless vectors for Illustrator, InDesign, and label-design software.

Printable HTML sheet

Download a single HTML file with every code + its label — open, hit print, and your printer produces the whole sheet. Print CSS handles page breaks cleanly.

Per-row validation

Invalid rows (empty, over-length, unencodable) are flagged with a red cell and never break the batch — good rows still generate.

Common Use Cases

  • Retail label runs — QR + product URL for hundreds of SKUs
  • Event tickets — one QR per ticket ID, batched at print time
  • Inventory / asset tags — one QR per bin, rack, or IT asset
  • Conference badges — QR that opens attendee profile URL
  • Business-card runs — QR per employee linking to their internal profile
  • Marketing campaigns — per-region UTM-tagged URLs
  • Restaurant table QRs — different menu per table for A/B tests
  • Package labels — tracking URLs for outbound shipments
  • Contactless survey codes — one QR per store location
  • NFC / QR loyalty cards — one QR per member ID
  • School / library book labels — one QR per catalog ID
  • Warehouse pick lists — QR per line item on the pull sheet

Security & Privacy

  • 100% client-side: QR encoding and ZIP creation run in your browser via self-hosted libraries (qrcode-generator + JSZip). No data uploaded.
  • Works offline: once the page loads, disconnect and it still works.
  • No rate limits: generate as many batches as you need. Only the 500-per-batch cap applies to prevent browser OOM.
  • Safe for confidential data: internal SKUs, employee IDs, private URLs — all stay on your device.
  • Watch what you encode: QR codes are static — if the destination changes, every printed code is dead. For anything printed at scale, encode a short URL that redirects to the real target so you can update without reprinting.

Frequently Asked Questions

Browsers struggle to build a ZIP with thousands of PNGs in memory — some devices OOM. 500 keeps things responsive on most hardware. For larger batches, split your CSV into chunks and generate multiple ZIPs.
Standard CSV or TSV. First row is treated as a header if it contains non-numeric text. Columns can be quoted or unquoted. Both , and \t as separators are supported. If no header is detected, we treat every row as data.
It sets the filename inside the ZIP. {row} = 1, 2, 3…, {label} = the mapped label column value, {data} = the encoded value. Unsafe filename characters are auto-stripped. Example: ticket-{row}ticket-1.png, ticket-2.png, etc.
SVG if you're placing codes in a label-design app (Adobe, Silhouette, Cricut) — vectors scale cleanly. PNG for digital use or direct printing at fixed sizes.
Most common causes: empty value, or content over ~2,900 characters (won't fit in any QR version at level M). Bad rows are flagged in red in the preview but don't stop the rest of the batch.
Yes — each row becomes a separate QR file even if the value is identical. If the filename template produces duplicates, we auto-append -2, -3, etc. so nothing gets overwritten inside the ZIP.
No. All encoding and ZIP creation happens in your browser. Verify by opening DevTools → Network — no requests are made during generation.
Yes — no signup, no ads, no per-code cost. Batches capped at 500 rows.