QR Code Scanner

Read a QR code from a screenshot, a photo or your camera, and see exactly what it does before you act on it: where a link really goes, the WiFi password, the contact card, the event. Nothing opens until you press a button.

A screenshot, a photo or a saved QR image. You can also paste one with Ctrl+V (Cmd+V on a Mac).

Runs entirely in your browser. Images and camera frames are read on your device and never uploaded.

What a QR scanner actually reads

A QR code is a grid of dark and light squares called modules. The three large squares in the corners are finder patterns: a scanner looks for their 1:1:3:1:1 ratio of dark and light, uses them to work out where the code is and how it is rotated, then samples every module in the grid. The result is a string of bits holding the content plus Reed-Solomon error correction, the same family of maths used on CDs. Depending on the level chosen when it was made, a code survives roughly 7%, 15%, 25% or 30% of its area being damaged or covered, which is why a logo in the middle does not stop it working.

None of that needs a camera. The decoder only needs pixels, so a screenshot, a photo or a saved image works as well as a live view, and often better, because it is sharp and still. This page finds the code, corrects any errors, and hands back the exact text stored inside.

What a QR code can hold

Every QR code is just text. What your phone does with it depends on how that text starts, which is why the same scan can open a website, join a network or start a payment.

Text starts withWhat it isWhat a phone offers to do
https:// or http://A web linkOpen the page
WIFI:A network name and passwordJoin the network
BEGIN:VCARD or MECARD:A contact cardSave the contact
mailto:, tel:, SMSTO:An email, a phone number or a text messageOpen a pre-filled email, call or text
geo:Map coordinatesShow the place on a map
BEGIN:VEVENTA calendar eventAdd it to your calendar
otpauth://A two-factor login secretNothing, unless scanned by an authenticator app
bitcoin:, ethereum:A payment requestOpen a crypto wallet with the amount filled in

Anything else is plain text. This tool reads all of these, lays out the fields in plain language, and offers the matching action, a .vcf contact file or an .ics calendar file, without carrying any of it out for you.

Checking a link before you open it

A QR code hides its destination until it is scanned, and that is exactly what makes it useful to scammers. Fake stickers placed over real codes on parking meters, car chargers and restaurant tables send people to lookalike payment pages. Phishing emails carry a QR code instead of a link, because a link inside an image slips past the filters that check links in text. The address is the one piece of evidence you have, so this tool shows it in full and highlights the registered domain: the part someone actually bought, just before the first single slash. In paypal.com.account-check.net/login that is account-check.net, not PayPal.

  • Text before an @ sign. In https://yourbank.com@other.site everything before the @ is treated as a login name, and the browser goes to other.site.
  • Lookalike letters. A Cyrillic “а” looks identical to a Latin “a”. The tool decodes these internationalised names (they start xn-- underneath) and flags any that mix alphabets.
  • Short links and QR redirect services. Many legitimate menus and posters use them, but the real destination is invisible until you open it and can be changed later by whoever controls it.
  • Plain http, or a bare number instead of a name. The first sends whatever you type unencrypted; the second leaves you nothing to check.

HTTPS means the connection is private, not that the site is honest. A clean result here is a reason to look more closely at the name, not a guarantee.

Why a code will not scan

Most failures come down to too few pixels per module. A code photographed from across a room may be only a few dozen pixels wide, which blurs neighbouring modules together; cropping closer or moving nearer fixes it. Glare, a curved surface such as a bottle, or a steep angle distorts the grid. A code printed without its quiet zone, the blank margin about four modules wide around it, can merge into its background. Pale colours, or a code whose logo covers more than its error correction can repair, may be unreadable to every scanner. Light-on-dark codes are fine here: each image is also tried with its colours inverted. If you are making codes, the QR code generator test-scans every code before you download it.

What happens to your image

The image you choose or paste is drawn onto a canvas inside this page and read there. It is not uploaded and nothing is kept once you leave. The camera works the same way: frames are read in the page, never recorded, and the camera switches off as soon as a code is found, when you press Stop, or when you switch tabs. Opening a link or a map is an ordinary visit to that site, which is why it always waits for you to press a button. To pick apart a long link's parameters, use the URL encoder and decoder, and for the stripes on a product, the barcode generator explains each format.

Frequently Asked Questions

How do I scan a QR code from a screenshot?
On a computer, take a screenshot of the code (Windows+Shift+S on Windows, Cmd+Shift+4 on a Mac) and press Ctrl+V or Cmd+V on this page. Or save the image and choose it with the file button, or drag it onto the box. On a phone, press the file button and pick the screenshot from your photo library. The code does not need to be cropped, as long as all of it is in the picture.
Is my image uploaded anywhere?
No. The image is decoded by code running in this page, on your own device, and it is not sent to a server or saved. The same goes for camera frames: they are read in the page and never recorded. The only time anything leaves your device is when you press a button such as Open link or Open in OpenStreetMap, which visits that site the same way clicking any link would.
How can I tell if a QR code link is safe?
Look at the registered domain, which this tool highlights: the name just before the first single slash, such as example.com in login.example.com/account. It should belong to the business you expect. Be wary of shortened links, plain http, a numeric address instead of a name, letters from other alphabets, and anything before an @ sign. A clean result is not a guarantee, because a scam can sit on a real-looking new domain, so never enter a password or card number on a page you reached from a code in a public place.
Why does it say no QR code was found?
Usually the code is too small, blurred, cut off at an edge, or photographed at a steep angle with glare. Crop a screenshot closer to the code, or retake the photo straight on in even light. The tool already tries several sizes and inverted colours. It also may not be a QR code at all: square codes with an L-shaped border are Data Matrix, and bullseye codes are Aztec.
Can it read barcodes, Data Matrix or Aztec codes?
No. It reads standard QR codes only. Ordinary product barcodes, the PDF417 codes on many driver's licences, the Aztec codes on many boarding passes and the Data Matrix codes on parcels and medicine boxes use different formats and need a different reader. Micro QR, the very small variant with a single corner square, is not supported either.
Can it read more than one QR code in the same picture?
It reads one code per scan and outlines the one it read on a preview of your image, so you can see which it was. To read another code in the same picture, crop the image to that code, or point the camera at it on its own.
Why won't the camera start?
Browsers only allow camera access on secure (https) pages and only after you allow it for the site. If you said no once, the browser remembers: use the icon at the left of the address bar to allow the camera, then press Start camera again. The camera can also be held by another app or tab, such as a video call. If none of that helps, take a photo of the code with your normal camera app and choose it here.
What is an otpauth code, and why does the tool warn about it?
otpauth is the format websites use to set up two-factor login codes in an authenticator app. The code contains the secret that generates every future login code for that account, so anyone who scans it can produce your codes. The tool shows the service and account name but hides the secret until you ask. Only scan such a code into your own authenticator app, and never send it to anyone who asks for it.
The Internet Omni-Tool