What a user agent is and what this parser shows
Every request your browser makes carries a User-Agent header: a single line that names the browser, its engine and the operating system. Sites use it to serve the right download, work around browser bugs, count visitors in analytics and spot bots. Scripts can read the same string from navigator.userAgent.
The format is a pile of history. A modern Chrome on Windows says Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 — it claims to be Mozilla, WebKit, KHTML, Gecko and Safari at once, because each new browser copied the tokens that old sites checked for. The token-by-token card on this page explains each piece of your string in plain English.
The parser uses UAParser.js 1.0.41, a widely used open-source library under the MIT licence, bundled with the page so nothing leaves your device. On top of it we add our own bot list, UA-reduction detection and the interpretation of Client Hints.
Client Hints, UA reduction and the Windows 11 problem
Since 2023 Chromium browsers (Chrome, Edge, Opera, Samsung Internet, Brave) send a reduced user agent. To make fingerprinting harder, most of the string is frozen:
| Part | What the string says | Real value comes from |
|---|---|---|
| Browser version | Chrome/140.0.0.0 | fullVersionList |
| Windows | Windows NT 10.0 (10 and 11) | platformVersion 13 or higher = Windows 11 |
| macOS | Intel Mac OS X 10_15_7 | platformVersion, architecture |
| Android | Android 10; K | platformVersion, model |
A site must ask for those details through User-Agent Client Hints — navigator.userAgentData.getHighEntropyValues() in JavaScript, or Sec-CH-UA-* request headers on the server. This page asks, so it can tell you “Windows 11” when your string can only say “Windows 10 or 11”, and whether your Mac or Windows laptop has an ARM processor. Firefox and Safari don’t support Client Hints; their strings are frozen too (Safari reports macOS 10.15.7 and, since iOS 26, a fixed iOS version), so for them the string is all anyone gets.
The Brands list may include a deliberately odd entry such as “Not)A;Brand”. That is GREASE, added so sites don’t hard-code brand lists; we hide it.
Detecting bots and checking your browser
Paste any string and the parser flags crawlers and scripts: search engines (Googlebot, Bingbot, Applebot, DuckDuckBot), AI crawlers and assistants (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, CCBot, Bytespider), SEO tools (AhrefsBot, SemrushBot), link-preview fetchers (Facebook, WhatsApp, Slack, Discord, LinkedIn), uptime monitors, headless Chrome and HTTP libraries such as curl, python-requests and Go.
Remember that anyone can type any user agent. A request claiming to be Googlebot is only genuine if its IP reverse-resolves to googlebot.com or google.com and that name resolves back to the same IP; Bing, OpenAI and Anthropic publish similar checks or IP lists. To see how your server answers different clients, try the HTTP headers checker.
For your own browser the page also reports screen and window size (in more depth on the screen resolution page), languages, time zone, cookies, Do Not Track, Global Privacy Control, touch support and whether the browser is flagged as automated. It checks that the user agent sent in the HTTP request matches the one scripts see; a mismatch means an extension is rewriting one of them.
Accuracy, spoofing and privacy
- iPads look like Macs. iPadOS asks for desktop sites by default and sends a Mac user agent. In the browser we catch it by touch support; from a pasted string nobody can.
- Brave looks like Chrome on purpose. We detect it from the browser’s own API, not the string.
- Browser version checks are estimates. Chrome and Firefox release a new major version every four weeks, so we compare your version with the release calendar rather than contacting any update server.
- Spoofed strings are parsed as written. “Request desktop site”, developer tools and privacy extensions all change the user agent.
- Third-party cookie status can’t be tested without a second website, so we show only whether first-party cookies work.
Everything is parsed in your browser. The only request is to our own /api/ip edge function, to compare the User-Agent header it received with navigator.userAgent; nothing is logged or stored. To see what your connection reveals rather than your browser, use what is my IP and the WebRTC leak test.
Frequently asked questions
What is my user agent?
It is the line of text at the top of this page: your browser sends it with every request so websites know which browser, engine and operating system you use. The cards underneath decode it into plain English, and if your browser supports Client Hints they add the details the string no longer contains, such as your exact version and Windows edition.
Why does my Windows 11 PC say Windows NT 10.0?
Microsoft never changed the version token for Windows 11, so both Windows 10 and 11 send “Windows NT 10.0”, and browsers have frozen it anyway. The only reliable way to tell them apart is the platformVersion Client Hint: 13 or higher means Windows 11. This page reads it in Chrome, Edge and Opera; Firefox doesn’t expose it.
Why does Chrome show a version ending in .0.0.0?
That is Chrome’s reduced user agent. Since 2023 Chromium browsers zero the minor, build and patch numbers and freeze the operating system and device model to reduce fingerprinting. Your exact version is still available to sites that ask through the fullVersionList Client Hint, which this page shows under User-Agent Client Hints.
Can a website tell if a user agent is fake?
Often, yes. A mismatch between the string and Client Hints, the HTTP header and navigator.userAgent, or the features the browser actually supports gives spoofing away. For bots, sites check the source IP: genuine Googlebot traffic reverse-resolves to googlebot.com or google.com. The string alone proves nothing, because anyone can send any user agent.
Is the user agent string sent anywhere by this page?
No. Parsing runs in your browser using a copy of the MIT-licensed UAParser.js library stored on our own site, and pasted strings never leave the page. The only network request is to our own edge function, which reports the User-Agent header it received so we can check it matches; nothing is logged or kept.
Why does my iPad show up as a Mac?
Since iPadOS 13, Safari on iPad requests desktop websites by default and sends exactly the same user agent as Safari on a Mac. On your own device this page spots the difference because a Mac has no touch screen. From a pasted string there is no way to tell them apart.