DevKitHub

API & Security

User Agent Parser and Lookup

Paste a User-Agent string, or use your browser’s, to see the browser, engine, operating system, device and any bot it claims to be. Values the string only pretends to report are marked as frozen.

1 line
Examples
desktopfrozen values

Parsed

Browser
Chrome 153 (reported as 153.0.0.0; the minor version is frozen; the real value may differ)
Engine
Blink 153
Operating system
Windows (reported as Windows NT 10.0; frozen; the real value may differ)
Device
Desktop
Bot
None claimed
  • Chromium browsers send a reduced string: the minor version is always 0.0.0 and the platform is a fixed value. The real values are in User-Agent Client Hints (Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform-Version and Sec-CH-UA-Model), which a server requests with Accept-CH and a page reads with navigator.userAgentData.getHighEntropyValues().
  • Chromium sends Windows NT 10.0 on every version of Windows, and Windows 11 reports Windows NT 10.0, the same as Windows 10, so the string cannot tell them apart. Microsoft’s documented test is Sec-CH-UA-Platform-Version: 13.0.0 or higher is Windows 11.
  • Brave, and other Chromium browsers that add no token of their own, send exactly this string, so they are reported as Chrome here and by every user agent parser. Brave can be detected in the page with navigator.brave.
  • The Safari/537.36, AppleWebKit and “like Gecko” tokens are there for old server-side checks. They do not mean Safari, WebKit or Gecko is involved.

Parsed in your browser by ordered rules; nothing is sent anywhere. A user agent string is a claim, not proof: any client can send any string.

This tool runs entirely in your browser. Your input is never uploaded, stored or logged.

How it works

A User-Agent string is a history of compatibility claims rather than a description. Chrome’s contains Mozilla/5.0, AppleWebKit/537.36, “like Gecko” and Safari/537.36 because servers once checked for each of them, and Edge, Opera and Samsung Internet add their own token (Edg/, OPR/, SamsungBrowser/) to Chrome’s. So the rules here run in a fixed order, from the specific token to the one it imitates: bots first, because Googlebot’s smartphone string contains a complete Chrome-on-Android string; then Edge, Opera, Samsung Internet and the other Chromium browsers; then Chrome; and Safari only when nothing else matched, since every Chromium string also says Safari. On iOS the browser token (CriOS, FxiOS, EdgiOS) names the app while the engine is WebKit. An Android string with “; wv” is an app’s WebView, and an iPhone string with no Safari/ token is an in-app browser.

Since 2022 the string has been deliberately vaguer. Chromium’s User-Agent reduction sends the version as MAJOR.0.0.0 from Chrome 101 and, from Chrome 107 on desktop and 110 on Android, a fixed platform: Windows NT 10.0 on every Windows, Intel Mac OS X 10_15_7 on every Mac, and Android 10 with the model K on every Android device. Safari has sent 10_15_7 for years, Firefox caps macOS at 10.15, and Safari 26 stopped updating the iOS version. None of those is reported here as a fact; each is shown as “reported as …, frozen”. Windows 11 is a case of its own: it reports Windows NT 10.0 in every browser, and Microsoft’s documented test is the Sec-CH-UA-Platform-Version Client Hint, where 13.0.0 or higher means Windows 11.

The real values live in User-Agent Client Hints. A server asks for them with an Accept-CH response header and receives Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform-Version and Sec-CH-UA-Model on later requests; a page reads them with navigator.userAgentData.getHighEntropyValues(). The “Use my browser’s” button does that where the browser supports it, and shows the brand list with its GREASE entry, a deliberately fake brand such as “Not_A Brand” that stops servers matching the list exactly. Some things no parser can learn from the string: an iPad in desktop mode sends the macOS Safari string unchanged, Brave on the desktop sends Chrome’s, and any client can send anything, so a Googlebot claim means nothing until a reverse DNS lookup confirms it.

Common problems

Every example below is run against this tool in our test suite, so what it says here is what the tool actually does.

This is a Sec-CH-UA Client Hints value, a list of brands and major versions, not a User-Agent string.

"Google Chrome";v="153", "Not_A Brand";v="8", "Chromium";v="153"
Why:
The Sec-CH-UA request header sits next to User-Agent in DevTools and in server logs, and is easy to copy instead. It carries brand names and major versions only, not the platform or the device.
Fix:
Copy the header named User-Agent, or run navigator.userAgent in the browser console.

Paste one user agent string at a time; this has 2 lines.

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:156.0) Gecko/20100101 Firefox/156.0
Why:
Several lines copied at once from an access log or a list. Each line is a different client, and reading them as one would mix one browser’s tokens with another’s.
Fix:
Paste a single line. For a whole log, extract the User-Agent field first and check the distinct values one at a time.

This looks like JSON, perhaps navigator.userAgentData, which holds Client Hints.

{"brands":[{"brand":"Google Chrome","version":"153"}],"mobile":false,"platform":"Windows"}
Why:
navigator.userAgentData is an object of Client Hints, not the User-Agent string, so logging it or passing it to JSON.stringify gives brands, mobile and platform instead.
Fix:
Use navigator.userAgent for the string, or the “Use my browser’s” button, which shows both.

Windows 11 is reported as Windows 10.

Why:
Windows 11 sends Windows NT 10.0 in every browser, and Microsoft has said the User-Agent string will not be updated to tell the two apart.
Fix:
Ask for Sec-CH-UA-Platform-Version with Accept-CH. On Windows, 13.0.0 or higher is Windows 11.

An iPad is detected as a Mac.

Why:
Since iPadOS 13, Safari on iPad asks for the desktop version of sites by default and sends the macOS Safari string unchanged. Nothing in the string tells them apart.
Fix:
Detect features, not devices. If you must know, navigator.maxTouchPoints greater than 1 in the page separates an iPad from a Mac.

Every Chrome version ends in .0.0.0 and every Android phone is model K.

Why:
Chromium’s User-Agent reduction removed the minor, build and patch numbers and the device model from the string on purpose, to make users harder to fingerprint.
Fix:
Request Sec-CH-UA-Full-Version-List and Sec-CH-UA-Model as Client Hints for the real values.

Frequently asked questions

What is my user agent?
Press “Use my browser’s” above. It copies navigator.userAgent, the string your browser sends in the User-Agent header, into the parser, and where the browser supports Client Hints it also shows the brands, platform version and model reported through them. Nothing is sent anywhere.
Why does my user agent say Windows NT 10.0 on Windows 11?
Windows 11 reports NT 10.0 in every browser, and Chromium sends NT 10.0 on every version of Windows anyway. The Sec-CH-UA-Platform-Version Client Hint has the real value: Microsoft documents 13.0.0 and above as Windows 11.
What are User-Agent Client Hints?
Request headers that carry what the reduced User-Agent string no longer does. Sec-CH-UA, Sec-CH-UA-Mobile and Sec-CH-UA-Platform are sent by default; the detailed ones, such as Sec-CH-UA-Platform-Version, Sec-CH-UA-Model and Sec-CH-UA-Full-Version-List, only after the server asks for them with Accept-CH. Chromium-based browsers send them; a browser without them sends only the User-Agent string.
Can a user agent string be trusted?
No. It is whatever the client chose to send: browsers and extensions can override it, scripts set it to anything, and crawlers are impersonated constantly. Use it for statistics and compatibility workarounds, never for access control, and verify a crawler by reverse DNS as its operator documents.
How do I detect a mobile device from the user agent?
Look for “Mobi” in the string, as MDN recommends, rather than for Android or iPhone: Chrome and Firefox put Mobile in phone strings and leave it out on tablets. An iPad in desktop mode sends a Mac string, though, so use CSS media queries for layout and feature detection for capabilities.

Last updated