Creating one QR code takes a minute. Creating three hundred takes a system. The difference between a smooth batch job and a week of reprints is almost never the generator you choose — it is the quality of the data you feed it and the discipline of your process. This article walks through a complete workflow for bulk QR code creation, suitable for asset labels, event badges, product lines, restaurant tables, or tickets.
Start with a spreadsheet, not with the generator
The most common mistake is opening a QR tool first and typing codes one by one. If you need more than a handful, the spreadsheet is the single source of truth, and everything else follows from it. Build it before you touch any generator.
One row per code. At minimum, four columns:
- ID — a unique identifier for the code itself, used for filenames and tracking (for example,
TBL-014for table 14). - Destination — the URL or text the QR code will encode.
- Label — the human-readable text printed under or beside the code ("Table 14", "Asset: Laptop 032").
- Status — empty at first; later holds values like
validated,generated,printed.
Additional columns are fine — location, owner, batch number, date printed — but resist the urge to build a database. A simple CSV or spreadsheet with clean headers is enough for hundreds of codes.
Clean data rules that save hours later:
- No merged cells, no blank rows in the middle, no trailing spaces in URLs.
- One destination per row. If two rows share a destination, decide whether that is intentional (two labels pointing to the same page) or an error.
- IDs must be unique. Sort by the ID column and scan for gaps or repeats.
- Use plain ASCII where possible in IDs and filenames. Spaces and special characters in filenames cause problems on printers and shared drives.
Validate every link before you generate anything
A QR code is frozen at the moment of creation. If the destination is wrong, every printed label carrying that code is wrong, and you find out when a customer scans a dead link. Validation is the cheapest insurance in this workflow.
Check three things for each row:
- Does the URL resolve? Open a sample of links manually — do not check all of them by hand if you have hundreds, but check every distinct pattern. If rows 1–100 all point to
example.com/product/ID, testing five of them covers the pattern; test every unique destination type. - Is it the final URL? Point codes at the page you want people to land on, not a redirect you plan to set up later. Redirect chains slow scans and break when someone reorganises the site.
- Is it HTTPS? Some phones and corporate networks flag non-secure destinations. Use
https://everywhere.
If your destinations will change over time — menu pages, campaign landing pages, event schedules — consider pointing the codes at stable URLs you control, such as short links on your own domain that redirect to the current destination. The QR code then never needs reprinting even when the target changes. This adds one moving part, so only do it if you will actually maintain the redirects.
Choose a naming scheme and stick to it
Consistent naming sounds boring until you have 400 PNG files called qr_final(3).png and no idea which is which. Decide the filename format before generating, and derive it from the spreadsheet so it is automatic, not manual.
A workable pattern: ID + short purpose + extension, for example TBL-014-table.svg or AST-0032-laptop.svg. If you generate in batches, add a batch prefix: B2-TBL-014.svg.
The same discipline applies to the data inside the codes. If you encode IDs like TBL-014, keep the prefix system documented somewhere — a short README next to the spreadsheet explaining what the prefixes mean. Six months from now, the person reprinting a damaged label will be you, and you will not remember.
Pick one design template and lock it
Batch QR codes should look like a family. Mixed styles read as sloppy and, worse, train scanners to hesitate. Choose one template covering:
- Error correction level. For printed labels that may get scratched, dirty or partially covered, a higher error correction level (level Q or H) lets the code survive damage. Higher levels also make the code denser, so balance against print size.
- Colours. Dark on light, always. High contrast. Inverted codes (light modules on dark) fail on many scanners.
- Quiet zone. The blank margin around the code. Keep it — four modules of space is the conventional minimum. Labels crammed to the edge of the code scan poorly.
- Logo placement (if at all). A logo in the centre is only safe with high error correction, and it reduces tolerance for damage further. For asset labels and tickets, skip it.
Lock the template once, apply it to the whole batch, and never adjust individual codes. If a code will not fit the template, the fix is a bigger label, not a different design.
Export as vector, size for the real world
For anything going to a printer or being reproduced at varying sizes, export as SVG (or EPS/PDF if your printer asks). Vector files scale without quality loss; a raster PNG at the wrong resolution becomes blurry or, worse, prints soft enough to fail scanning.
Practical sizing rules of thumb, not hard laws:
- A QR code on a table tent or badge scanned from under half a metre: 2–3 cm square is usually fine.
- A code on a wall or poster scanned from 2 metres: roughly a tenth of the scanning distance as a side length, so around 20 cm.
- When in doubt, bigger. Print one test at the intended size and scan it with two or three different phones before committing.
The bulk generation tool on QRCodeMax.Vip accepts a spreadsheet of destinations and produces the whole set in one pass, which is exactly what this middle stage of the workflow needs — feed it the validated CSV, apply the template, export vectors.
Test a sample, then check for duplicates
Never send three hundred codes to print untested. Pull a sample — every distinct destination pattern, plus a random handful — and test on real devices:
- Scan with at least two different phones (iOS and Android if possible).
- Scan from the actual printed medium, not just the screen. Print one physical proof sheet first.
- Scan at the real distance and angle a user would use.
- Follow the link and confirm the landing page loads and displays correctly on mobile.
Duplicate checking is the step people skip and regret. Two identical codes on different labels means one of them is wrong: the table tent for table 4 that opens table 9's order page, the badge that gives someone else's access. Sort your spreadsheet by the destination column and confirm that duplicates are intentional. If your generator tool offers a duplicate warning, enable it; otherwise a quick sort plus a spreadsheet formula counting repeated destinations catches most cases.
Print in batches and keep a register
Do not print all three hundred at once on the first run. Print one batch — 20 to 50 labels — and inspect it: alignment, contrast, scannability, label material behaviour (glossy stock can reflect scanner light; matte usually scans more reliably). Fix problems on 50 wasted labels, not 500.
Then keep a register. This is the unglamorous half of the workflow that separates professionals from chaos. Your register can be extra columns in the same spreadsheet:
- Batch number and print date.
- Quantity printed.
- Printer/material used, if you use more than one.
- Status:
printed,deployed,damaged/reprinted.
The register answers the questions that always arrive later: "Which table is missing a sticker?", "Which batch used the old URL?", "Can we reprint label AST-0032 exactly as before?" If you ever change destinations sitewide, the register tells you exactly which codes are affected.
Store the final spreadsheet, the template settings, and the exported files together in one folder. A batch you cannot reproduce is a batch you will eventually regenerate by hand.
Common mistakes
Worth naming explicitly, because every one of them appears in real reprint stories:
- Generating before validating. The link changes after the codes exist. Reprint everything.
- Encoding a page that will move. Campaign URLs, event pages with dates in them, anything seasonal. Use stable URLs or your own redirects.
- Inconsistent IDs.
table14,TBL-14,t-014in the same batch makes matching labels to records nearly impossible. - Low contrast or inverted colours. Light grey on white, white on black, brand pastels. Scanners need contrast.
- Too small for the distance. A 1 cm code on a poster is decoration, not a QR code.
- Skipping the physical test. Codes that scan on screen can fail on curved, glossy or textured surfaces.
- No register. Six months later, nobody knows what was printed, where it went, or what it pointed to.
- Raster export for print. PNGs at low resolution produce codes that scan unreliably on paper.
- Editing codes one by one. If a design change is needed, change the template and regenerate the whole batch from the spreadsheet — never hand-edit individual files.
Final checklist
Run through this before you commit to print:
- Spreadsheet complete: one row per code, unique IDs, destinations, labels, status column.
- All unique destination patterns tested; sample rows opened on a phone.
- URLs are final, HTTPS, no redirect chains.
- Naming scheme documented; filenames derived from IDs.
- One design template: high contrast, dark on light, adequate quiet zone, error correction appropriate for the environment.
- Exported as SVG or equivalent vector format.
- Duplicate destinations checked and intentional ones noted.
- Physical proof printed and scanned at real distance, on multiple phones.
- First batch printed and inspected before the full run.
- Register updated: batch, date, quantity, status per code.
Conclusion
Bulk QR code creation is a data project, not a design project. Build a clean spreadsheet, validate every destination pattern, lock one template, export vectors, test a physical sample, and record what you printed. Do those six things and a batch of three hundred codes is an afternoon; skip them and it is a reprint cycle. The key takeaway: the QR generator is the easy part — the register and the validation are what make hundreds of codes work the first time.