SmartQRCode
Pricing
  1. Home
  2. /Blog
  3. /Bulk qr from csv upload, staged
business enterprise

Bulk qr from csv upload, staged

SmartQRCode editorial · Updated October 2026

Bulk qr from csv upload turns a spreadsheet into many hosted codes as a staged, resumable job. The parser finds the URL column instead of assuming column A. Bad schemes never become scan destinations. A Canva one-off still wins for a single frozen link you will not count.

What bulk qr from csv upload actually stages

A utf-8 bom on the first header is stripped. The sep equals semicolon preamble is metadata. Put humans under label name campaign title. A javascript scheme refused never becomes a 302.

Bulk is not a loop inside one HTTP request. The upload writes one item per line and returns. Workers then drain those items in chunks. That is why a large sheet can finish after you close the tab, and why a kill in the middle leaves a record of which rows landed. The companion piece on bulk QR code batch jobs is the queue view. This page is the file view.

Each item carries a destination and an optional label. The destination becomes a hosted website URL you can edit after print. UTMs belong on that hosted URL. They do not densify the printed pattern. Putting a 200-character query string into a static symbol would. See UTM QR code parameter plan.

Wi-Fi cannot come from this sheet in a way that stays editable. Wi-Fi is static: not editable after printing, not trackable. If the brief is 400 SSIDs, you are printing 400 frozen payloads, which is a different job.

Paid options are $1.99, $29, $97, and $197. We do not sell an unpaid tier. Pair the output with a website URL generator mindset, tracked QR codes per row, and dynamic QR codes when destinations will move. Product launch placements are the usual reason to mint one code per SKU.

How to prepare the spreadsheet the parser accepts

The failure this is built around: 5,000 rows succeed, column 0 was the internal SKU, and every code points at nothing. Headers are inspected. When there is no header, the URL column is found from the data rather than defaulted to the first field.

  1. Save as CSV. If Excel wrote a UTF-8 BOM, that is fine; the parser strips it so url does not arrive as an invisible-prefixed string.
  2. If the locale uses semicolons, leave the sep=; preamble on line one. It is metadata. Removing it and keeping semicolon fields without declaring the delimiter is how rows glue together.
  3. Put destinations under a header the mapper knows: url, target_url, link, destination, website, address, or href.
  4. Put human names under label, name, campaign, title, or description. Those names do not change modules. They change lists. Read bulk QR code naming rules.
  5. Use https destinations. javascript, data, and file schemes are refused. A printed code that 302s a shopper into a script URL is the incident you are avoiding.
  6. Quoted fields may contain commas and newlines. Do not hand-split the file in a text editor and rejoin it.
  7. Drop trailing blank lines; they are discarded with a reason rather than minted as empty URLs.
  8. Export the live images as SVG or 300 dpi PNG or PDF after the batch completes. Do not screenshot /qr-preview for 5,000 SKUs.
  9. Proof-scan the first, middle, and last row on the real stock at 2 cm or larger with a four-module quiet zone.

Which header names map to the destination

The URL list, in descending confidence, is url, target_url, target url, link, destination, destination url, website, address, href. The label list is label, name, campaign, campaign_name, campaign name, title, description. If your export says "Landing" or "SKU", rename it before upload. The mapper will not guess a SKU into a URL.

HadHeader is recorded so you can see whether line one was consumed. Dropped lines arrive with a row number and a reason. Silent omission is how a plant prints the wrong sheet.

Row numbers are 1-based in the customer file, header excluded. When a printer asks "which line failed," that is the number to read, not an array index from a script.

What happens to a bad URL row

Failed means the worker attempted the row and refused it, and the error says why. Skipped means the row was never attempted because the account's QR allowance ran out. Those two must not be explained as each other. Telling a merchandiser their URLs were invalid when the plan was full starts the ticket in the wrong place.

A batch where every row fails should not read as success. Partial means some created and some did not. Completed means every item created. Failed as a batch status means nothing created.

Design colour belongs in the styled envelope the dashboard actually reads. A base64 SVG dumped into the image field is not a design setting. If a past tool did that, codes render in the default style. Set foreground colour in the batch design object, then proof.

Spreadsheet failures that mint the wrong codes

Assuming column A is the link when A is the SKU. The codes create cleanly. The first scan from a carton is how you find out.

Leaving sep=; in as data after you already converted commas. One field becomes the destination "sep=;".

Uploading javascript: URLs from an internal tracker. They must not reach /api/track. The refusal is the feature.

Killing a request-shaped importer halfway with no item table. You would not know which rows exist. Staging first is what makes resume possible.

Encoding UTMs into a static pattern for "just this flyer" and then needing to change the campaign name. Hosted rows keep the pattern short. Static files do not.

How to sample a sheet before anyone plates

Do not send 5,000 files to prepress on the strength of a green completed badge. Sample. Open three created codes at random from the top of the sheet, three from the middle, and three from the tail. Scan them. Read the destination, including query strings. Confirm the label in the list matches the SKU you think you printed.

If the middle of the file is shifted by one column, the tail is where it shows. Row 12 can look perfect while row 4,812 encodes the previous row's URL. That is a spreadsheet edit in a text editor, or a quoted newline that a downstream tool re-split.

Check dropped lines. A reason attached to a row number is cheaper than a carton in a shop. If dropped is empty and you expected some junk rows, the parser may have treated junk as URLs. javascript scheme refused should appear as failed items, not as live hops.

Export a small ZIP of the sampled SVGs and keep it with the master CSV. When a plant asks "which file is SKU 4401," you answer from the label, not from a conference call. Bulk qr from csv upload is only finished when a human has seen the pixels and the hop.

When one Canva file beats a thousand-row sheet

One destination, never edited, never counted: Canva or another free static generator. Bulk qr from csv upload is overhead. You would be staging a queue to produce one frozen URL a phone could have read from the modules.

Many destinations, later edits, per-row counts: the sheet. Size each symbol for the real distance, export real print files, and keep the provider up. Hosted codes last as long as that resolver does. A static file has no such dependency and no such edit.

Questions this raises

The parser looks for url, target_url, target url, link, destination, destination url, website, address, or href. Labels come from label, name, campaign, campaign_name, campaign name, title, or description. A BOM on url is stripped so the header still matches.

The row is dropped or marked failed with a reason. javascript, data, and file schemes are refused so a scanner never follows them. Skipped means the account ran out of QR allowance, which is not the same as a bad URL.

When you have one destination that will never change and you will not count scans. A Canva one-off is the right tool. Bulk qr from csv upload is for many hosted codes you may edit later.

A first line of sep=; is treated as metadata, not as a destination. Leave it in and the URL would become that preamble.

No. Rows are staged, then drained in chunks. The request that accepts the file is not the thing that must finish 5,000 renders.

Keep going

The tools and playbooks this post refers to, one click away.

Generator

website generator

Open it
Generator

tracking generator

Open it
Generator

dynamic generator

Open it
Use case

product launches

Read the playbook
Guide

bulk qr code batch jobs

Read it
Guide

bulk qr code naming rules

Read it

Make the code this post is about

$1.99 for 7 days, then a paid plan. Pick a type, brand it, and edit the destination whenever you like, even after it is printed.

Create a QR codeSee pricing
SmartQRCode

Dynamic QR codes you can edit after printing, with scan analytics on every one. From a single table tent to a warehouse of asset tags. Pay once or subscribe.

Create a QR codeTalk about Business

QR code types

  • Website QR code
  • Menu QR code
  • WiFi QR code
  • PDF QR code
  • Business card QR code
  • WhatsApp QR code
  • Google review QR code
  • Event QR code
  • Location QR code

More QR codes

  • Text QR code
  • Image QR code
  • Video QR code
  • Social media QR code
  • App download QR code
  • Google Form QR code
  • Business profile QR code
  • All QR code types

Features

  • Dynamic QR codes
  • QR codes with tracking
  • QR code with logo
  • Custom QR code design
  • QR codes that never expire
  • One-time payment QR code
  • No-subscription QR codes
  • Unlimited-scan QR codes

Business

  • QR codes for business
  • Bulk QR code generator
  • QR code API
  • QR code webhooks
  • Custom scan domains
  • White label QR codes
  • Team accounts and roles
  • QR code management platform

Solutions

  • Restaurants
  • Retail
  • Events
  • Healthcare
  • Real estate
  • Hotels
  • All use cases

Resources

  • Guides
  • Compare QR generators
  • Static vs dynamic
  • QR code cost
  • Buy a QR code
  • Cheap QR codes
  • Pricing
  • Help centre
  • About us
  • Contact us
GDPR compliantSSL securedPrivacy first
Terms of servicePrivacy policySecurity·© 2026 SmartQRCode

QR Code is a registered trademark of DENSO WAVE INCORPORATED.