User
Create QR codes in bulk
Create one QR campaign for each valid CSV row. Use this when several destinations need separate QR codes, such as store locations, offers or product pages.
Step-by-step guide
Before you start
- Choose the correct team/workspace before generating; the created campaigns belong to that workspace owner.
- Prepare one working destination URL per row. Start with three practice rows, then replace every example.com address with a destination you control.
- Your plan must allow bulk generation and have room for the new QR campaigns. This screen creates records immediately; it is not a dry-run preview.
Open this feature
- Open /portal/qr-codes/bulk on your site.
How to use it
Choose a task
Copy a three-row example
This example has no header. Replace the destinations before using it.
Spring offer,dynamic_url,https://example.com/spring
"Menu, main floor",dynamic_url,https://example.com/menu
Customer support,dynamic_url,https://example.com/support
Download the no-header CSV example
Prepare the three CSV columns
- Open QR Bulk at /portal/qr-codes/bulk. Locate Paste your CSV rows and the CSV rows field.
- Remove the prefilled sample rows unless you actually intend to create them.
- Write one physical line per campaign in this order: name,type_key,url. Do not add a header row.
- Use dynamic_url for the first URL-based practice batch. For another QR type, copy its exact key from QR type reference on the same screen; the visible type label is not the key.
- Use a complete URL, including https://. Put a name containing a comma inside double quotes, for example "Menu, main floor". Do not put a line break inside a quoted cell.
Generate and inspect a batch
- Review the names, keys and URLs in CSV rows. Check that you have replaced the example destinations.
- Select Generate QR codes once and wait for its result.
- After Bulk QR generation completed., read Created [count] QR codes. Valid rows become active campaigns immediately; invalid rows are skipped.
- Select Your campaigns. Search the names from your batch and open each practice campaign to check its destination.
- Open its QR design, download the desired image format and scan the actual exported image with a phone. Confirm the destination before distributing or printing it.
Correct a partial result without duplicating the batch
- Compare the created count with your entered lines. Open Your campaigns and identify the names/destinations that actually exist.
- Build a new CSV containing only the missing or invalid rows, correct their type keys and URLs, then generate that smaller batch.
- Do not submit all original rows again just to fix one failure. This screen creates new records; it does not update matching names or deduplicate the input.
- If generation reports an error, check the campaign list before retrying. If a warning appears, do not assume an older LAST GENERATION count describes the failed attempt.
Fields and examples
| Field or choice | How to use it |
|---|---|
| name | Column 1. A non-empty internal campaign name. Example: Spring offer. A comma in the name requires CSV double quotes. |
| type_key | Column 2. An exact key from QR type reference, such as dynamic_url. Do not substitute Dynamic URL or a translated display name. |
| url | Column 3. A complete valid destination URL. Example: https://example.com/spring; replace the example domain with your own destination. |
| CSV rows | Paste plain CSV text into this field. QR Bulk does not use the Short Link Bulk header/file-upload workflow. |
| rows entered | Counts non-empty lines before validation. A header or invalid row can be counted here and then skipped. |
| Created count | Counts campaigns created by the last successful generation in this page state. It is not an update count or scan count. |
| Other QR types | Bulk creation supplies a name, type and URL. A contact card, menu or other structured type may still need Edit content before it is useful; test its final output. |
Check your finished result
- Check each saved campaign’s name, type and destination in Your campaigns.
- For a practice batch, reconcile every input row with a saved campaign or an identified skipped row.
- Scan the exported image and check the URL/content reached, not just the editor preview.
Problems and fixes
| What you see | What to do next |
|---|---|
| Bulk row limit reached | Reduce the number of non-empty input lines. The row limit is checked before invalid rows are filtered out. |
| QR campaign limit reached | The workspace cannot fit all valid incoming campaigns under its current allowance. Review existing campaigns or ask the owner about the plan. |
| No valid QR rows found | Check column order, a non-empty name, an exact type key and a complete valid URL. Remove a header row. |
| Created count is lower than rows entered | Invalid rows are skipped. Compare against saved campaigns, then correct only missing rows. |
| A URL moved into the wrong column | Quote names containing commas. Keep each campaign on one physical line. |
| The same campaign appears twice | Running the same input again creates another record. Review and remove unwanted duplicates through the campaign list only after identifying them. |
| QR scans but shows incomplete content | Open Edit content for that campaign, complete the type-specific content and save. Three bulk columns do not fill every structured QR field. |
Technical reference
Role-scoped source references
Pinned commit: ca125291cce57358ac4842e50928bc31fc6eab07
Source-only route information
| Method | Source-default route |
|---|---|
| GET | /portal/qr-codes/bulk |