Try the RankNibbler SEO API

Page signals Beta

GET /api/v1/page-signals

The change-detection fingerprint of a page — store it, compare it later, and know the moment anything that matters changes. This is the exact signal set RankNibbler's own page monitoring stores, so you can run change alerting on your own schedule.

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.

It returns two hashes — an FNV-1a textHash for exact-change detection and a SimHash contentHash for near-duplicate detection — plus the actual lists of internal links, external links and images, so a later comparison can name which ones changed rather than only reporting that a count moved. Static analysis of the served HTML; no browser is involved.

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 fingerprint.
key optionalstringYour API key, if not sent as the X-API-Key header.

Request

Response

200 · application/json
  1. {
  2. "url": "https://example.com", "statusCode": 200,
  3. "title": "Example Domain", "metaDescription": "", "h1": "Example Domain",
  4. "headings": [{ "level": 1, "text": "Example Domain" }],
  5. "canonical": "", "noindex": false, "indexable": true,
  6. "wordCount": 412, "schemaTypes": ["Article"],
  7. "internalLinks": 22, "externalLinks": 9,
  8. "internalLinkList": ["https://example.com/a"],
  9. "externalLinkList": ["https://iana.org/"],
  10. "images": 4, "imageList": ["https://example.com/a.png"],
  11. "ogTitle": "", "ogDescription": "",
  12. "prices": ["£19.99"],
  13. "textHash": "9284117340992384112",
  14. "contentHash": "-3841029384710293847",
  15. "wordsLen": 412
  16. }

Response fields

FieldTypeDescription
textHashstringFNV-1a hash of the visible text — an exact-change detector. A 64-bit value returned as a decimal string.
contentHashstring64-bit SimHash of the visible text — a near-duplicate detector. Compare by Hamming distance. Also returned as a decimal string.
internalLinkList / externalLinkListstring[]The actual link URLs, not just counts.
imageListstring[]The actual image URLs.
pricesstring[]Prices detected in the page text — useful for spotting a pricing change.
schemaTypesstring[]Structured-data types found on the page.

Caps. 500 internal links, 500 external links, 200 images, 100 headings and 60 prices per response. Both hashes are 64-bit values serialised as decimal strings because JSON numbers cannot hold them exactly — compare them as strings, or parse to a big integer.

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 target URL could not be fetched.
503The signal engine is unavailable on this server. This check runs before authentication.

Errors return { "error": "…" }; see Errors.