Raydar free tools

Read a QR code without scanning it.

Drop in an image of a QR code and see what it actually contains before your phone acts on it. Everything runs in your browser, so the image never leaves your machine.

The interactive tool loads with this page and runs entirely in your browser.

Why reading a code beats scanning it

A QR code is deliberately unreadable by people. That is the whole design: it is a machine format, and the only way to find out what it says is to let a machine act on it. With a link on a screen you can hover and read the destination in the corner of the browser. With a printed square you get nothing, and by the time you know where it goes, you are already there.

That gap is the reason QR codes became a phishing format. The attack does not need to be sophisticated. A sticker over the code on a parking meter, a table tent swapped in a cafe, a poster in a lobby: the code is physical, it is trivially replaceable, and nobody can tell by looking. Reading the image first closes the gap, because you get the destination without the visit.

What this page tells you that a scanner does not

Most online QR readers decode the image and print the raw text, which is the least useful half of the job. A string like https://xn--80ak6aa92e.com/ is technically the answer and tells most people nothing. This page reads the payload, works out what kind of thing it is, and then says what that means in plain terms.

  • Web addresses get picked apart: whether it is encrypted, whether the destination is hidden behind a shortener, whether credentials are embedded before the @ sign to disguise where you actually land, whether the domain uses punycode, and whether it points at a bare IP address instead of a domain.
  • Two-factor keys. An otpauth code carries the seed that generates someone's login codes. Anyone who scans or photographs it can produce valid codes for that account indefinitely. This is the single most sensitive thing a QR code can hold and the page says so.
  • Wi-Fi codes store the network password as readable text, not encrypted. Fine for a guest network, a poor idea for the one your other devices sit on.
  • Payment codes. Crypto addresses are a common swap target, and a transfer cannot be undone, so the address wants checking against a source that is not the code itself.
  • Contact cards, calendar events, phone numbers and messages are shown as their actual fields rather than as one run-on string.

The trick worth recognising

Of everything above, embedded credentials is the one most people have never seen. A URL is allowed to carry a username and password before an @ sign, and browsers ignore everything before it when deciding where to go. So an address beginning https://your-bank.com@ does not go to your bank at all. It goes wherever the part after the @ points, and the familiar name at the front is decoration. In a QR code, where you never see the address before arriving, that is close to invisible. This page pulls it out and says so.

Punycode is the quieter version of the same idea. Domains can be registered in non-Latin scripts and are stored in an encoded form beginning xn--, which is entirely legitimate. It is also how lookalike domains are built, using characters that render like Latin letters but are not. The page reports it rather than accusing it, because the same mechanism serves both purposes and only you can tell which one applies.

What a clean result does and does not mean

If nothing is flagged, the code is not disguising where it goes. That is genuinely useful and it is not the same as the destination being safe. A perfectly ordinary https link to a domain nobody has ever heard of raises no structural flags at all, and this page has no opinion on whether the site behind it is trustworthy. It answers one question honestly rather than pretending to answer a bigger one.

For the next step, the decoded address hands off to our link decoder, which breaks down every tracking parameter riding on it, and to the redirect checker, which follows the chain hop by hop to the page it finally lands on. That combination, read the code then follow it without visiting it, is the part no plain QR scanner offers.

Making codes, rather than reading them

If you are on the other side of this and building codes to print, our QR code generator covers the two things that decide whether a printed code works: how large it has to be for the distance people scan it from, and whether the scans can be counted at all. It is also honest about the answer to the second one, which is that a code pointing at your own address cannot report its scans to anyone. For the background on that, what counts as a QR code scan and QR codes for restaurant menus both go further.

Other free tools

Questions

Is my image uploaded anywhere?

No. The image is drawn to a canvas and decoded entirely in your browser, so it never leaves your machine and nothing is stored. Closing the tab clears it.

Can this tell me whether a QR code is safe?

It can tell you whether the code is hiding where it goes, which is the part you cannot judge by looking at a printed square. It cannot tell you whether the destination itself is trustworthy. A clean result means nothing structural stands out, not that the site is safe.

Why does my QR code fail to read?

Usually the crop or the focus. A tighter crop around the code, with the clear margin around it left intact, and a sharper photo fix most cases. Very low contrast, heavy glare on laminate, or a code creased along a fold can defeat any reader.

Does it read codes that are white on a dark background?

Yes. Inverted codes are tried automatically, which matters because light-on-dark codes are common on menus and posters and fail a single-pass read.

What is the most dangerous thing a QR code can contain?

A two-factor authentication key. An otpauth code holds the seed that generates someone's login codes, so anyone who scans or photographs it can generate valid codes for that account until the seed is rotated. Never share an image of one.

What does a username before the @ sign in a link mean?

A URL can carry credentials before an @ sign, and browsers ignore everything before it when deciding where to navigate. So an address that starts with a familiar brand name followed by @ does not go to that brand. It goes wherever the part after the @ points, which makes it a common way to disguise a destination.