What does a User-Agent string actually tell you?
Browser name/version, OS, device type, and rendering engine — though the exact format varies wildly between browsers due to decades of legacy compatibility hacks.
Analyze User-Agent strings for browser, engine, operating system, and device details.
Parsing runs locally as you type — nothing is uploaded. User-Agent strings are self-reported and frequently spoofed or frozen by the browser, so treat the result as a hint rather than as a reliable identification of the client. Known crawlers are named along with who runs them and what for — search, AI, SEO, social previews, ads, monitoring, or a plain HTTP client — and a string that reads as automated but matches nothing is reported as exactly that, rather than as a browser. Detection is heuristic either way, resting on operators publishing their UA patterns. Switch to Batch to parse a whole list at once and export it as CSV.
Browser name/version, OS, device type, and rendering engine — though the exact format varies wildly between browsers due to decades of legacy compatibility hacks.
Historical compatibility — early sites checked for that token, so every modern browser still includes it even though none of them are Mozilla/Netscape.
Each token is inherited from an earlier generation of compatibility checks: "Mozilla/5.0" from Netscape, "AppleWebKit"/"like Gecko" from Safari's rendering engine, and a trailing "Safari/537.36" so WebKit- and Blink-based browsers still pass old "is this Safari?" checks. Chrome adds its own "Chrome/120.0.0.0" on top rather than replacing any of it — the string is a historical chain, not one vendor's label.
Yes, easily — it's fully client-controlled. Treat results as a hint, not proof of identity.
No — prefer feature detection (checking whether the API or property you need actually exists) over parsing the User-Agent. UA strings are spoofable, and browsers increasingly reduce the detail in them for privacy (Chrome's own User-Agent Reduction is why the built-in "Chrome Desktop" example already shows a frozen "120.0.0.0" instead of a real build number), so branching on a parsed browser or version is fragile in a way that checking for the actual capability isn't.
Since iPadOS 13, Safari's default User-Agent string is formatted exactly like desktop Safari on a Mac — no "iPad" or mobile token at all, so sites serve it the desktop layout. This parser (like any UA-string parser) can't tell the two apart from the string alone: OS resolves to macOS and Device to Desktop, identical to a real Mac. An iPhone, or an iPad switched to "Request Mobile Website", still carries a distinguishing token and parses correctly.
Yes — it names them, says who runs them, and says what they are for. Googlebot and its Image/Video/News variants, bingbot, DuckDuckBot, Baiduspider, YandexBot, Naver's Yeti and Applebot come back as search crawlers; GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Bytespider and CCBot as AI crawlers; AhrefsBot, SemrushBot, MJ12bot and DotBot as SEO tools; facebookexternalhit, Twitterbot, Slackbot, Discordbot, LinkedInBot and TelegramBot as social preview fetchers; UptimeRobot and Pingdom as monitors; and curl, wget, Postman, python-requests and Go-http-client as HTTP clients. Each is matched against the User-Agent its operator publishes, so the attribution is checkable rather than guesswork.
It says so, rather than calling it a browser. A string that reads as automated — a name ending in bot/crawler/spider, a +http contact URL, or a bare product/version token with no browser tokens at all — but that matches no known crawler is reported as "Automated client — not identified". That is a genuinely different answer from "this is a browser", and collapsing the two is how an unknown crawler passes for a visitor in your logs. The set of bots is open and always will be, so this fallback matters more than the length of the name list. The one thing no table can catch is a crawler that deliberately sends a normal browser's User-Agent — nothing in the string gives that away.
Yes — switch on Batch to parse one UA string per line, drop a file onto the input to load a whole list, and export the results as CSV.
No, parsing runs entirely in your browser.