Skip to content
UseQR
ESC

Jump to

MOVEOPEN50 places

Scanning

Batch scanning many QR codes

Three workflows scale past a handful of scans: a hardware 2D imager in keyboard-wedge mode typing each result into a spreadsheet row, a phone scanner app with a batch mode, or posting images to a decode API in a loop. Whichever you pick, deduplicate results and timestamp every scan.

View as MarkdownPaste this page into any AI assistant. It is plain, portable Markdown.

Pick the workflow that matches the volume

The phone-camera flow (scan, banner, tap) is built for one code at a time. Past a dozen scans it collapses under its own taps. Three workflows replace it, in ascending order of setup effort:

1. Keyboard-wedge imager into a spreadsheet

A hardware 2D imager in USB-HID mode enumerates as a keyboard and types each decoded payload, with a configurable Enter suffix. Setup is: open a spreadsheet, click a cell, scan. Each pull of the trigger fills a row and drops to the next: hundreds of scans an hour with zero software written. This is the default answer for goods-in, asset audits and inventory management. Configure the Enter suffix (and the keyboard layout, which silently garbles symbols when mismatched) via the scanner's configuration barcodes.

2. Phone app with batch mode

Dedicated scanner apps offer a continuous mode that appends each detected code to a list without stopping, then exports CSV. Slower and less rugged than an imager but zero extra hardware, fine for occasional stocktakes and event check-ins in the low hundreds. This is one of the few workflows that justifies installing a scanner app at all, per do you need a scanner app.

3. A decode API in a loop

When the codes arrive as images (photos of received pallets, scanned paperwork, screenshots) post them to a decode endpoint instead of re-photographing them:

for f in scans/*.jpg; do
  curl -s -F "file=@$f" https://useqr.app/api/v1/decode >> decoded.jsonl
done

Each response is JSON: {"count": n, "codes": [{"text": "...", "format": "QRCode"}]}. The endpoint reads up to 8 codes per image (10 MB limit per image), so one photo of several labels yields several results, useful in combination with the layout advice in scanning multiple codes in one frame. Wiring this into real pipelines is covered in decoding QR codes programmatically.

Dedup and timestamps: the unglamorous 80%

Every batch workflow produces the same two data-quality problems.

Duplicates. The same label gets scanned twice: a re-picked item, a nervous double-trigger. Decide before the count what a duplicate means: in inventory it is noise (dedupe on payload, keep the first), at event check-in it is signal (a second scan of one ticket is exactly what you want to catch). Deduping in a spreadsheet is a COUNTIF on the payload column.

Timestamps. A wedge scanner types only the payload, no time, no station. And the classic spreadsheet trap: NOW() recalculates on every edit, so pasting it beside each scan silently rewrites history. Use a sheet script that stamps the row on edit, an app that exports its own timestamps, or the API loop above (add date -Iseconds per line). Record payload, ISO 8601 timestamp, station/operator: the minimum that makes a count auditable.

Design the codes for batch scanning

Batch throughput is set when the codes are made, not scanned. Short payloads (an ID, not a 200-character URL) produce low-version codes that decode faster and tolerate wear, per scan latency. Generate them consistently with the bulk generator or the workflow in making QR codes in bulk, and print label runs with the sticker sheet tool.

FAQ

How do I scan many QR codes into a spreadsheet?

Use a 2D imager in keyboard-wedge mode. It enumerates as a USB keyboard and types each decoded payload followed by Enter, so with the cursor in a cell each trigger pull fills a row. No software or integration is needed.

Can a phone batch-scan QR codes?

Yes, dedicated scanner apps offer a continuous batch mode that appends every detected code to a list and exports CSV. It is slower than a hardware imager but needs no extra equipment, which suits occasional stocktakes and small events.

How do I decode a folder of QR code images?

Loop them through a decode API: post each image and collect the JSON responses. A single request can return multiple codes from one image, so photos containing several labels decode in one pass.

How should I handle duplicate scans?

Decide what a duplicate means first. For inventory, deduplicate on the payload and keep the earliest timestamp. For ticketing, a repeated payload is the fraud signal you are looking for, so log every occurrence with its own timestamp and station.

Try it: free, no signup