User agent database

27,613 real-world user agent strings across 10 device categories. Search, filter, copy, or send any of them straight to the parser.

0 matching user agents ·

User agent string Browser Platform Device Actions

Browse by category

How to use this database

Front-end and QA teams use collections like this to build device matrices for cross-browser testing, to write parser fixtures, to seed analytics dashboards with realistic traffic, and to sanity-check bot-filtering rules before deploying them.

Every row here is a structurally valid string in the shape the real client emits — the same tokens, in the same order, with version numbers drawn from actual releases. Combinations are generated across platform, browser and device so the set stays broad, which means not every individual row corresponds to a shipping configuration you would find in the wild. Use them for test coverage rather than as a census of live traffic.

On device models. iOS and iPadOS never put the specific model in the user agent — every iPhone reports itself as iPhone. Rows naming a specific iPhone or iPad are labelled as such, and the string shown is what that device actually sends. Android does expose the model code, and Chrome 110+ replaces it with the literal K.

Frequently asked questions

How often is the database updated?

It is regenerated whenever significant browser or OS releases land — new Chrome, Firefox, Safari and Edge versions, new Android and iOS releases, and newly observed crawler identities. The current build covers Chrome through 142, Firefox through 147, Safari 26, Android 16 and iOS 26.

Can I download the whole dataset?

Yes. Each category is a JSON file under /assets/data/ — for example /assets/data/ua-mobile.json. /assets/data/index.json lists every category with its filename and row count. The files are dictionary-encoded to keep them small; the decoder is about ten lines and is visible in /assets/js/list.js.

Why do so many entries look nearly identical?

Because real user agents are nearly identical. A Chrome string differs from the previous release by a single version number, and the same browser appears on a dozen platform strings. Version-by-version coverage is exactly what makes a test fixture useful — parsers usually break on a specific version boundary, not on an exotic string.

Are these real or synthetic strings?

Both, deliberately. Bot, console, smart-TV, in-app and HTTP-library entries are transcribed from real observed traffic. Desktop, mobile and tablet entries are generated by combining real platform tokens, real released version numbers and real device model codes, so they match what those clients emit without needing to log anyone's traffic to collect them.