Privacy & VPN

What is a user agent, and what does yours say about you?

Every request your browser makes carries a short line of text announcing what it is. That line is the user agent, and it is older, stranger and less honest than it looks.

In this guide
Short answer

A user agent is a text string your browser (or app) sends with every web request to identify itself, for example Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36. Websites use it to pick layouts and log visits. Modern browsers freeze most of its details, and Chromium browsers now send structured Client Hints instead.

What a user agent is

In web terms, a user agent is any program that fetches pages on a person's behalf: a browser, an app's built-in web view, a search engine crawler, a command-line tool like curl. The user agent string is the self-description that program sends in the User-Agent HTTP header with every request, and that it exposes to page scripts as navigator.userAgent. The two are normally identical.

Servers were meant to use it to send content a given client could handle. In the 1990s that meant checking for frames support; today it mostly means logging, analytics, blocking known bots, and occasionally serving a different layout to phones. It has never been authenticated. Anything can claim to be anything, which is why so much of the string is historical fiction.

See your user agent

The what is my user agent page shows the exact string your browser sent, decoded into browser, version, engine, operating system and device type. It reads the string twice, once from the header the server received and once from navigator.userAgent in the page, and flags any difference, which usually means a proxy, an extension or a privacy setting is rewriting one of them. You can also paste any user agent from a log file to decode it.

Anatomy of a user agent string

Take the string a current Chrome on Windows sends (the major version will be whatever you are running):

text
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36
TokenWhat it saysWhat it actually means
Mozilla/5.0This is Netscape-compatibleNothing. Every browser has sent it since the 1990s because servers once gave Mozilla-branded browsers the better page.
Windows NT 10.0; Win64; x64Windows 10, 64-bitWindows 11 reports exactly the same value; the NT version never moved past 10.0, and Chrome froze the whole platform token in version 107.
AppleWebKit/537.36WebKit build 537.36Chrome left WebKit for Blink in 2013 and kept the token so WebKit-only code paths would still trigger. The number has not changed since.
(KHTML, like Gecko)Behaves like Firefox's engineA compatibility hint from the Konqueror era. Also permanent.
Chrome/140.0.0.0Chrome major version 140The only live information. Minor, build and patch numbers were zeroed in Chrome 101 so the string reveals less.
Safari/537.36Also SafariSo that sites checking for Safari would serve Chrome the same content. Edge, Opera, Brave and Vivaldi carry the Chrome and Safari tokens too, which is why they are hard to tell apart from this string alone.

Other browsers follow the same pattern of frozen tokens plus one real version:

  • Firefox on Windows: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0. Gecko/20100101 is a fixed date; rv: and Firefox/ carry the version. On a Mac, Firefox reports macOS as 10.15 no matter which version is installed, and Apple silicon Macs report as Intel.
  • Safari on a Mac: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15. The macOS token has been frozen at 10_15_7 for years; only Version/ moves.
  • Safari on iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1. Safari 26 reports the iOS token as 18_6 on iOS 26 devices, an intentional freeze; the Safari version is the honest part. iPads have reported as Macintosh since iPadOS 13.
  • Chrome on Android: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36. Since Chrome 110 every Android phone claims to be a model called K running Android 10. The Mobile token is what distinguishes a phone from a tablet.

Client Hints: the structured replacement

Because the string had become both useless (frozen) and privacy-sensitive (a few sites still extracted device models and exact OS builds), Chromium browsers replaced it with User-Agent Client Hints. By default a site now receives three small headers: Sec-CH-UA (browser brands with major versions), Sec-CH-UA-Mobile (phone or not) and Sec-CH-UA-Platform (operating system name). Everything with more detail, such as the full browser version, the platform version, the CPU architecture and the device model, is a high-entropy hint that the server must request with an Accept-CH response header, and the browser may decline.

The practical effect: a website can still tell Chrome 140 on Android from Safari on an iPhone, but it has to ask explicitly for a Pixel 9 versus a Galaxy S25, and that request is visible. Firefox and Safari have not adopted Client Hints; they rely on their own frozen strings instead. The user agent page shows the hints your browser sends and the high-entropy values it is willing to reveal.

Why websites read the user agent, and why people change it

Legitimate uses are mundane: analytics dashboards (what share of visitors use Safari), serving a mobile layout before CSS media queries existed, blocking or allowing crawlers, and warning users on browsers too old to run the site. The string is also one of the first things a fraud or bot-detection system looks at, because automated tools either forget to set it or set it badly.

Changing it (spoofing) is easy. Desktop browsers include a device-emulation mode in their developer tools; extensions switch strings per site; Safari's Request Desktop Website and Chrome's Desktop site checkbox on Android do it with one tap. Reasons people do it:

  • Getting a desktop layout on a phone, or a lighter mobile layout on a desktop.
  • Testing how a site behaves for other browsers.
  • Working around a badly written compatibility check that blocks a perfectly capable browser.
  • Making a scraper look like a person. This is the use that gets user agents blocked, and it rarely works on its own.

What spoofing does not do is hide you. The user agent is one of dozens of signals a page can read, and a Chrome string paired with Safari-only rendering quirks is more conspicuous than the real thing.

User agent vs browser fingerprint

Your user agent is one line of a much longer description. Screen size, installed fonts, GPU model, time zone, language list, audio and canvas rendering quirks and dozens more properties combine into a browser fingerprint that can recognize a browser across sites without cookies. Freezing the user agent removed a few bits of that identifying information; it did not remove the rest. The browser fingerprint test shows how much your setup still reveals, and the what websites can see page puts the user agent next to everything else a site learns on the first request, starting with your IP address from the homepage.

Questions

Where do I find my user agent?

Open the what is my user agent page on this site; it prints the string your browser sent and decodes it. On any site, you can also open the browser's developer tools, switch to the Console and type navigator.userAgent, or look at the request headers in the Network tab. Mobile browsers have no console, so a page that echoes the string is the practical route.

What user agent does Google use?

Googlebot Smartphone sends Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html), where W.X.Y.Z is the Chrome version Googlebot currently runs. Googlebot Desktop is similar without the Android part. Anyone can copy it, so Google asks site owners to verify the source IP by reverse DNS rather than trusting the string.

What is a user agent string used for?

Mostly for analytics and logging, for deciding whether to serve a mobile or desktop layout, for blocking or allowing crawlers, and for warning visitors on unsupported browsers. Fraud and bot-detection systems check it for inconsistencies. It is not used for authentication and should never be trusted on its own, because any client can send any string.

Can I change my user agent, and is it safe?

Yes. Developer tools, browser extensions and the Request Desktop Site option all change it, and doing so is harmless and legal. It only affects which version of a page you receive. It does not make you anonymous: your IP address and the rest of your browser fingerprint stay the same, and a spoofed string that contradicts your browser's real behavior can make you stand out more, not less.

Does my user agent reveal my device or Windows version?

Less than it used to. Chrome reports Windows 11 as Windows NT 10.0, every Android phone as a model named K on Android 10, and zeroes the minor version. Safari freezes the macOS token at 10_15_7 and the iOS token at 18_6. Precise details are only available through Client Hints when a site asks for them, or through fingerprinting techniques that look beyond the string.

Sources and further reading

  1. Chromium: User-Agent reduction
  2. Privacy Sandbox: User-Agent reduction and Client Hints
  3. MDN: Firefox user agent string reference
  4. Google Search Central: Google's common crawlers
  5. RFC 9110: HTTP Semantics (User-Agent header field)
CheckMyIP Team
Network engineers and privacy researchers