Review several barcodes at once
Track multiple barcodes in one camera frame, with a highlight on each decoded result. Review values in an accessible list, choose the codes you need and see how many decoded codes are in view.
Features
Up to 20 codes per frame
Configurable with maxResults, and every code gets its own highlight.
Track decoded observations
Follow decoded results across nearby frames. Short-lived tracks do not establish persistent physical product counts.
Choose results
Select decoded values from a list using touch, mouse or keyboard. Selected results stay available after leaving view.
Confirm a delivery
Set expected quantities, identify products, confirm quantities and record corrections in the local receiving workflow.
Bring your own UI
BarcodeTracker and the track event give you coordinates to draw your own AR overlay.
Across platforms
Batch decoding is available on the web, iOS, Android, React Native, Flutter and Python. The web component includes the results list.
A few lines of code
Drop in the pre-built component or build your own UI on the same engine.
How tracking works
- Matching
- Web/iOS/Android use spatial association of decoded results; React Native/Flutter/Python aggregate by symbology and data
- Quantities
- Confirm received quantities explicitly; decoded observations are not physical inventory counts
- Lifetime
- Tracks are dropped 500 ms after they leave the view
- Events
- track: { tracked, added, removed } · scan: new unique codes · select: result selection
- Fields
- TrackedBarcode = Barcode + id, firstSeen, lastSeen, count
<qrgen-scanner mode="batch" symbologies="retail"></qrgen-scanner>
<script type="module">
import "qrgen-sdk/elements";
const el = document.querySelector("qrgen-scanner");
el.addEventListener("track", (e) => {
counter.textContent = `${e.detail.tracked.length} decoded observations in view`;
});
el.addEventListener("select", (e) => console.log(e.detail.selection));
</script><QRGenScanner
mode="batch"
symbologies={["retail", "code128"]}
onTrack={({ tracked }) => setInView(tracked.length)}
onSelect={({ selection }) => setPicked(selection)}
/>Where teams use batch scanning
- Shelf audits and cycle counts
- Receiving mixed pallets
- Order picking with verification
- Finding a specific parcel in a stack
- Library and archive inventory
- Lab sample racks
Try batch scanning now
Open the demo on your phone, or let your coding agent add it to your app.