A QR code and barcode scanner for iPhone with batch capture, persistent history, and broad format coverage — QR, Aztec, PDF417, Data Matrix, plus EAN, UPC, Code 128 and other linear barcodes. The recognizer runs on-device using Apple's Vision framework. No account, no cloud upload, no tracking of scanned content.
The iPhone Camera reads QR codes since iOS 11 and Control Center has a built-in Code Scanner since iOS 12. For a single QR — joining Wi-Fi, opening a restaurant menu, paying a parking meter — the Camera is the right tool and you don't need a separate app. A dedicated QR code scanner app earns its place when the job is more than one tap: batch-capturing a sequence of codes, keeping a searchable history of every code you've decoded, reading barcode formats Camera handles less reliably (EAN-13, UPC-A, Code 128 on tight retail labels), or pulling a code out of a saved photo or PDF page.
ScanLens uses Apple's Vision framework for recognition — the same engine the system Camera uses, so format coverage matches. What sits on top is the workflow: batch mode that keeps capturing without dismissing the viewfinder, a persistent decoded-value history with timestamps and thumbnails, photo-import for codes inside images, and integration with the ScanLens document library so a scanned shipping label, an ISBN off a book spine, or an event ticket QR ends up next to the documents they relate to.
ScanLens reads two broad families of code. 2D codes store URLs, plain text, contact cards, Wi-Fi credentials, or arbitrary binary payloads in a square or rectangular pattern. The supported set: QR Code (the universal one), Aztec (transit and airline tickets), PDF417 (US driver's licenses, FedEx labels, boarding passes), and Data Matrix (industrial parts, pharmaceutical packaging, postal labels). All four are supported by Apple's Vision framework, so they decode at the same accuracy as the system Camera.
1D linear barcodes are the rows of vertical stripes found on retail packaging, library books, shipping labels, and inventory tags. ScanLens covers EAN-8 and EAN-13 (international retail), UPC-A and UPC-E (North American retail), Code 39 (industrial), Code 93 (logistics), Code 128 (shipping and inventory), Codabar (libraries and blood banks), and ITF-14 (shipping case packs). The 1D group benefits most from the dedicated app: linear barcodes need tighter framing and steady focus than QR, and the dedicated viewfinder with edge guides gets cleaner reads than Camera's general-purpose detection.
Two things the app does not do: it doesn't generate codes (use the Shortcuts app or any free QR generator), and it doesn't decode obscure proprietary formats like Maxi Code or Han Xin Code that aren't in Apple's Vision API. If a format isn't on the list above, ScanLens won't see it.
Aim the camera at the code; the value appears immediately. URLs open the browser on tap (with a confirm dialog — no surprise navigations). Plain text shows in a result panel with copy and share. Contact cards (MeCard, vCard) offer Add to Contacts. Wi-Fi credentials offer Join Network. The decode runs in real time at 30+ fps on iPhone 12 or newer.
Tap into batch mode and the viewfinder stays open as you sweep across multiple codes. Each new code adds a line to a running list with a thumbnail and the decoded value. End the session when done. Useful for inventory counts, conference badge check-ins, library shelf cataloging, or sweeping the ISBNs off a stack of books for an import into Goodreads or Library Thing.
Every decoded code lands in a history view with the value, format, timestamp, and a small captured-frame thumbnail. Re-open a saved URL weeks later, copy a previously decoded text, or look up which conference badge belonged to which contact. History lives in the ScanLens library on the device; standard iOS Files sync can carry it through iCloud Drive if you want a backup.
Photo-import takes a still image — a screenshot of a friend's QR, a poster you photographed without scanning at the time, a code embedded in a PDF page. The decoder runs over the image as if it were a live frame and pulls the value out. Useful when the code is no longer in front of you or when you want to keep the source image alongside the decoded text in your library.
First-time setup is one Camera permission. From there, scanning a single code is a tap-aim-decode, and a batch run is a tap, sweep, tap-done.
| Step | Action | Tips |
|---|---|---|
| 1 | Open ScanLens and pick the QR & barcode mode | Mode 03 in the home grid; permission prompt the first time |
| 2 | Aim at the code, hold steady | Linear barcodes need a tighter frame than QR; brace your elbow |
| 3 | Read the decoded value in the result panel | URL: tap to open. Text: tap copy. Contact: tap Add |
| 4 | (Optional) Switch to batch mode | Viewfinder stays open; codes pile into a list as you sweep |
| 5 | Review the session and save | End-of-session screen lets you delete duplicates or wrong reads |
| 6 | Find it later in history | History is searchable by decoded text and filterable by format |
Conference badges, festival wristbands, theater tickets. Batch mode keeps the viewfinder open as a queue of attendees walks past — each badge scan appends to the list. History gives a timestamped roster afterwards. Codes scanned: Aztec (transit-style tickets), PDF417 (boarding-pass-style), QR (most event apps).
Sweep a shelf or stockroom in batch mode. Each item's EAN-13, UPC-A, or Code 128 lands in the list. Export the session as a CSV to share with the inventory spreadsheet. No keyboard typing; the iPhone is the only device on the warehouse floor.
Personal libraries, school collections, classroom sets. Scan the ISBN-13 barcode off the back of each book in batch mode; export the list to Goodreads, LibraryThing, a school inventory CSV, or Apple Notes. Includes Codabar for libraries that still use legacy borrower IDs.
Data Matrix is the GS1 standard for pharmaceutical packaging. Decode lot numbers and expiration dates off prescription bottles or vaccine vials. The on-device recognizer matters here: medication identifiers shouldn't ride to a third-party server.
PDF417 and Code 128 on courier labels — FedEx, UPS, DHL, USPS. Scan the label, decode the tracking number, paste into the carrier's tracking page. For receivers verifying inbound shipments or warehouse staff sweeping a pallet of boxes in batch.
Yes — the built-in Camera app reads QR codes since iOS 11 and Control Center has a dedicated Code Scanner since iOS 12. For one-off QR scans (Wi-Fi join, restaurant menu, link), Camera is the right tool. A dedicated QR scanner like ScanLens is useful when you need batch scanning of several codes in a row, persistent history of every code you scanned, broader barcode format support (EAN-13, UPC-A, Code 128, PDF417, Data Matrix), or you want the scanned values to sit alongside your document library instead of disappearing after the tap.
QR Code, Aztec, PDF417, Data Matrix (2D); EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, Codabar, ITF-14 (1D linear). The recognizer is Apple's Vision framework, the same engine the system Camera uses, so format coverage matches iOS. Two formats Camera handles slightly better than third-party apps: live AR overlay highlighting and zero-tap URL opening. ScanLens trades those off for batch capture and history.
No. Recognition runs locally on the iPhone using Apple's Vision framework. The image of the code, the decoded value, and the saved history all stay on the device. If the QR code is a URL and you tap it, your browser will fetch the URL — that's a normal web request, not an upload of the code itself. There is no ScanLens account and no analytics on individual scan content.
Yes. Open the QR mode in ScanLens, switch to the photo-import option, pick the image from Photos or Files. The decoder reads the code from the static image just like from a live camera frame. Useful for screenshots someone texted you, codes embedded in PDFs, or pictures of posters taken without scanning at the time.
Yes — that's the main reason to use a dedicated scanner instead of Camera. Batch mode keeps the viewfinder open and captures each new code into a list. Useful for inventory counts (scan every item on a shelf), event check-ins (scan attendee badges in a row), or library cataloging (scan ISBN barcodes off book spines). The session ends when you tap done; the full list saves to history.
Each entry stores the decoded value (URL, plain text, contact card, Wi-Fi credentials), the format (QR, EAN-13, etc.), the timestamp, and a small thumbnail of the captured frame. You can re-open a URL from history, copy any decoded text, share, or delete. History lives in the ScanLens library on the device — iCloud Drive sync optional through standard Files integration.