Shopify Mobile already supports effective multi-item barcode scanning in native Shopify workflows. The missing capability is allowing third-party embedded Admin apps to access the same kind of persistent scanning session through App Bridge.
TL;DR
The current App Bridge Scanner API exposes a single method:
const {data} = await shopify.scanner.capture();
This captures one barcode and completes the scanning session. To scan another item, the app must invoke capture() again.
For high-volume workflows such as packing orders, receiving inventory and conducting stock counts, we need:
-
A scanner session that remains open across multiple scans.
-
A subscription or callback that emits an event for each scanned barcode.
-
Control over opening and closing the scanner.
-
Scan-source information and proper support for external or embedded scanners where available.
Shopify POS UI extensions already provide this model through showCameraScanner(), hideCameraScanner() and subscriptions to scannerData. Bringing equivalent capabilities to embedded apps in Shopify Mobile would close a significant gap.
Current limitation
In an embedded Admin app, scanning 30 items currently means initiating 30 separate calls to:
await shopify.scanner.capture();
Each call handles one barcode. The scanner then has to be triggered again for the next item.
This creates a slow and disruptive experience:
-
Open the scanner.
-
Scan one item.
-
Return to the app.
-
Process the result.
-
Reopen the scanner.
-
Repeat for every remaining item.
This is especially noticeable in warehouse environments, where users expect to scan items continuously and receive immediate visual or audible feedback without repeatedly moving between the app and scanner interface.
Shopify already supports the underlying experience
Shopify’s own mobile Admin workflows can already process multiple barcode scans. For example, inventory-transfer workflows allow users to scan multiple products and continue scanning the same variant to increase its quantity.
POS UI extensions also expose a developer-facing continuous scanning model:
shopify.scanner.showCameraScanner();
const unsubscribe =
shopify.scanner.scannerData.current.subscribe((result) => {
console.log(result.data, result.source);
});
// Later:
unsubscribe();
shopify.scanner.hideCameraScanner();
The POS API can also identify whether a scan originated from a camera, external scanner or embedded scanner.
The request is therefore not for Shopify to create an entirely new scanning experience. It is to expose comparable functionality to embedded third-party apps running inside Shopify Mobile.
Requested App Bridge capabilities
1. Continuous scanning sessions
Provide a mode in which the camera scanner stays open and produces multiple results until the merchant or app closes it.
This could follow the POS Scanner API model or use a new App Bridge interface. The exact implementation is less important than allowing apps to process multiple scans in one session.
2. Scan-event subscriptions
Allow embedded apps to subscribe to barcode events instead of receiving only one Promise result.
For example:
const unsubscribe = shopify.scanner.subscribe((result) => {
processBarcode(result.data);
});
3. Explicit scanner controls
Provide methods to open and close the native scanner, similar to:
shopify.scanner.showCameraScanner();
shopify.scanner.hideCameraScanner();
This would let the app control the surrounding workflow while Shopify continues to own the secure native camera interface.
4. External-scanner events and source information
Where supported, expose scans from paired external or embedded barcode scanners through the same subscription.
External scanners operating as keyboards can sometimes be handled through a focused input field, but that is not equivalent to scanner API support. It depends on input focus, can trigger the software keyboard and does not reliably identify the scan source.
Ideally, each event would include information such as:
{
data: string;
source: "camera" | "external" | "embedded";
}
Our use case
We build EasyScan, a warehouse and fulfilment app.
During a scan-to-pack workflow, a packer scans every item in an order in quick succession. The app validates each scan, updates packing progress and alerts the packer when an incorrect item or quantity is scanned.
This workflow needs the camera or hardware scanner to remain active while scan results stream back to the app. Reopening a one-shot scanner for every item materially slows down the packing process and produces a much poorer experience than a dedicated warehouse scanner.
These workflows often run on ordinary phones and tablets in the Shopify Admin app. Requiring merchants to move the workflow into Shopify POS is not always appropriate, particularly for warehouses and fulfilment locations that are not retail checkouts.
Suggested outcome
A successful implementation would let an embedded Admin app:
-
Start a scanning session.
-
Receive each barcode as it is scanned.
-
Update its interface and provide feedback between scans.
-
Continue receiving scans without reopening the camera.
-
End the session when the workflow is complete.
-
Receive external-scanner events where the device and Shopify Mobile support them.
This would benefit apps handling:
-
Scan-to-pack and order verification.
-
Inventory receiving.
-
Stock counts.
-
Picking workflows.
-
Inventory transfers.
-
Returns processing.
-
Product and location lookup.
There have been previous App Bridge requests covering repeated scanning and external-scanner payload access, including Shopify App Bridge issues #257 and #23.
Would the Shopify team consider exposing Shopify Mobile’s existing multi-scan capability through App Bridge, or bringing the POS Scanner API model to embedded Admin apps?
We would be very happy to provide additional use-case details or test an early-access implementation.