User Agent Parser
Parse any user agent string to detect browser, version, OS, device type, and rendering engine. Includes one-click detection of your own browser.
User agent string
How to use User Agent Parser
-
Paste a User-Agent string or use your browser
Paste any User-Agent string from server logs, CDN logs, analytics exports, or browser dev tools into the input. Or click Use my browser to load your current browser's navigator.userAgent automatically — handy for quickly auditing your own fingerprint.
-
Review the browser name and version
The parser separates the browser brand (Chrome, Firefox, Safari, Edge, Opera, Samsung Internet, Brave, Vivaldi, Arc, and more) from the underlying engine. Major and minor version are shown so you can match logs against known bug ranges.
-
Check the operating system
Operating system name and version come from the platform token inside the UA (Windows NT 10.0, Mac OS X 14_4_1, Linux, Android 14, iPhone OS 17_4, CrOS). Use this to split analytics by desktop OS or identify outdated clients in your logs.
-
Check the device type
Device type is inferred as desktop, mobile, tablet, or bot from substrings like Mobile, Tablet, iPad, and bot self-identifiers. Remember iPadOS 13+ reports itself as macOS Safari by default — check the engine and touch hints if a macOS row in your logs looks odd.
-
Check the rendering engine
Engine is Blink (Chrome, Edge, Opera, Brave, Vivaldi, every Chromium fork), WebKit (Safari and all iOS browsers), Gecko (Firefox), or Trident (legacy IE). Engine matters more than brand when you're reproducing rendering bugs or writing CSS fallbacks.
-
Spot bot vs human traffic
Bots that play nicely self-identify with tokens like Googlebot, Bingbot, DuckDuckBot, GPTBot, ClaudeBot, PerplexityBot, AhrefsBot, or SemrushBot. The parser surfaces these so you can filter crawler traffic out of analytics, or add tokens to robots.txt and rate-limit rules.
-
Compare against expected values
Match the parsed result against what you expected in your log line or test case. Mismatches often reveal UA spoofing, an outdated client still on an EOL browser, or an iOS browser masquerading via CriOS/FxiOS/EdgiOS — all of which render through WebKit regardless of brand.
-
Copy the structured output
Copy the parsed browser, OS, device, and engine fields into a bug report, debug log, incident postmortem, or internal wiki page. Structured output is easier to read and grep than the raw UA string.
User Agent Parser FAQ
What is a User-Agent string?
Where is the User-Agent header sent?
Can User-Agent strings be spoofed?
What's the difference between the browser and the rendering engine?
Why does Chrome on iOS show WebKit?
How do you detect a bot vs a browser from the UA?
Is feature detection better than UA sniffing?
What is Client Hints and Sec-CH-UA?
Can I use the UA to serve different HTML to mobile users?
How do I find my own User-Agent?
Does it detect Googlebot, GPTBot, and other AI crawlers?
What about old UA formats like Trident or IE?
Why does Edge show Chrome tokens in its UA?
Is UA parsing reliable for fraud and abuse detection?
Is my User-Agent data sent anywhere?
Background
The Kordu User Agent Parser decodes any User-Agent HTTP header string into
human-readable components: browser name and version, operating system and
version, device type (desktop, mobile, tablet, or bot), and rendering engine
(Blink, WebKit, Gecko, Trident). Paste a UA string from server logs,
analytics exports, or a debugging session, or click "Use my browser" to
populate the input with navigator.userAgent from your current browser.
What a User-Agent string is
The User-Agent header is defined in RFC 7231 (originally RFC 1945 for
HTTP/1.0) as a free-form product token that identifies the client software
making an HTTP request. Every browser, crawler, HTTP library, and CLI tool
sends one with every request, and servers routinely log it alongside the
request method, path, status, and referrer. In theory it is a simple
Product/Version list. In practice it is one of the messiest strings on
the web — the result of thirty years of compatibility workarounds stacked
on top of each other.
Anatomy of a modern UA string
Almost every desktop and mobile browser ships a UA that starts with
Mozilla/5.0 — a lie inherited from the browser wars, where servers used
to gate features on the Mozilla token, forcing every competitor to claim
to be Mozilla. A typical modern Chrome UA looks like:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
That string breaks down into five pieces:
Mozilla/5.0— the legacy compatibility prefix.(Windows NT 10.0; Win64; x64)— the platform token (OS + CPU).AppleWebKit/537.36 (KHTML, like Gecko)— a WebKit compatibility claim carried over from when WebKit forked from KHTML; Chrome still reports it even though Chrome now uses Blink.Chrome/124.0.0.0— the real browser token and version.Safari/537.36— another compatibility token, left in so Safari-only code paths on legacy servers do not exclude Chrome.
Rendering engines
Four engines power virtually every browser in production. Blink powers Chrome, Edge, Opera, Brave, Vivaldi, Samsung Internet, and every other Chromium fork. WebKit powers Safari on macOS and iOS, and — because of Apple's App Store rules — every browser on iOS, including Chrome (CriOS), Firefox (FxiOS), and Edge (EdgiOS). Gecko powers Firefox and its forks (LibreWolf, Tor Browser). Trident was the engine for legacy Internet Explorer and now appears only in ancient log entries. Knowing which engine renders a request is often more useful than knowing the browser name, because rendering bugs track engine versions, not browser brands.
Device detection heuristics
Device type is not a formal field — parsers infer it from substrings
inside the platform token and elsewhere in the UA. Mobile typically
marks a phone. Tablet, iPad, or specific Android tablet tokens mark
tablets. iPadOS 13+ famously reports itself as macOS Safari by default
to stop sites from serving the phone layout, so iPad detection also
checks for a touch-screen hint. Bots and crawlers usually self-identify
with bot, crawler, spider, or a branded token such as Googlebot,
Bingbot, Slurp (Yahoo), DuckDuckBot, YandexBot, Baiduspider,
AhrefsBot, SemrushBot, GPTBot (OpenAI), ClaudeBot (Anthropic),
PerplexityBot, Google-Extended, and CCBot (Common Crawl). AI crawler
traffic has grown fast over the last two years, and most well-behaved AI
crawlers respect robots.txt — but only if you know which token to list.
Spoofing and its limits
Any user can change their UA — browsers ship a dev-tools option, curl
and wget have -A, and every HTTP library exposes a header setter.
That makes UA-based bot blocking trivially bypassable on its own. Serious
bot detection layers TLS fingerprinting (JA3, JA4), HTTP/2 fingerprinting,
browser feature probing, and behavioral signals on top of the UA header.
For fraud and abuse work, treat the UA as a helpful hint, never as a
trusted identity.
Client Hints and User-Agent Reduction
Chrome has been slowly freezing and reducing the UA since Chrome 101 as
part of the User-Agent Reduction initiative. The reduced UA exposes a
minor version of 0.0.0 and a generic platform token; the precise
browser, version, mobile flag, and platform details move into the new
Sec-CH-UA, Sec-CH-UA-Mobile, and Sec-CH-UA-Platform headers (User-
Agent Client Hints). Sites that need the full detail opt in with the
Accept-CH response header or the Permissions-Policy: ch-ua-* policy.
Firefox and Safari have not shipped Client Hints, so the classic UA
header will stay in server logs for years. A good parser has to handle
both worlds.
Privacy implications
The UA string is a large piece of the browser fingerprinting surface — EFF's Panopticlick work showed that UA, language, installed fonts, and screen resolution are usually enough to identify a browser uniquely. Reducing the UA is one of several anti-fingerprinting changes Chromium has made; Safari ITP and Firefox's resistFingerprinting mode cap UA entropy as well. Running your own UA through this parser is the quickest way to see what every site you visit already knows about your browser.
When to use a UA parser — and when not to
Good use cases: analyzing access logs and CDN logs, segmenting analytics
by browser or engine, detecting and rate-limiting self-identified bots,
reproducing user-reported bugs, and building internal debug dashboards.
Bad use cases: branching UI or features on browser name. Feature
detection (if ("clipboard" in navigator), @supports, progressive
enhancement) is more reliable, survives engine swaps, and does not break
when Chromium forks update their UAs. Never serve different HTML to
mobile UAs — Google's mobile-first index penalizes UA-based content
swaps, and responsive CSS with @media is the right tool.
Comparison to other UA parsers
The most widely used library is UA-Parser-JS (MIT, ~16k stars), which powers analytics dashboards across the web. Server-side stacks often use ua-parser (Python), woothee, or device-detector. This tool gives you the same core output — browser, OS, device, engine — for ad-hoc UA inspection without installing anything, wiring up an API, or pasting strings into a random web form that may log your data.
Privacy
All parsing runs client-side in your browser. The UA string never leaves your device. There is no backend, no logging, and no analytics tied to the parse.
Related tools
What Is My IP
Find your public IPv4 and IPv6 address with ISP, city, country, ASN, and timezone — loads instantly.
HTTP Headers Viewer
Check what HTTP response headers any URL returns. Inspect security headers, follow redirect chains, and get a security grade.
WebRTC Leak Checker
Test whether WebRTC exposes your real IP address behind a VPN — detects local and public IP leaks.
DNS Lookup
Query all DNS record types for any domain — A, AAAA, MX, TXT, CNAME, NS, SOA, CAA — via Cloudflare DoH.
JWT Decoder
Decode and inspect JWT tokens — view header, payload, claims, and expiry status without sending data to any server.
HTTP Status Code Reference
Complete HTTP status code reference with descriptions, causes, and examples — searchable and filterable by category.
Curl to JavaScript Fetch Converter
Convert curl commands to JavaScript fetch API code instantly. Supports all common flags: headers, POST data, auth, form data, and more.
Webhook Tester
Get a temporary webhook URL and inspect incoming requests in real time. See headers, body, query params, and get a cURL replay command.