# Barcode Scanner

> Scan barcodes and QR codes with your camera online. Real-time detection, instant inventory count, editable item names, and CSV export. 100% private.

- URL: https://bytescope.dev/en/barcode-scanner/
- Locale: en · Also: [ja](https://bytescope.dev/ja/barcode-scanner.md) · [zh-Hant](https://bytescope.dev/zh-Hant/barcode-scanner.md)
- Runs: Nothing is uploaded. Barcode scanning and inventory data remain entirely in your browser.
- Requires: Any modern browser with camera access. Uses the browser's Barcode Detection API where present; elsewhere a built-in JavaScript QR decoder takes over, so 1D barcodes (EAN, UPC, Code 128) need the native API.
- Updated: 2026-09-08

## What it does

Scan 1D barcodes and QR codes instantly using your device camera without installing any apps or browser extensions. This barcode scanner online tool turns your phone, tablet, or laptop into a fast inventory counter with real-time barcode recognition. Every scanned item is automatically aggregated into a structured list with quantities, timestamps, and editable product names, ready to export as CSV.

### Real-time inventory counting with 1.5-second debounce

Generic barcode readers only display the raw decoded string, forcing you to copy and paste each scan. This tool features a built-in inventory workflow: scanning a barcode increments its count instantly in your inventory table. To prevent accidental double-counts when holding a product in front of the lens, a strict 1.5-second debounce window ensures that the same barcode detected repeatedly within 1.5 seconds is counted only once.

### Browser-native Shape Detection API and compatibility

Barcode detection is powered directly by Chromium's hardware-accelerated Shape Detection API (`BarcodeDetector`). This native implementation decodes high-density retail formats including EAN-13, EAN-8, UPC-A, UPC-E, Code 128, and QR codes at full camera frame rates. Because pure JavaScript QR readers like jsQR cannot decode 1D retail barcodes, this page honestly requires a Chromium browser (Chrome, Edge, Opera, Brave) and cannot be polyfilled in Firefox or Safari.

### Zero data upload and local storage privacy

Your camera video stream is processed in real time entirely inside your browser and is never recorded, transmitted, or uploaded to any server. When you switch tabs or minimize your window, the camera automatically pauses to conserve battery and protect your privacy. All inventory items and custom names are saved in `localStorage` on your device, ensuring your stock data persists between visits without creating an account.

### Dual CSV export for Excel and databases

When your stocktake is complete, export your inventory table with a single click. Choose Excel CSV format with an automated UTF-8 BOM to guarantee seamless opening in Microsoft Excel without character encoding glitches for Japanese or Chinese product names, or export standard UTF-8 CSV for Google Sheets, SQL databases, Python scripts, and warehouse management systems.

## Limits

Does not look up product names or prices online; it decodes codes and keeps a local tally you can export.

## FAQ

### How does the inventory counting mode work?

Whenever your camera recognizes a barcode or QR code, the item is added to the inventory table with a count of 1. Scanning the same code again increments the quantity by 1. A built-in 1.5-second debounce timer prevents the camera from registering rapid multiple counts on a single pass.

### Why is the camera scanner not working on Firefox or Safari?

This tool relies on the native `BarcodeDetector` API provided by the Chromium engine (Chrome, Edge, Brave, Opera). Firefox and Safari currently do not support the Shape Detection API. Because pure JavaScript fallback libraries like jsQR can only decode QR codes and cannot read 1D barcodes (such as EAN-13 or Code 128), a client-side polyfill is not available.

### Is my camera video stream or inventory data uploaded to any server?

No. All barcode detection and inventory management run completely on your local device in client-side JavaScript. The camera feed is processed in memory and never leaves your browser, and your inventory list is stored strictly in your browser's local storage.

### Why did the camera turn off when I switched tabs?

To protect your privacy and conserve battery life, the camera stream is automatically stopped whenever the tab is hidden or sent to the background. When you return to the tab, simply click Start camera to resume scanning.

### What is the difference between the two CSV export options?

The Excel CSV option adds a UTF-8 Byte Order Mark (BOM) to ensure that Microsoft Excel correctly detects character encoding and renders non-ASCII product names without gibberish. The Standard UTF-8 CSV option outputs standard comma-separated text without a BOM, which is best for Google Sheets, databases, and programming scripts.

## Related tools

- [QR File Transfer](https://bytescope.dev/en/qr-file-transfer.md) — Transfer files peer-to-peer between devices with animated QR codes.
- [CSV Explorer](https://bytescope.dev/en/csv-explorer.md) — Open, view, filter, sort and export large CSV and TSV files in your browser.
