User-Agent Parser
Parse a User-Agent string into browser, engine, OS and device information.
Loading User-Agent Parser… If nothing happens, please enable JavaScript.
Frequently asked questions
What data does this tool send to your servers?
Why do User-Agent strings contain 'Mozilla/5.0' even for Chrome and Safari?
Why doesn't the parsed result always match what I expect?
What is the difference between the browser engine and the browser itself?
Are there rate limits on this tool?
How does this compare to using navigator.userAgent in JavaScript?
What are Client Hints and how do they replace User-Agent?
Does this tool log User-Agent strings for analytics or advertising?
How do bots and crawlers identify themselves in the User-Agent?
Can I trust the OS and device information in a User-Agent?
About User-Agent Parser
The User-Agent header is a free-form text string that web browsers and HTTP clients send with every request, identifying the software making the connection. Despite being only one line of text, a well-formed User-Agent encodes a surprising amount of information: the browser family and version, the rendering engine it is built on, the operating system and its version, and often the device type or model. This information was originally intended to allow web servers to send browser-appropriate content in an era when Internet Explorer and Netscape rendered pages very differently. Today, User-Agent strings are used for analytics, bot detection, feature detection, and debugging web application compatibility issues.
Web developers paste User-Agent strings into parsers when a bug report comes in from a user on an unfamiliar platform and they need to understand exactly what browser and OS combination is involved. QA engineers use parsed UA data to verify their automated test suites are correctly identifying themselves. Security teams analyse User-Agents in server logs to identify web scrapers, vulnerability scanners, and bots. API developers check the UA of incoming requests to understand which client libraries and SDK versions their users are running. DevOps engineers correlate UA data with error rates to identify browser-specific compatibility regressions.
This tool parses User-Agent strings entirely in your browser using a client-side JavaScript library — no data is sent to our servers. Your browser's current User-Agent string is detected automatically on page load so you can see your own parsed result immediately. You can also paste any UA string you have copied from a server log or bug report to parse it on demand. The parser identifies the browser family, browser version, rendering engine (Blink, Gecko, WebKit, Trident), operating system, operating system version, and device category (desktop, mobile, tablet, bot). Results are displayed in a structured format with each field labelled clearly.
When reading parsed results, remember that User-Agent strings are not guaranteed to be accurate — any client can set any UA string it wants, and spoofing is trivially easy. Chrome on Android, for example, includes 'Mozilla/5.0' and 'Safari' tokens in its UA for historical compatibility reasons, which is why raw UA strings look bizarre even for well-known browsers. The 'frozen' Chrome UA project (started around 2021) aims to reduce information leakage by capping version numbers in the UA string and moving detailed browser identification to structured Client Hints headers (Sec-CH-UA-*). If you are building browser detection for production use, prefer the Client Hints API over User-Agent parsing where possible.
The String That Broke Itself: A Brief History of User-Agent Chaos
The User-Agent header was introduced in the first published HTTP specification in 1992, originally intended as a simple one-line identification of the software making a request — something like 'NCSA_Mosaic/2.0'. The chaos began almost immediately. When Netscape Navigator launched in 1994 and quickly dominated the browser market, web developers started serving 'enhanced' pages only to Netscape, which identified itself as 'Mozilla'. Microsoft's Internet Explorer, released in 1995, needed to receive the same enhanced pages, so it added 'Mozilla/2.0 (compatible; MSIE 3.0)' to its UA string — claiming to be Mozilla while also identifying itself as MSIE.
Every major browser that followed repeated the same pattern. Opera added Mozilla compatibility tokens. Safari, built on the KHTML engine forked into WebKit, added 'Mozilla/5.0 (... like Gecko)' to its string. Chrome, built on WebKit, added 'AppleWebKit' and 'Safari' tokens to ensure Safari-targeted code would also run in Chrome. The result is that a current Chrome UA string on Windows contains tokens for Mozilla, AppleWebKit, KHTML, Gecko, and Safari — five different references to competing browsers — none of which is Chrome's own identity, which appears only as 'Chrome/version' near the end.
Google announced the User-Agent Reduction project in 2020, with the goal of freezing the UA string to a low-entropy fixed value by 2022 and migrating detailed browser identification to the structured, opt-in Client Hints mechanism. The actual rollout was slower than planned due to web compatibility concerns — millions of web applications rely on UA string parsing for logic that cannot be easily migrated. This makes the User-Agent header a living example of how difficult it is to deprecate a flawed but deeply embedded internet standard: even after three decades and near-universal acknowledgment that the format is broken, the effort to replace it is measured in years.