Try the RankNibbler SEO API

Core Web Vitals (field data) Beta

GET /api/v1/core-web-vitals

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.

Beta. This endpoint is new: it is live and safe to call on every plan, but its response shape may still change while we take feedback. Nothing here is scheduled for removal — if you depend on a particular field, tell us and we will keep it stable for you.

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.

Depends on an upstream Google service. This endpoint requires the Chrome UX Report API to be enabled on the server's Google key and returns 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

NameTypeDescription
url requiredstringThe page to look up.
device optionalstringmobile (default) or desktop.
key optionalstringYour API key, if not sent as the X-API-Key header.

Request

Response

200 · application/json
  1. {
  2. "url": "https://example.com", "device": "mobile",
  3. "hasFieldData": true, "level": "url",
  4. "latest": { "periodEnd": "2026-08-29", "lcp": 2112, "lcpCat": "good",
  5. "inp": 176, "inpCat": "good", "cls": 0.04, "clsCat": "good",
  6. "fcp": 1408, "ttfb": 612 },
  7. "points": [ /* ~26 weekly points, same shape as "latest" */ ]
  8. }

Response fields

FieldTypeDescription
hasFieldDatabooleanWhether Chrome had enough traffic to report. See the note below.
levelstring | null"url" if the exact URL had data, "origin" if it fell back to the whole site.
latestobjectThe most recent weekly point.
points[]arrayRoughly 26 weekly points covering six months, oldest first.
lcp / inp / fcp / ttfbnumber75th-percentile values in milliseconds.
clsnumber75th-percentile Cumulative Layout Shift (unitless).
lcpCat / inpCat / clsCatstringgood, 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

StatusWhen
401Missing or invalid API key.
403The URL is a private, loopback or cloud-metadata address and was blocked by SSRF protection.
429Burst rate limit (60 req/10s per IP, 30 req/10s per key) or your daily quota. See Rate limits.
502The 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.