Skip to content
Kordu Tools
Developer Tools Runs in browser Updated 18 Apr 2026

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

BrowserUnknown
Operating systemUnknown
Device typeDesktop
Rendering engineUnknown
Bot / crawlerNo
Loading rating…

How to use User Agent Parser

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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?

A User-Agent string is a free-form text identifier that browsers and HTTP clients send in the User-Agent request header. Defined in RFC 7231, it lists one or more product tokens describing the client software — browser and version, the rendering engine, and a platform token for the OS and CPU. Example: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'. Every browser, CLI tool, crawler, and HTTP library sends one.

Where is the User-Agent header sent?

On every HTTP request. In Apache and Nginx access logs it is the last quoted field of the combined log format. In Chrome DevTools, open Network, click any request, and look for the User-Agent row under Request Headers. In JavaScript it is available as navigator.userAgent. In curl it is set with -A, in Python requests via headers={'User-Agent': '...'}, and in every HTTP client library with an equivalent header setter.

Can User-Agent strings be spoofed?

Yes, trivially. Every browser exposes a UA override in dev tools or extensions, curl and wget have a -A flag, and every HTTP library lets you set any header you want. That is why UA-based bot blocking fails on its own — attackers simply send a real Chrome UA. Reliable bot detection layers TLS fingerprinting (JA3, JA4), HTTP/2 fingerprinting, browser feature probing, and behavioral signals on top of the UA.

What's the difference between the browser and the rendering engine?

The browser is the brand (Chrome, Firefox, Safari, Edge). The rendering engine is the code that turns HTML and CSS into pixels. Blink powers Chrome, Edge, Opera, Brave, Vivaldi, and every Chromium fork. WebKit powers Safari and every iOS browser. Gecko powers Firefox. Trident powered legacy IE. When you are reproducing a rendering bug, the engine matters more than the brand — Chromium forks share Blink quirks whether they ship as Edge or Vivaldi.

Why does Chrome on iOS show WebKit?

Apple's App Store rules require every iOS browser to use the system WebKit engine. Chrome on iOS (CriOS token), Firefox on iOS (FxiOS), and Edge on iOS (EdgiOS) all wrap WebKit behind a custom UI — they render the page identically to Safari. That is why an iOS Chrome bug is usually a WebKit bug. The EU's Digital Markets Act has started to loosen this requirement, but as of 2026 most iOS Chrome installs in the wild still render via WebKit.

How do you detect a bot vs a browser from the UA?

Well-behaved bots self-identify with tokens like Googlebot, Bingbot, Slurp (Yahoo), DuckDuckBot, YandexBot, Baiduspider, AhrefsBot, SemrushBot, GPTBot (OpenAI), ClaudeBot (Anthropic), PerplexityBot, Google-Extended, and CCBot (Common Crawl). The parser flags these. Badly-behaved bots copy a real Chrome UA — catching those requires TLS fingerprinting, rate limits, CAPTCHAs, or behavioural analysis. For the friendly kind, a UA parser plus a curated robots.txt is enough.

Is feature detection better than UA sniffing?

Almost always, yes. Feature detection (if ('clipboard' in navigator), @supports in CSS, progressive enhancement) tests the capability you actually need and survives engine swaps, UA reductions, and Chromium forks changing their tokens. UA sniffing breaks as soon as a browser updates its UA — which Chrome now does on a frozen schedule. Reserve UA parsing for analytics, log analysis, and bot detection; use feature detection for runtime branching.

What is Client Hints and Sec-CH-UA?

User-Agent Client Hints are a Chrome proposal that moves the browser, version, mobile flag, and platform into dedicated headers: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform. Sites opt in with Accept-CH or Permissions-Policy. It pairs with User-Agent Reduction, which freezes the classic UA string to a minor version of 0.0.0 and a generic platform token. Firefox and Safari have not shipped Client Hints, so the classic UA header is still the only cross-browser signal.

Can I use the UA to serve different HTML to mobile users?

Don't. Google's mobile-first index expects the same HTML for every device, and UA-based content swaps regularly trigger ranking issues or get flagged as cloaking. Use responsive CSS with @media queries for layout, the `<picture>` element for art direction, and feature detection for capability differences. The only legitimate case for UA-based HTML switching is a 'download our app' banner, which should still be optional and static.

How do I find my own User-Agent?

Click Use my browser in this tool — it reads navigator.userAgent and fills the input. You can also open the browser console on any page and run `navigator.userAgent`. Chrome DevTools → Network → any request → Request Headers shows the exact string your browser sent, including any Sec-CH-UA client hints, which is what the server actually receives.

Does it detect Googlebot, GPTBot, and other AI crawlers?

Yes — as long as the crawler self-identifies in its User-Agent. The parser recognises Googlebot, Bingbot, DuckDuckBot, YandexBot, Baiduspider, AhrefsBot, SemrushBot, GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, and many other well-known bots. Verifying that a request truly came from Google or another verified crawler requires a reverse DNS check, not just UA inspection — treat UA as a label, not proof of identity.

What about old UA formats like Trident or IE?

The parser still handles Trident-based UAs from Internet Explorer 6 through 11 (tokens like MSIE 6.0, MSIE 11.0, and Trident/7.0 with rv:11.0). You will mostly see these in historical logs or from industrial and enterprise clients still running legacy software. Microsoft ended IE 11 support in 2022, so fresh IE traffic today is almost always a misconfigured scanner rather than a real user.

Why does Edge show Chrome tokens in its UA?

Modern Edge is Chromium-based, and its UA carries both an Edg/ token and the Chrome/ token. That is deliberate: Edge advertises Chrome compatibility so sites that only test for Chrome don't reject it. The legacy EdgeHTML Edge (2015-2020) had a different token (Edge/) with a different engine. A parser should split on Edg/ (Chromium) vs Edge/ (legacy) and route the engine accordingly.

Is UA parsing reliable for fraud and abuse detection?

On its own, no. Any attacker can set the UA to a real Chrome string in one line of code. UA parsing is useful for segmenting logs and spotting obvious misbehaving tools (default curl UAs, unknown scrapers), but serious fraud and abuse detection needs TLS fingerprinting (JA3, JA4, Akamai's acceptable-client-hello database), HTTP/2 fingerprinting, proof-of-work challenges, or a managed bot-management service on top of the UA field.

Is my User-Agent data sent anywhere?

No. All parsing happens in your browser using JavaScript. The User-Agent string you paste or load via Use my browser is never transmitted to any server, never logged, and never stored. The tool works offline once the page has loaded.

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.