User-Agent Parser
Identify the browser, engine, operating system and device behind a User-Agent string. Free, and runs entirely in your browser — nothing is uploaded.
About User-Agent Parser
A User-Agent string is a history of browsers pretending to be each other. Every browser starts with Mozilla/5.0, every Chromium browser also claims to be Safari, and Edge claims to be Chrome as well. So the order the brands are checked in is the whole parser: the most specific brand first, and the ones it imitates last.
What the string cannot tell you, it says. Windows 11 still reports Windows NT 10.0. Every Mac browser reports macOS 10.15.7 whatever the real version. Chrome's reduced User-Agent replaces the Android model with K and the minor version with zeros. An iPad asking for the desktop site sends exactly a Mac's string. Each of those is flagged instead of reported as fact.
For Chromium browsers the result also shows the low-entropy Client Hints the same browser would send: Sec-CH-UA, Sec-CH-UA-Mobile and Sec-CH-UA-Platform. These are the headers to use when the frozen User-Agent is not enough. Leave the field empty to read the string of the browser you are using now.
Where it helps
- Checks brands in the order browsers imitate each other, so Edge, Opera and Samsung Internet are not all reported as Chrome.
- Says when a value is a frozen placeholder, such as Windows 10 or 11, macOS 10.15.7 or the Android model K, instead of reporting it as the truth.
- Recognises search, AI and social crawlers, uptime monitors, and HTTP libraries such as curl, requests, axios and okhttp.
- Shows the Client Hints a Chromium browser would send, which is where the detail removed from the string now lives.
- Runs in the browser, so User-Agents taken from private logs are not sent anywhere.
Limits
- Anything can send any string, so a User-Agent is a claim. Use it for analytics and known-bug workarounds, and feature detection for everything else.
- Browsers that copy Chrome's string exactly, such as Brave and Arc, cannot be told apart from Chrome by the string alone.
- Device models are read from what Android puts in the string. Many devices send marketing names or codes, and reduced strings send none.
Frequently asked questions
Why does every browser say Mozilla and Safari?
Servers used to send better pages to the browsers they recognised, so each new browser copied the tokens of the one ahead of it to get the same pages. The tokens stayed after they stopped meaning anything, and removing them now would break sites that still look for them.
How do I tell Windows 11 from Windows 10?
Not from the User-Agent: both send Windows NT 10.0. Request the Sec-CH-UA-Platform-Version Client Hint with an Accept-CH header, or call navigator.userAgentData.getHighEntropyValues(["platformVersion"]). A major version of 13 or higher is Windows 11.
Is User-Agent sniffing a bad idea?
For deciding which features to use, yes. Test for the feature itself, because a browser gains features without its string changing the way your check expects. For analytics, bot handling and working around a specific known bug in a specific version, reading the User-Agent is the normal tool.
How do I verify that a request really came from Googlebot?
Do a reverse DNS lookup on the requesting IP. It should end in googlebot.com or google.com, and a forward lookup of that name should return the same IP. Google also publishes its crawler IP ranges. The User-Agent on its own proves nothing.
Related tools
- HTTP Headers — Grade a site's security headers from A+ to F, see every response header, and get the fix for your server
- What Is My IP — Your public address, and what a browser reveals about you
- robots.txt Generator — Crawl rules, with the traps called out
- cURL Builder — Build an HTTP request and get it as curl, JavaScript, TypeScript, Go, Python, PHP, C#, Java and more
- HTML Formatter — Indent and tidy HTML markup
- CSS Formatter — Format stylesheets with consistent indentation
More Web Development tools
- HTML Formatter — Indent and tidy HTML markup
- CSS Formatter — Format stylesheets with consistent indentation
- JavaScript Formatter — Re-indent JavaScript and TypeScript source
- SCSS/SASS Formatter — Format SCSS syntax and nested rules
- TypeScript Formatter — Format TypeScript source code
- SQL Formatter — Format SQL statements with dialect selection
- SQL Minifier — Collapse formatted SQL into compact text
- CSS Unit Converter — px, rem, em, percentages and viewport units, with a preview
- Query String Parser and Builder — Convert query strings into editable key-value data
- CSP Generator — Build a Content-Security-Policy, or check one, and write it for your server or framework
- CORS Generator — Write CORS configuration for nginx, Express, Go, Django, ASP.NET, Spring and more, and test an origin against it
- cURL Builder — Build an HTTP request and get it as curl, JavaScript, TypeScript, Go, Python, PHP, C#, Java and more
- Minifier — Shrink CSS, HTML or JavaScript
- Flexbox Playground — Try every flex property and read the CSS back
- CSS Grid Playground — Build a grid template and see the tracks it makes
- Responsive Viewport Tester — Render your markup at phone, tablet and desktop widths
- SVG Path Viewer — Draw path data and read back what it contains
- SVG to CSS Converter — Turn an SVG into a data URI for CSS or an img tag
- OAuth 2.0 / OIDC Helper — PKCE verifiers and challenges, state, nonce, and checking what came back
- Regex Tester — Test patterns, inspect groups and preview replacements
- HTTP Status Codes — Look up what a status code means, when to send it, and whether it is cached or safe to retry
- HTML to JSX — Convert HTML and SVG markup into JSX for React, with styles, attributes and whitespace handled
- Semver Checker — Test versions against npm ranges, sort them by precedence, and see what each bump produces
- Cookie Parser and Builder — Read Set-Cookie and Cookie headers, check them against browser rules, and write one for your framework