The short answer: your camera is already the scanner
If you have an iPhone or an Android phone bought in roughly the last seven years, you already have everything you need. Open the camera, point it at the code, wait for the banner or notification to appear, and tap it. That is the whole procedure on both platforms, and it is the one the manufacturers themselves document.
Worth stating plainly, because the app stores are still full of QR scanner apps, many advertising-supported and some asking for permissions a scanner has no business wanting. They exist because of history: before 2017, iOS genuinely could not read a code without one. The stock camera path is now faster, needs no install, and sends your scan to nobody.
The rest of this guide covers what actually trips people up — the dedicated scanner control hidden on each platform, what to do when the code is a screenshot, and why a code that looks fine refuses to scan.
Why a QR scanner app is almost never the answer
A QR code is a public, documented format. The pattern is specified in ISO/IEC 18004, and decoding it is arithmetic — there is no proprietary step, no server call, nothing a vendor can own. Any competent decoder gets the same answer from the same image.
That means a scanner app competes on nothing except interface, while carrying real costs: another install, a camera permission it often wants permanently, and advertising or scan logging in the free ones. Your phone does the identical maths locally.
Two narrow exceptions. Bulk inventory work benefits from a scanner that queues hundreds of reads and exports them. And some older industrial symbologies are not QR at all — a barcode rather than a QR code, or a Data Matrix on a circuit board, may not be recognised. For anything the public will point a phone at, the stock camera is enough.
How to scan a QR code on iPhone and iPad
Apple documents two routes, and the second one is the one most people have never found.
Using the Camera app. Open Camera from the Home Screen, the Lock Screen or Control Center, and hold the phone so the code appears on screen. You do not need to take a picture and you do not need to fill the frame — the camera recognises the pattern and shows a tappable link. Tap it and iOS opens the destination. On models with Camera Control, that button opens Camera directly.
Using the Scan Code control. iOS carries a dedicated code scanner in Control Center. If it is not already there, touch and hold the Control Center background, tap Add a Control, and pick Scan Code from the gallery. Tapping it opens a scanner with no photo interface at all, which is noticeably quicker at a till or a ticket barrier. Apple's guide also notes the flashlight button for scanning in poor light.
The difference in practice: the Camera app is already muscle memory, while the Scan Code control is one tap from any screen and leaves no stray photo behind. For anything you scan often, the control is the better habit.
Tips
- If no link appears, pull back. A phone camera cannot focus closer than a few inches, and a code held too close is simply blurred to the sensor.
- The link preview shows the domain before you tap. Read it. A code is just a sticker, and a sticker can be placed over another sticker.
- In Control Center, touch and hold the background, then Add a Control, to find Scan Code if it is missing.
What iOS does with the result
A web address opens in your default browser. Other types are handled more cautiously: a WiFi code prompts you to join, a contact code offers to create a card, an app-store link opens the App Store. iOS asks first rather than acting, which is the correct behaviour.
One limitation matters for the next section: both documented Apple routes are live-camera routes, filed under Camera in Apple's own guide. Neither describes reading a code out of an image already saved on the device.
How to scan a QR code on Android
Android has three routes, and which ones you have depends on the phone and the version.
The built-in camera app. Google's own account-help material states that you point the built-in camera at the code and tap the banner that appears, and that this requires Android 9 or higher. On most modern phones this is on by default; on a few it is a toggle in the camera settings, usually described as scanning codes or detecting QR codes.
The Quick Settings tile. Swipe down from the top of the screen and look for Scan QR code. Google's Pixel help describes exactly this, and notes that if you cannot see it you may need to swipe to reach more buttons, or tap the pencil icon to add it to the panel. Like the iOS control, it opens a scanner directly with no photo interface.
Google Lens. Lens reads codes as one of its recognition modes, and it is the fallback when the camera app's own detection is missing or has been turned off. It is also the route Google's documentation uses for payment codes.
Because Android is not one product, availability varies by manufacturer. The Quick Settings tile in particular is not on every device. If neither the camera nor the tile is present, Lens is the dependable option, and it ships on the overwhelming majority of Android phones sold with Google services.
| Route | Where it lives | Availability |
|---|---|---|
| Built-in camera app | Point and tap the banner | Android 9 and higher, per Google |
| Scan QR code tile | Quick Settings, swipe down from the top | Device-dependent; add it with the pencil icon |
| Google Lens | Lens app, Assistant, or in the camera | Almost all phones with Google services |
How to scan a code that is already on your screen
This is the case the platform documentation handles worst, and it comes up constantly: the code arrived in an email, a PDF, a chat message or a screenshot, and it is on the same phone you would be scanning with. You cannot point the camera at the screen it is displayed on.
The usual workarounds are awkward. Showing the code on a laptop and scanning it with the phone needs a second device. Printing it wastes paper. On iOS, pressing and holding a code in Photos will often surface the link through Live Text, and on Android the Lens icon in Google Photos does something similar — but Apple files QR scanning under Camera rather than Photos, and Google's Photos help does not mention QR codes at all. Both work often enough to try and neither is documented, so neither is something to rely on.
The straightforward answer is a decoder that takes the image file. An online QR code scanner runs the same arithmetic on the pixels of your screenshot that a camera runs on a live frame: drop the PNG or JPG in and it returns the encoded contents as text. It handles the awkward cases the camera cannot — a code in a PDF, a code too small on screen to photograph legibly, a code on a page you are reading on the only phone you have.
Seeing the destination as text, before you visit it
There is a second reason to decode rather than scan, and it is the better reason. When you scan with a camera, the phone shows you a shortened preview and one tap opens it. When you decode an image, you get the raw contents — the full URL, the complete WiFi string, every field of the contact card — as text you can read before deciding anything.
That distinction is the whole of QR safety. The widely reported risk with QR codes is not a flaw in the format; it is that a code is an opaque sticker, and anyone can place one over another one on a parking meter, a menu or a charging point. No amount of specification work fixes that, because the pattern is doing exactly what it was asked to do. Reading the destination first is the only defence that actually works, and it is the one thing a camera scan is poor at.
It is also how you check your own work. If your code points at a hosted file — see turning a photo or image into a QR code for how that indirection works — decoding the exported PNG confirms the pattern carries the URL you meant.
When a scan fails: the six usual causes
A code that will not scan is nearly always a physical problem rather than a data problem. The encoding either worked or produced no code at all; there is no partial-encode state that yields a pattern which almost decodes. So when a code resists, look at the printing, the lighting and the geometry.
The most common single cause is an inadequate quiet zone. ISO/IEC 18004 requires four modules of clear margin around a QR symbol — four times the width of one of the small squares — and designers crop it constantly, because the margin looks like wasted space in a layout. Without it, the decoder cannot establish where the symbol ends. This is a real difference between formats: Aztec codes need no quiet zone at all, which is one reason they appear on boarding passes where space is tight.
After that, in rough order of how often it happens: insufficient contrast between the dark and light modules; glare from a glossy laminate or a screen; a code printed too small for the distance it is read from; a logo or graphic covering too much of the pattern; and physical damage or distortion from printing on a curved surface.
| Symptom | Likely cause | Fix |
|---|---|---|
| Nothing happens at any distance | Quiet zone cropped away | Restore four modules of clear margin on all sides |
| Works on paper, fails on the packaging | Glare, or printing on a curve | Matte finish; keep the code on a flat panel |
| Works up close, fails from across a room | Printed too small for the read distance | Increase size; a poster code needs several inches |
| Worked before the design pass | Logo covering too much of the pattern | Keep the overlay modest and re-test every export |
| Scans on one phone, not another | Low contrast, or a marginal error-correction budget | Increase contrast; reduce overlay; raise correction level |
| Inverted colours, light on dark | Some decoders will not invert | Use dark modules on a light background |
Tips
- Test every code on both an iPhone and an Android phone before a print run; decoders differ at the margins.
- Test at the distance and in the light the code will actually be read in, not on your desk under a lamp.
- If a code must carry a logo, keep the overlay modest and confirm the export still decodes — see the design options for the controls that matter.
Not every code opens a web page
A QR code holds text, and the phone decides what to do with that text based on how it starts. This is why codes behave so differently from one another, and why a scan sometimes produces a prompt instead of a browser.
A plain web address opens the browser. A WiFi code begins with a WIFI: prefix and carries the network name, the security type and the password, so the phone offers to join rather than to browse. A contact code contains a vCard and the phone offers to create a contact. A payment code usually holds a deep link into a specific payment app, which is why it does nothing useful on a phone without that app installed.
Two consequences follow. First, a code can be entirely legitimate and still appear broken to you — a payment code for an app you do not have will fail with no obvious explanation. Second, the contents of a WiFi code are plain text, not encrypted: anyone who decodes the image reads the password. That is fine for a guest network printed on a café wall, and a poor idea for your main network.
There is also a durability question hiding in all of this. A static code encodes its destination directly, so the pattern is the destination and it cannot be changed once printed. A dynamic code encodes a short redirect address instead, so the destination can be repointed later without reprinting. The scanning experience is identical; what differs is whether you can fix a mistake after the fact.
Checking a code you created, before anyone else scans it
Everything above is about reading other people's codes. The same tools verify your own, and the sequence that catches the most problems is short.
First, decode the exported file rather than the on-screen preview. The preview is rendered from your settings; the export is what reaches the printer. Reading the URL back out of the final PNG or SVG confirms the pattern carries what you intended, and catches the whole class of errors where a typo survived into production.
Second, scan the physical proof, not the file. Print it at final size on the final material, and read it with two different phones at the distance and in the light it will live in. A code that passes on a laptop screen and fails on matte kraft paper under warm lighting is common, and trying it is the only way to find out.
Third, settle before the print run whether the destination will ever need to change, because that decision is irreversible once the codes are out. The QR code best practices guide covers the sizing, contrast and quiet-zone rules in more depth.