GET/api/v2/user-agent
User agent parser API
Browser, engine, operating system, device and crawler from a User-Agent string, telling real values from frozen ones.
- 120 calls a minute per IP (IPv6 per /56)
- Same engine as the What Is My User Agent tool
{
"query": {
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
},
"source": "parameter",
"empty": false,
"browser": {
"name": {
"value": "Chrome",
"fromString": "Chrome",
"source": "ua",
"frozen": false,
"note": null
},
"version": {
"value": "141",
"fromString": "141.0.0.0",
"source": "ua",
"frozen": true,
"note": "minor_frozen"
}
},
"engine": {
"name": {
"value": "Blink",
"fromString": "Blink",
"source": "ua",
"frozen": false,
"note": "webkit_compat"
},
"version": {
"value": "141",
"fromString": "141.0.0.0",
"source": "ua",
"frozen": true,
"note": "minor_frozen"
}
},
"os": {
"name": {
"value": "Windows",
"fromString": "Windows",
"source": "ua",
"frozen": false,
"note": null
},
"version": {
"value": null,
"fromString": "10",
"source": "none",
"frozen": true,
"note": "windows_10_or_11"
}
},
"device": {
"type": {
"value": "desktop",
"fromString": "desktop",
"source": "ua",
"frozen": false,
"note": null
},
"vendor": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
},
"model": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
}
},
"cpu": {
"architecture": {
"value": null,
"fromString": "x86_64",
"source": "none",
"frozen": true,
"note": "windows_arch_frozen"
},
"bitness": {
"value": null,
"fromString": "64",
"source": "none",
"frozen": true,
"note": null
}
},
"bot": null,
"clientHints": null,
"parser": "rules",
"issues": [
{
"severity": "info",
"code": "minor_frozen",
"message": "Chromium sends x.0.0.0: only the major version is real."
},
{
"severity": "info",
"code": "webkit_compat",
"message": "Chromium's \"AppleWebKit/537.36\" is a compatibility token: its engine is Blink."
},
{
"severity": "info",
"code": "windows_10_or_11",
"message": "Windows 10 and Windows 11 both send \"Windows NT 10.0\": the string can't tell them apart (Client Hints' platformVersion can: 13 or more is Windows 11)."
},
{
"severity": "info",
"code": "windows_arch_frozen",
"message": "\"Win64; x64\" is sent by ARM PCs too: the architecture in the string isn't proof."
}
],
"tookMs": 0
}How it works
Parses a User-Agent string with our own rules (and bowser for the long tail): browser, engine, OS, device type, vendor and model, CPU, and the crawler when it is one (31 known crawlers with their operator, purpose and documentation, plus a generic bot pattern).
Browsers now freeze parts of the string: every Mac says macOS 10.15.7, Chrome on Android says Android 10, Windows 11 says Windows NT 10.0, Chromium's minor version is 0.0.0. Each field gives fromString and our best value separately, flags frozen tokens and explains them in issues, so a frozen token is never reported as a fact.
Without ua, your own request is parsed together with its User-Agent Client Hints headers (Sec-CH-UA*), which carry the real values where your browser sends them (clientHints). A crawler's string is only a claim: verify the crawler's IP before trusting it.
Query parameters
uastringoptionalA User-Agent string, up to 2,000 characters (URL-encode it). Leave it out to parse your own request's.
Response fields
200 with this JSON object, plus tookMs, and incomplete with warnings when a source failed. Fields marked optional appear only when they apply.
queryobjectalwaysWhat was looked up, normalised (lower case, no trailing dot, IDNs as Punycode).uastringalwaysThe string parsed (at most its first 2,000 characters).
sourcestringalwaysparameter(theuayou sent) orheader(your own request's).one of
"parameter","header"emptybooleanalwaysWhether the string was empty.browserobjectalwaysThe browser.nameobjectalwaysIts name ("Chrome", "Safari").Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
versionobjectalwaysIts version.Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
engineobjectalwaysThe rendering engine.nameobjectalwaysIts name ("Blink", "WebKit", "Gecko").Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
versionobjectalwaysIts version.Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
osobjectalwaysThe operating system.nameobjectalwaysIts name ("Windows", "macOS", "Android", "iOS").Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
versionobjectalwaysIts version.Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
deviceobjectalwaysThe device.typeobjectalwaysdesktop,mobile,tablet,tv,console,wearable,xrorother.Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
vendorobjectalwaysIts maker ("Apple", "Samsung").Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
modelobjectalwaysIts model.Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
cpuobjectalwaysThe CPU.architectureobjectalwaysx86_64,x86,arm64,arm,ppc…Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
bitnessobjectalways64or32.Show 5 fields
valuestring or nullalwaysOur best true value; null when nothing can tell (a frozen token without Client Hints).fromStringstring or nullalwaysWhat the User-Agent string itself says; null when it says nothing.sourcestringalwaysWherevaluecame from:ua(the string),hints(Client Hints),none.one of
"ua","hints","feature","none"frozenbooleanalwaysThe string's value is a frozen or placeholder token (macOS 10.15.7, Android 10, Chrome's x.0.0.0): never a fact.notestring or nullalwaysWhy the field reads as it does: a code listed with its sentence inissues.
botobject or nullalwaysThe crawler the string names, or null for a browser.Show 9 fields
idstring or nullalwaysOur crawler id (e.g.googlebot); null for a generic bot-like string we can't name.namestringalwaysThe crawler's name, or the matched text.versionstring or nullalwaysIts version.operatorstring or nullalwaysWho runs it.kindstringalwaysWhat it is for:search,ai-training,ai-user,ai-search,social,monitororother.one of
"search","ai-training","ai-user","ai-search","social","monitor","other"docsstring or nullalwaysThe operator's documentation.verifiablebooleanalwaysWhether its IP can be verified (a published list, or reverse and forward DNS).robotsstring or nullalwaysobeysrobots.txt,may-ignoreit, ortoken-only(a robots.txt token never sent in requests).one of
"obeys","may-ignore","token-only",nullgenericbooleanalwaysOnly the generic bot pattern matched: no proof of anything.
clientHintsobject or nullalwaysYour request's User-Agent Client Hints (withoutuaonly), or null.Show 9 fields
presentbooleanalwaysWhether any were sent.supportstringalwaysyes(a Chromium browser),no(Firefox, Safari, any iOS browser never send them),unknown.one of
"yes","no","unknown"brandsarray of objectsalwaysThe brands, GREASE entries dropped.Show 3 fields
brandstringalwaysThe brand.versionstring or nullalwaysIts major version.fullVersionstring or nullalwaysIts full version, when sent.
platformstring or nullalwaysSec-CH-UA-Platform.platformVersionstring or nullalwaysSec-CH-UA-Platform-Version.architecturestring or nullalwaysSec-CH-UA-Arch.bitnessstring or nullalwaysSec-CH-UA-Bitness.modelstring or nullalwaysSec-CH-UA-Model.mobileboolean or nullalwaysSec-CH-UA-Mobile.
parserstringalwaysWho read the string:rules(ours),bowser(the fallback) ornone(nothing recognised it).one of
"rules","bowser","none"issuesarray of objectsalwaysProblems found in the target's configuration, worst first. Empty when there are none.severitystringalwayserrorbreaks something,warningrisks it,infois worth knowing.one of
"error","warning","info"codestringalwaysStable machine-readable code.messagestringalwaysThe problem and what to do about it, in plain English.
Errors
Plus the errors every endpoint can return: 400 for a missing or unreadable parameter, 429 past the limit, 503 when every source failed.
Code samples
curl -G "https://dnsrobot.net/api/v2/user-agent" \
--data-urlencode "ua=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"const params = new URLSearchParams({ ua: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" });
const res = await fetch(`https://dnsrobot.net/api/v2/user-agent?${params}`);
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data.browser);import requests
r = requests.get(
"https://dnsrobot.net/api/v2/user-agent",
params={"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"},
timeout=30,
)
data = r.json()
if not r.ok:
raise RuntimeError(data["error"]["message"])
print(data["browser"])package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
q := url.Values{"ua": {"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"}}
res, err := http.Get("https://dnsrobot.net/api/v2/user-agent?" + q.Encode())
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
panic(err)
}
if res.StatusCode != http.StatusOK {
panic(data["error"])
}
fmt.Println(data["browser"])
}<?php
$query = http_build_query(["ua" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"]);
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 30]]);
$data = json_decode(file_get_contents("https://dnsrobot.net/api/v2/user-agent?" . $query, false, $context), true);
if (isset($data["error"])) {
throw new RuntimeException($data["error"]["message"]);
}
print_r($data["browser"]);require "net/http"
require "json"
uri = URI("https://dnsrobot.net/api/v2/user-agent")
uri.query = URI.encode_www_form(ua: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36")
data = JSON.parse(Net::HTTP.get(uri))
raise data["error"]["message"] if data["error"]
puts data["browser"]// Cargo.toml: reqwest = { version = "0.13", features = ["blocking", "json"] }, serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::get("https://dnsrobot.net/api/v2/user-agent?ua=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F141.0.0.0+Safari%2F537.36")?;
let ok = res.status().is_success();
let data: serde_json::Value = res.json()?;
if !ok {
return Err(data["error"]["message"].to_string().into());
}
println!("{}", data["browser"]);
Ok(())
}using System.Text.Json;
using var http = new HttpClient();
var res = await http.GetAsync("https://dnsrobot.net/api/v2/user-agent?ua=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F141.0.0.0+Safari%2F537.36");
var data = JsonDocument.Parse(await res.Content.ReadAsStringAsync()).RootElement;
if (!res.IsSuccessStatusCode)
throw new Exception(data.GetProperty("error").GetProperty("message").GetString());
Console.WriteLine(data.GetProperty("browser"));Chrome on Windows
GET /api/v2/user-agent?ua=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F141.0.0.0+Safari%2F537.36{
"query": {
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.…"
},
"source": "parameter",
"empty": false,
"browser": {
"name": {
"value": "Chrome",
"fromString": "Chrome",
"source": "ua",
"frozen": false,
"note": null
},
"version": {
"value": "141",
"fromString": "141.0.0.0",
"source": "ua",
"frozen": true,
"note": "minor_frozen"
}
},
"engine": {
"name": {
"value": "Blink",
"fromString": "Blink",
"source": "ua",
"frozen": false,
"note": "webkit_compat"
},
"version": {
"value": "141",
"fromString": "141.0.0.0",
"source": "ua",
"frozen": true,
"note": "minor_frozen"
}
},
"os": {
"name": {
"value": "Windows",
"fromString": "Windows",
"source": "ua",
"frozen": false,
"note": null
},
"version": {
"value": null,
"fromString": "10",
"source": "none",
"frozen": true,
"note": "windows_10_or_11"
}
},
"device": {
"type": {
"value": "desktop",
"fromString": "desktop",
"source": "ua",
"frozen": false,
"note": null
},
"vendor": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
},
"model": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
}
},
"cpu": {
"architecture": {
"value": null,
"fromString": "x86_64",
"source": "none",
"frozen": true,
"note": "windows_arch_frozen"
},
"bitness": {
"value": null,
"fromString": "64",
"source": "none",
"frozen": true,
"note": null
}
},
"bot": null,
"clientHints": null,
"parser": "rules",
"issues": [
{
"severity": "info",
"code": "minor_frozen",
"message": "Chromium sends x.0.0.0: only the major version is real."
},
{
"severity": "info",
"code": "webkit_compat",
"message": "Chromium's \"AppleWebKit/537.36\" is a compatibility token: its engine is Blink."
},
{
"severity": "info",
"code": "windows_10_or_11",
"message": "Windows 10 and Windows 11 both send \"Windows NT 10.0\": the string can't tell them apart (Client …"
},
// … 1 more item
],
"tookMs": 0
}Shortened for the page: long lists show their first items.
Safari on an iPhone
GET /api/v2/user-agent?ua=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+18_7+like+Mac+OS+X%29+AppleWebKit%2F605.1.15+%28KHTML%2C+like+Gecko%29+Version%2F26.0+Mobile%2F15E148+Safari%2F604.1{
"query": {
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) …"
},
"source": "parameter",
"empty": false,
"browser": {
"name": {
"value": "Safari",
"fromString": "Safari",
"source": "ua",
"frozen": false,
"note": null
},
"version": {
"value": "26.0",
"fromString": "26.0",
"source": "ua",
"frozen": false,
"note": null
}
},
"engine": {
"name": {
"value": "WebKit",
"fromString": "WebKit",
"source": "ua",
"frozen": false,
"note": null
},
"version": {
"value": null,
"fromString": "605.1.15",
"source": "none",
"frozen": true,
"note": "webkit_frozen"
}
},
"os": {
"name": {
"value": "iOS",
"fromString": "iOS",
"source": "ua",
"frozen": false,
"note": null
},
"version": {
"value": "26.0",
"fromString": "18.7",
"source": "ua",
"frozen": true,
"note": "ios_frozen"
}
},
"device": {
"type": {
"value": "mobile",
"fromString": "mobile",
"source": "ua",
"frozen": false,
"note": null
},
"vendor": {
"value": "Apple",
"fromString": "Apple",
"source": "ua",
"frozen": false,
"note": null
},
"model": {
"value": "iPhone",
"fromString": "iPhone",
"source": "ua",
"frozen": false,
"note": "apple_model_hidden"
}
},
"cpu": {
"architecture": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
},
"bitness": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
}
},
"bot": null,
"clientHints": null,
"parser": "rules",
"issues": [
{
"severity": "info",
"code": "webkit_frozen",
"message": "Safari's AppleWebKit/605.1.15 no longer changes between versions."
},
{
"severity": "info",
"code": "ios_frozen",
"message": "Safari 26 and later report iOS 18.6 or 18.7 for every newer system: the real version is Safari's…"
},
{
"severity": "info",
"code": "apple_model_hidden",
"message": "Apple never puts the iPhone or iPad model in the string."
}
],
"tookMs": 0
}Shortened for the page: long lists show their first items.
Googlebot Smartphone
GET /api/v2/user-agent?ua=Mozilla%2F5.0+%28Linux%3B+Android+6.0.1%3B+Nexus+5X+Build%2FMMB29P%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F141.0.7390.122+Mobile+Safari%2F537.36+%28compatible%3B+Googlebot%2F2.1%3B+%2Bhttp%3A%2F%2Fwww.google.com%2Fbot.html%29{
"query": {
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko)…"
},
"source": "parameter",
"empty": false,
"browser": {
"name": {
"value": "Googlebot",
"fromString": "Chrome",
"source": "ua",
"frozen": false,
"note": "crawler_emulates"
},
"version": {
"value": "2.1",
"fromString": "141.0.7390.122",
"source": "ua",
"frozen": false,
"note": "crawler_emulates"
}
},
"engine": {
"name": {
"value": null,
"fromString": "Blink",
"source": "none",
"frozen": false,
"note": "crawler_emulates"
},
"version": {
"value": null,
"fromString": "141.0.7390.122",
"source": "none",
"frozen": false,
"note": "crawler_emulates"
}
},
"os": {
"name": {
"value": null,
"fromString": "Android",
"source": "none",
"frozen": false,
"note": "crawler_emulates"
},
"version": {
"value": null,
"fromString": "6.0.1",
"source": "none",
"frozen": false,
"note": "crawler_emulates"
}
},
"device": {
"type": {
"value": null,
"fromString": "mobile",
"source": "none",
"frozen": false,
"note": "crawler_emulates"
},
"vendor": {
"value": null,
"fromString": "LG",
"source": "none",
"frozen": false,
"note": "crawler_emulates"
},
"model": {
"value": null,
"fromString": "Nexus 5X",
"source": "none",
"frozen": false,
"note": "crawler_emulates"
}
},
"cpu": {
"architecture": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
},
"bitness": {
"value": null,
"fromString": null,
"source": "none",
"frozen": false,
"note": null
}
},
"bot": {
"id": "googlebot",
"name": "Googlebot",
"version": "2.1",
"operator": "Google",
"kind": "search",
"docs": "https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers",
"verifiable": true,
"robots": "obeys",
"generic": false
},
"clientHints": null,
"parser": "rules",
"issues": [
{
"severity": "info",
"code": "crawler_emulates",
"message": "A crawler's string imitates a browser and device it isn't."
}
],
"tookMs": 0
}Shortened for the page: long lists show their first items.