A user agent string is the line of text that a browser or program sends with every request to say what it is. It is also one of the most confusing strings on the web, because almost every browser starts with Mozilla/5.0 and ends with Safari for historical reasons, and because browsers now freeze or hide parts of it to protect privacy. This page reads the string and tells you what it really says: the browser and its version, the engine, the system, the kind of device, and whether it is a robot.
Paste one string for a full explanation, or paste many, one on each line, or lines from a web server log, for a table with counts. It also shows what your own browser says when it is asked in the newer way, through client hints, which can name Windows 11 and the exact device model. Everything is read in your browser, and the code behind the page makes no network requests, so the log of a real site stays on your device.
How to use the User Agent Parser: Browser, System, Device, and Bot
- Paste a user agentPaste a string, or press the button to use the one your own browser sends. With one string the page shows the browser, engine, system, device, and any notes. With several it shows a table.
- Paste a log to count visitorsLines of a web server log in the usual combined format are read too: the page takes the last quoted string on each line as the user agent. You get counts of browsers, systems, and devices for the visitors that are not robots, and the share of robots.
- Read the notesThe notes say what the string cannot tell you, such as which version of Windows 10 or 11 it is, and what to do about it. For a robot they say how to check that the request is real.
- Save the tableDownload the table as CSV, with the browser, version, engine, system, device, and robot in separate columns for each line.
Why the string looks the way it does
The Mozilla documentation on browser detection explains the history. Early sites sent better pages to Netscape, whose code name was Mozilla, so other browsers called themselves Mozilla too. Later, sites sent better pages to browsers that used the KHTML and WebKit engines, so those engines called themselves like Gecko, and the Blink engine of Chrome kept the Safari name. The result is that a Chrome string says Mozilla, AppleWebKit, KHTML, Gecko, Chrome, and Safari, and only the Chrome token says what it is.
So the page does not look for the first or the most common name. It follows the order in which the tokens must be read: a token such as Edg, OPR, SamsungBrowser, or Vivaldi comes before Chrome, and Chrome comes before Safari. Safari's own version is written after the word Version, not after Safari, which is only a build number.
What Chrome and Safari now hide
The User-Agent Client Hints documents from Chrome explain that the string was a source of fingerprinting, and that Chrome reduces it. Chrome writes only its major version, as in Chrome/126.0.0.0, and the Android version and device model are replaced by fixed values, so a phone appears as Android 10 with the model K. Safari and Chrome on a Mac both say Mac OS X 10_15_7, whatever the real version. Windows 10 and Windows 11 both say Windows NT 10.0.
The page tells you when a string has one of these frozen values. It cannot recover what the string does not contain. What it can do is show the other way to ask: client hints. A browser such as Chrome or Edge gives the exact version, the platform version, the real model, and the CPU when a script asks for them. For Windows, Microsoft documents that a platform version of 13.0.0 or higher means Windows 11 and one between 1.0.0 and 10.0.0 means Windows 10. The panel for your own browser reads these values and applies the rule.
Phones, tablets, and other devices
An Android string holds the model between the version and the closing bracket, as in Android 13; SM-S918B, and the page reads it and names the maker from the model code: SM and GT for Samsung, Pixel for Google, Redmi for Xiaomi, and so on. Chrome on Android writes the word Mobile for a phone and leaves it out for a tablet, which is how the page tells them apart. iPhone and iPad say so in the string, but an iPad can ask for the desktop site, and then it sends the same string as a Mac. The string cannot tell those apart, and the page does not pretend that it can.
On an iPhone or iPad every browser, including Chrome and Firefox, has to use Apple's WebKit engine, and the page says so when it finds one. TVs, game consoles, and watches have their own tokens, such as Tizen, PlayStation, and Xbox. The Android web view, which apps use to show web pages, is marked with wv, and the in-app browsers of social apps have their own tokens. They are named as apps, because their version is the app's, not the browser's.
Robots and how to check them
The page knows the names of the search engine crawlers, the crawlers of AI companies, link preview fetchers of social sites, SEO tools, monitoring services, headless browsers, and the code libraries such as curl and Python's requests. A string that calls itself a bot, crawler, or spider but is not on the list is reported as an unnamed robot, with the name that it gave itself.
A user agent is only a claim, and anyone can write Googlebot in a request. Google says to check that the IP address of the request reverse-resolves to a name in googlebot.com or google.com and that this name resolves back to the same address. Microsoft, Apple, Baidu, and Yandex give the same kind of check, and OpenAI, Anthropic, and Perplexity publish lists of IP ranges. The page repeats the check that the operator documents next to the robot, because a name alone proves nothing.
Reading a log
In the combined log format that Apache and nginx use, each line holds the address, the time, the request in quotes, the status, the size, the referrer in quotes, and the user agent in quotes. The page takes the last quoted string. A line that is not in that format is taken as it is, so a plain list of strings works too. The counts leave the robots out, so that the share of phones and the share of Chrome mean visitors. Up to 5,000 lines are read at a time.
How the parser was tested
The results were compared with ua-parser, which uses the uap-core rules from the Browserscope project, and with the user-agents library, neither of which is part of this page. About 2,800 strings were used: real strings from the uap-core test files, which include many old phones, Java handsets, and apps, and modern strings built from templates for Chrome, Edge, Opera, Firefox, Safari, Samsung Internet, the iOS browsers, and robots. On all of them the page named the same browser 95% of the time, the same major version 99.8% of the time, the same operating system 99.7% of the time, and the same answer to the question of whether it is a robot 99.4% of the time.
On the 426 modern strings among them, from Chrome 80 and later, Firefox 80 and later, Safari 12 and later, and the iOS browsers, the agreement on browser, version, and operating system was 100%. Most of the strings that differ are very old: Java phones, Symbian handsets, and apps that send their own names. The two libraries also disagree with each other on some of these, because no list is complete.
Limits and accuracy
- A user agent is a claim, not proof. A browser can be set to say anything, and a script can send any string. Use it for statistics and for choosing what to show, not for security.
- The version of Windows 10 or 11, the real macOS version, and the Android model that Chrome hides cannot be read from the string. The panel for your own browser shows them through client hints, but a pasted string has no such panel.
- Brave, DuckDuckGo's browser on desktop, and the Tor Browser send the string of the browser they are built on, so the page reports Chrome or Firefox.
- An iPad that asks for the desktop site sends the string of a Mac and is reported as one.
- The names of phone makers are guessed from model codes and cover the common ones. A model that is not recognised is shown without a maker.
- The list of robots is a selection of the ones that are commonly seen. A robot that is not on it is reported as an unnamed robot if it calls itself a bot, a crawler, or a spider.
- The page does not look up addresses, so it cannot do the reverse DNS check itself. It tells you what to check.
Frequently asked questions
How do I parse a user agent string?
Paste it on this page. It shows the browser and its version, the engine, the operating system, the kind of device with its maker and model when the string has them, and whether it is a robot. Paste many strings, or lines of a log, to get a table with counts.
Why does every user agent say Mozilla and Safari?
For historical reasons. Early sites sent better pages to Netscape, called Mozilla, and later to Safari's engine, so other browsers copied both names. Only the later tokens, such as Chrome, Edg, OPR, and Firefox, say what the browser really is.
Why can't I tell Windows 10 from Windows 11?
Both say Windows NT 10.0 in the string. Microsoft says that the platform version in the client hints tells them apart: 13.0.0 or higher is Windows 11. This page reads those hints for your own browser, and the string alone cannot show it.
What does a K as the Android model mean?
Chrome hides the device model and the exact Android version in its user agent and writes Android 10 and the model K for every phone. The real values are available to a site that asks for them with client hints.
How do I know that a request from Googlebot is real?
Check the IP address of the request: it should reverse-resolve to a name ending in googlebot.com or google.com, and that name should resolve back to the same address. A user agent alone proves nothing, because anyone can send it. The page repeats the check that each operator documents.
Can it analyse the user agents in my server log?
Yes. Paste lines from an Apache or nginx log in the combined format, up to 5,000 at a time. The page takes the last quoted string of each line, and shows counts of browsers, systems, devices, and robots, and a CSV of every line.
Is my log uploaded to a server?
No. The strings are read in your browser, and the code behind the page makes no network requests. Nothing is saved, so download the CSV before you close the page.
Research and references
This page was written and checked against the sources below.
- MDN: Browser detection using the user agent string
- MDN: The User-Agent header
- Chrome for Developers: User-Agent Client Hints
- Microsoft Edge documentation: Detect Windows 11 and CPU architecture using User-Agent Client Hints
- Google: Verify requests from Google crawlers and fetchers
- uap-core: the regular expressions behind ua-parser, used to check the results

