Skip to content
UseQR

How-to guides

How to generate QR codes in bulk from a spreadsheet

Export a CSV with one row per code, upload it, and download a ZIP of images, a grid PDF, or Avery-format label sheets. Verify every code decodes before printing — a systematic error found after 5,000 labels is expensive.

1. Prepare the CSV

One row per code. At minimum a column with the data; add a filename column so the outputs are identifiable:

name,data
table-01,https://example.com/menu?table=1
table-02,https://example.com/menu?table=2
table-03,https://example.com/menu?table=3

Practical rules:

  • Non-sequential tokens for anything that must not be guessable. c/0001, c/0002 invites enumeration.
  • Avoid ambiguous characters if a human might type the value as a fallback: no 0/O, no 1/l/I.
  • Keep values short. Every character adds modules, and in a bulk run you are printing the same mistake thousands of times.
  • UTF-8 without a BOM, or the first row will carry invisible characters.

2. Upload and set the style once

Style applies to the whole batch. Set the colours, module shape, error-correction level and size before generating, not after.

For labels, match the error-correction level to the environment: Q for anything handled or outdoors, M for clean indoor use.

3. Choose an output

Output For
ZIP of PNG or SVG Feeding into a design or variable-data print workflow
Grid PDF Printing and guillotining
Avery label sheets (5160, 5163, L7160) Printing directly onto label stock

For label sheets, check your printer's margins before running the whole sheet — office printers drift, and a code clipped by a margin is dead.

4. Verify the whole batch

This is the step that separates a bulk run from a bulk mistake. Every code should be rasterised and decoded before it goes to press. UseQR's bulk tool does this automatically and reports any row that failed.

A systematic encoding error — an unescaped character, a truncated column, a payload too long for the chosen size — is invisible in a preview and obvious after 5,000 labels.

5. Print a stress proof

Print one sheet at 90%, 80% and 70% of the intended size and scan each. If the intended size only just works, you have no margin for press variation across a long run.

Doing it programmatically

curl -X POST "https://useqr.app/api/v1/qr/batch" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"data":"one"},{"data":"two"}]}'

Up to 100 items per call, no key required. Chunk larger runs.

FAQ

How do I make hundreds of QR codes at once?

Prepare a CSV with one row per code and run it through a bulk generator that returns a ZIP, a grid PDF or label sheets. UseQR's bulk tool is free with no row limit.

Should I verify bulk-generated codes?

Yes, every one. A systematic encoding error is invisible in a preview and becomes obvious only after the print run. Decode-verification catches it in seconds.

What should my CSV contain?

At minimum a data column. Add a name column so outputs are identifiable. Use UTF-8 without a BOM, and non-sequential tokens for anything that should not be guessable.

Can I print bulk QR codes onto label sheets?

Yes — Avery 5160, 5163 and L7160 layouts are supported directly. Test one sheet first, because office printer margins drift.