QR Batch Generator

Generate dozens of QR codes at once from a list or CSV. Download as PNG or SVG ZIP.

Drop a CSV file or click to upload

Format: url,label — one per line · Download sample CSV

One entry per line · optional label after comma

4 entries

Size

Error correction

Foreground

Background

Generated QR codes appear here

Runs entirely in your browser. No uploads. Your files stay private.

Generating QR Codes in Bulk from a CSV or Pasted List

QR Batch Generator turns a list of URLs, phone numbers, or other strings into a folder of QR codes in one pass. Each line of input becomes one code, and the optional second column after a comma becomes the filename label inside the ZIP. The tool is built around the qrcode npm library, the same generator used by countless Node.js services, so the output is byte-identical to what you would get from a server-side script — there is just no server involved.
Everything runs locally. When you click Generate, your list is parsed in JavaScript, each entry is rendered to an offscreen HTMLCanvasElement, the canvas is exported to a PNG data URL, and a parallel call to QRCode.toString produces an SVG copy. Codes are processed 10 at a time and the loop yields to the browser between chunks with await new Promise(r => setTimeout(r, 0)), which keeps the tab interactive even when you hand it 500+ entries.
The download bundle is built with JSZip in the browser. PNGs are stored as base64 entries, SVGs as plain text, and each filename is prefixed with a zero-padded index (001-, 002-, ...) so files sort naturally in Finder, Explorer, or print pipelines. Labels are sanitized to ASCII letters, digits, and underscores, then truncated to 40 characters to stay safe on Windows' 260-character path limit.
Error correction is configurable at L (recovers ~7%), M (~15%), Q (~25%), or H (~30%). Higher levels add redundant codewords, which makes the code more tolerant of dirt, glare, or print misregistration but also pushes it into a larger version with a denser module grid. For batch printing on labels or stickers, M or Q is the typical sweet spot; H is mainly useful when you plan to overlay a logo on top.
Payload format is whatever you put on the line — a plain URL, a tel: link, a mailto: address, an SMS link, a geo: coordinate, or a structured WIFI:T:WPA;S:Name;P:secret;; string. The example CSV in the textarea shows the WiFi syntax. The qrcode library auto-selects the most compact mode (Numeric, Alphanumeric, Byte, or Kanji) per entry, so a list of all-uppercase URLs will encode tighter than a list of mixed-case text strings of the same length.
The hard limit per code is the QR specification itself: 4,296 alphanumeric characters or 2,953 bytes at the minimum error correction. In practice anything beyond a few hundred bytes produces a version 20+ code with very small modules that consumer phone cameras struggle to lock onto. If a line exceeds capacity for the chosen error correction level, that row is flagged as "Invalid or too long" in the results column rather than failing the whole batch.
Because no upload step exists, your input list never leaves the browser tab. This matters when the URLs themselves are sensitive — pre-launch landing pages, internal dashboards, individualised tracking links — or when company policy forbids pasting customer data into third-party online tools.

Common Use Cases

01

Marketing campaign variants

Generate one QR per UTM-tagged landing page in a campaign so each print placement, channel, or city is independently trackable in analytics.

02

Event ticket and badge runs

Produce a QR per attendee from an exported registration CSV, ready for the printer to drop into name badges or wristbands.

03

Asset and inventory tagging

Generate codes for SKUs, server rack units, lab equipment, or library books that link to the corresponding internal record page.

04

Restaurant table cards

Issue a unique code per table that opens the menu with the table number prefilled, useful for pay-at-table or order-at-table flows.

Frequently Asked Questions

There is no hard cap, but practical limits come from browser memory: rendering 1024px PNGs uses around 4 MB of canvas memory each. A few hundred codes at 512px is comfortable on a laptop. Codes are rendered in chunks of 10 with a setTimeout(0) yield between batches so the UI stays responsive throughout.
One entry per line. If the line contains a comma, everything before the first comma is the QR payload and everything after it is the label used for the filename. Lines without a comma use the payload as their own label. Empty lines are skipped. CSV files dropped on the upload zone are read as plain text and pasted into the textarea.
Yes — write the full payload on the line. WiFi uses WIFI:T:WPA;S:NetworkName;P:password;;, phones use tel:+15551234567, SMS uses sms:+15551234567?body=Hi, and emails use mailto:name@example.com?subject=Hello. The QR Generator page builds these strings interactively if you need help with the syntax.
PNGs are raster images at the resolution you pick (256, 512, or 1024 px). SVGs are vector files made of <rect> elements — they have no resolution and stay sharp at any print size. Use PNG for screen mock-ups or low-DPI labels, SVG when you are sending artwork to a press or laser cutter.
L through H add increasing levels of Reed-Solomon redundancy. H tolerates roughly 30% damage but bumps the code to a higher QR version with smaller modules, which can hurt scannability on small printed labels. For most batches M (15%) is the right balance; raise to H only when you plan to overlay a logo or print on rough surfaces.
The qrcode library throws when a payload exceeds the maximum capacity for the chosen error-correction level — about 4,296 alphanumeric characters at L, dropping to roughly 1,852 at H. Shorten the URL (use a redirector), trim the text, or lower the error correction setting and regenerate.
Labels are sanitized down to letters, digits, and underscores, capped at 40 characters, and prefixed with a zero-padded index. That avoids spaces, slashes, colons, and other characters that break paths on Windows or shell scripts on Linux.
No. The qrcode library, JSZip, and the canvas exports all run inside the page's JavaScript context. There is no upload endpoint behind this tool — you can confirm that with your browser's network tab while you generate.
Not in batch mode. The customizer offers logo overlay for one-off codes; in bulk that would mean a per-row image column and a much heavier rendering pipeline. If you need branded codes at scale, generate plain ones here and composite logos in a separate design pass.
Yes, provided the printed module size is at least about 0.4 mm per cell at typical phone-camera distances. Print at 300 DPI or higher, leave the white quiet zone (the 2-module margin the tool already adds), and avoid scaling tiny PNGs up — use the SVG output if you need large prints.

Advertisement