User Agent Parser

Every token in the string

TokenWhat it is

Try a known string

The string is a claim, not a measurement

A user agent string is text the client decides to send. Nothing on the server verifies it. Any HTTP library sets it in one line, extensions rewrite it, anti-fingerprinting modes generalise it, and a spoofed string is indistinguishable from a genuine one at the wire level. Parse it for logs, analytics and support tickets. It is evidence, not proof, so do not gate access or security decisions on it.

This tool takes whatever you paste and reports the browser, engine, operating system and device that the string claims to be, alongside the string your own browser is sending. It reads the claim. It cannot confirm it, and it makes no judgement about whether the sender is a bot.

Why every string still says Mozilla/5.0

Netscape called itself Mozilla, and servers of that era sniffed for that word before serving the richer page. Internet Explorer got past those checks by announcing itself as Mozilla/4.0 (compatible; MSIE ...), and the habit never stopped. WebKit added (KHTML, like Gecko) to clear Gecko-targeted checks, Chromium kept all of it and added its own token, and Edge appends one more after Chrome's.

TokenWhat it is actually telling you
Mozilla/5.0Legacy prefix on every mainstream browser. Carries no information.
AppleWebKit/537.36 (KHTML, like Gecko)Frozen compatibility token in Chromium strings, not a live engine version. Safari's own builds report 605.1.15.
Chrome/major.0.0.0Chromium major version. Minor, build and patch are zeroed by UA reduction.
Safari/537.36Kept by Chromium so Safari-targeted sniffing passes. Mobile Chrome says Mobile Safari.
Edg/major.0.0.0Edge, appended after the Chrome token. Test for it before concluding Chrome.
Gecko/20100101Firefox. That date is a frozen constant, not a build date.

Detail is being removed on purpose

Browsers are shrinking the string to cut fingerprinting entropy. macOS reads 10_15_7 whichever release you run, and Apple Silicon still says Intel. Windows 11 reports Windows NT 10.0, because no Windows 11 token was ever added. Chrome on Android collapses the OS version and device model to Android 10; K. Anything doing version arithmetic on those fields gets quietly less accurate every year.

What to do instead

  • For anything functional, test the capability itself: an in check, a probe, or @supports in CSS.
  • For touch versus pointer, branch on input capability, such as a pointer: coarse media query or navigator.maxTouchPoints.
  • If you genuinely need brand and platform, Client Hints are the modern path, with a classic UA fallback for engines that have not shipped them.

Share this tool with friends

Free to use, no sign-up, works on any phone.

Frequently Asked Questions

Why does my Chrome user agent mention Safari and Mozilla?

Because removing those tokens would break server-side sniffing written years ago. Chromium's string carries Mozilla/5.0 from the Netscape era, then AppleWebKit and "KHTML, like Gecko" from WebKit's lineage, then its own Chrome token, and it ends with a Safari token. Edge appends Edg after all of that, so test for Edg before you conclude the browser is Chrome. None of it means the page is running in Safari or in Netscape.

Can I use the user agent string to block bots?

Not on its own. The string is chosen by the client, so a scraper can send Googlebot's exact UA, or an ordinary Chrome one, by setting a single header. Real verification means checking the source IP: forward-confirmed reverse DNS, or the published IP range lists the major crawlers now supply. Treat UA as one weak signal next to request patterns and rate. This tool parses what a string claims and makes no attempt to judge whether the sender is a bot.

Why does my user agent say Mac OS X 10_15_7 on a newer macOS?

That value is deliberately frozen. Chrome, Safari and Firefox all stopped reporting the real macOS version, both to cut fingerprinting entropy and to avoid breaking sites whose version checks assumed the 10.x prefix would continue. Apple Silicon Macs also still report Intel in the platform section. Do not do macOS version comparisons from the user agent string; on Chromium, ask for the platformVersion client hint instead.

How do I tell an iPad from a Mac in the user agent?

From the string alone, usually you cannot. Safari on iPadOS requests desktop sites by default and sends a Macintosh string, and the other iPad browsers follow suit, so a parser will report macOS. The common workaround is to pair a Macintosh UA with a touch check, since desktop Macs report navigator.maxTouchPoints as 0 and iPads report 5. If the goal is layout or input handling, branch on capability instead of on device identity.

What is UA reduction and will it break my detection code?

UA reduction is browsers deliberately cutting detail out of the string. Chromium reports its minor, build and patch numbers as 0.0.0 and freezes the desktop platform version, so only the major version stays meaningful; on Android the OS version and device model collapse to a fixed Android 10; K. Code that parses a full version number or gates on OS version degrades silently rather than throwing. Code that tests for the feature it needs is unaffected.

Should I use navigator.userAgent or User-Agent Client Hints?

Use feature detection first for anything that changes behaviour. If you genuinely need brand and platform data, Client Hints are the modern replacement, but they remain a Chromium feature. The low-entropy values sit on navigator.userAgentData in a secure context; detailed ones need an asynchronous getHighEntropyValues call, or an Accept-CH response header to receive them as request headers. Firefox and Safari ship neither, so keep a classic user agent fallback.

Everything on this page runs inside your own browser. Nothing you type or upload is sent to a server, so your data never leaves your device.