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.
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
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:
| Problem | Consequence | Fix |
|---|---|---|
| Extra whitespace in URLs | QR encodes the spaces, URL breaks | TRIM() in Excel before export |
| Special characters unescaped | Encoding errors | URL-encode special characters |
| Duplicate filenames | Files overwrite each other | Add unique ID prefix |
| URLs too long | Dense codes, hard to scan | Use URL shortener or simpler paths |
| Missing data in rows | Blank QR codes generated | Validate CSV before processing |
Real-World Example: Event Badges
I helped a conference generate 8,400 attendee badge QR codes last year. Here's the workflow:
- Export attendee data from the registration system (Eventbrite) as CSV
- Create a formula column:
https://conf.example.com/badge/{registration_id} - Upload to QRMax bulk generator
- Download ZIP with 8,400 PNG files
- Import into the badge template in InDesign using variable data publishing
- Send to printer
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
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 Size | Tool Recommendation | Approximate Time |
|---|---|---|
| 1-50 | QRMax web interface | 1-2 minutes |
| 50-1,000 | QRMax bulk generator | 2-5 minutes |
| 1,000-10,000 | QRMax bulk or Python script | 5-15 minutes |
| 10,000-100,000 | Python or CLI pipeline | 15-60 minutes |
| 100,000+ | Parallel processing pipeline | Depends on hardware |
Related Tools
- Bulk QR Generator — CSV-driven batch generation
- QR Code Generator — individual code creation
- Dynamic QR Codes — trackable codes at scale
- QR Code Design — consistent branding across batches