March 25, 20265 min read

How to Generate Thousands of QR Codes at Once

Practical guide to bulk QR code generation. CSV import, variable data, batch workflows, and real use cases for event badges, inventory labels, and direct mail.

qr code bulk batch CSV automation inventory labels
Ad 336x280

Generating one QR code is easy. Generating 10,000 unique QR codes — each with different data — is a different problem entirely. But it's a problem that comes up constantly in real businesses.

When You Need Bulk QR Codes

These are the scenarios I see most often:

  • Event badges: 5,000 attendees, each badge has a unique QR code encoding their vCard or registration ID
  • Inventory labels: 20,000 SKUs, each with a QR code linking to product specs
  • Direct mail campaigns: 15,000 postcards, each with a personalized QR code linking to a unique landing page
  • Asset tracking: 3,000 pieces of equipment tagged with unique QR codes for maintenance tracking
  • Gift cards and vouchers: serial-numbered QR codes linking to redemption pages
  • Pharmaceutical serialization: unit-level QR codes mandated by the Drug Supply Chain Security Act
The common thread: variable data. Every code is different. You can't just generate one and copy it.

Method 1: QRMax Bulk Generator

The QRMax bulk generator accepts CSV uploads. You prepare a spreadsheet where each row is one QR code, and the tool generates all of them.

Example CSV structure:

filename,data
badge-001,"https://event.com/badge/001"
badge-002,"https://event.com/badge/002"
badge-003,"https://event.com/badge/003"

Upload the CSV, set your design preferences (colors, dot style, size), and download a ZIP file with all generated codes. Each file is named according to your filename column.

For large batches (1,000+), this is the fastest approach that doesn't require writing code.

Method 2: Python Script

For developers or anyone comfortable running a script, Python handles bulk generation efficiently:

import qrcode
import csv
import os

os.makedirs('output', exist_ok=True)

with open('data.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
qr = qrcode.QRCode(
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4,
)
qr.add_data(row['data'])
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white')
img.save(f"output/{row['filename']}.png")

On a modern laptop, this generates roughly 50-100 QR codes per second. A batch of 10,000 takes under 3 minutes.

Method 3: Command-Line Pipeline

For Linux/macOS environments with qrencode installed:

while IFS=, read -r filename data; do
  qrencode -o "output/${filename}.png" -s 10 "$data"
done < data.csv

This approach integrates well into CI/CD pipelines and automated workflows.

Preparing Your Data

The quality of your bulk QR codes depends entirely on the quality of your input data. Common issues:

ProblemConsequenceFix
Extra whitespace in URLsQR encodes the spaces, URL breaksTRIM() in Excel before export
Special characters unescapedEncoding errorsURL-encode special characters
Duplicate filenamesFiles overwrite each otherAdd unique ID prefix
URLs too longDense codes, hard to scanUse URL shortener or simpler paths
Missing data in rowsBlank QR codes generatedValidate CSV before processing
Always validate your CSV before running the batch. A quick sanity check: open the CSV in a text editor, verify the headers match what the tool expects, spot-check 5-10 random rows.

Real-World Example: Event Badges

I helped a conference generate 8,400 attendee badge QR codes last year. Here's the workflow:

  1. Export attendee data from the registration system (Eventbrite) as CSV
  2. Create a formula column: https://conf.example.com/badge/{registration_id}
  3. Upload to QRMax bulk generator
  4. Download ZIP with 8,400 PNG files
  5. Import into the badge template in InDesign using variable data publishing
  6. Send to printer
Total time from export to print-ready files: about 45 minutes. The alternative — manually creating each code — would have taken weeks.

Design Consistency in Bulk

When generating thousands of codes, visual consistency matters:

  • Same dimensions: set a fixed output size (e.g., 300x300px for screen, 1200x1200px for print)
  • Same error correction level: don't mix L and H in the same batch
  • Same color scheme: brand consistency across all materials
  • Same quiet zone: ensure uniform margins
With QRMax, design settings apply to the entire batch. One configuration, thousands of consistent outputs.

File Organization

For large batches, organize outputs thoughtfully:

output/
  batch-2026-03/
    badges/
      badge-0001.png
      badge-0002.png
      ...
    inventory/
      sku-A1001.svg
      sku-A1002.svg
      ...
    manifest.csv  (maps filename to data)

Always keep the manifest CSV alongside the output files. Six months from now, you'll need to look up which code maps to which data.

Performance Considerations

Batch SizeTool RecommendationApproximate Time
1-50QRMax web interface1-2 minutes
50-1,000QRMax bulk generator2-5 minutes
1,000-10,000QRMax bulk or Python script5-15 minutes
10,000-100,000Python or CLI pipeline15-60 minutes
100,000+Parallel processing pipelineDepends on hardware
For batches over 100,000, consider splitting into chunks and processing in parallel across CPU cores.
Ad 728x90