Core Web Vitals (field data) Beta
Six months of weekly real-user Core Web Vitals from the Chrome UX Report — the field data Google actually uses, not a lab simulation. LCP, INP, CLS, FCP and TTFB at the 75th percentile, each categorised good / ni / poor using Google's own thresholds.
The exact URL is tried first, then the origin (and its www / non-www variant), so a low-traffic page still returns usable data — level tells you which was used. For a synthetic lab run instead, see Lighthouse.
503 otherwise. It is a free Google API, so no call incurs a per-request cost.Authentication
Send your API key as an X-API-Key header, or as a key query parameter. Available on every plan, including Free — plans differ only in requests per day. This call costs one request against your daily quota, which is shared across every key on the account. See Authentication.
Query parameters
| Name | Type | Description |
|---|---|---|
url required | string | The page to look up. |
device optional | string | mobile (default) or desktop. |
key optional | string | Your API key, if not sent as the X-API-Key header. |
Request
Response
- {
- "url": "https://example.com", "device": "mobile",
- "hasFieldData": true, "level": "url",
- "latest": { "periodEnd": "2026-08-29", "lcp": 2112, "lcpCat": "good",
- "inp": 176, "inpCat": "good", "cls": 0.04, "clsCat": "good",
- "fcp": 1408, "ttfb": 612 },
- "points": [ /* ~26 weekly points, same shape as "latest" */ ]
- }
Response fields
| Field | Type | Description |
|---|---|---|
hasFieldData | boolean | Whether Chrome had enough traffic to report. See the note below. |
level | string | null | "url" if the exact URL had data, "origin" if it fell back to the whole site. |
latest | object | The most recent weekly point. |
points[] | array | Roughly 26 weekly points covering six months, oldest first. |
lcp / inp / fcp / ttfb | number | 75th-percentile values in milliseconds. |
cls | number | 75th-percentile Cumulative Layout Shift (unitless). |
lcpCat / inpCat / clsCat | string | good, ni (needs improvement) or poor. |
Not enough traffic is not an error. When both the URL and its origin have too little Chrome traffic, the call still returns 200 with hasFieldData: false, points: [] and an explanatory note.
Errors
| Status | When |
|---|---|
401 | Missing or invalid API key. |
403 | The URL is a private, loopback or cloud-metadata address and was blocked by SSRF protection. |
429 | Burst rate limit (60 req/10s per IP, 30 req/10s per key) or your daily quota. See Rate limits. |
502 | The Chrome UX Report could not be read. |
503 | { "error": "Field data is unavailable on this server" } — the Chrome UX Report API is not configured. This check runs before authentication. |
Errors return { "error": "…" }; see Errors.