Page signals Beta
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.
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
| Name | Type | Description |
|---|---|---|
url required | string | The page to fingerprint. |
key optional | string | Your API key, if not sent as the X-API-Key header. |
Request
Response
- {
- "url": "https://example.com", "statusCode": 200,
- "title": "Example Domain", "metaDescription": "", "h1": "Example Domain",
- "headings": [{ "level": 1, "text": "Example Domain" }],
- "canonical": "", "noindex": false, "indexable": true,
- "wordCount": 412, "schemaTypes": ["Article"],
- "internalLinks": 22, "externalLinks": 9,
- "internalLinkList": ["https://example.com/a"],
- "externalLinkList": ["https://iana.org/"],
- "images": 4, "imageList": ["https://example.com/a.png"],
- "ogTitle": "", "ogDescription": "",
- "prices": ["£19.99"],
- "textHash": "9284117340992384112",
- "contentHash": "-3841029384710293847",
- "wordsLen": 412
- }
Response fields
| Field | Type | Description |
|---|---|---|
textHash | string | FNV-1a hash of the visible text — an exact-change detector. A 64-bit value returned as a decimal string. |
contentHash | string | 64-bit SimHash of the visible text — a near-duplicate detector. Compare by Hamming distance. Also returned as a decimal string. |
internalLinkList / externalLinkList | string[] | The actual link URLs, not just counts. |
imageList | string[] | The actual image URLs. |
prices | string[] | Prices detected in the page text — useful for spotting a pricing change. |
schemaTypes | string[] | 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
| 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 target URL could not be fetched. |
503 | The signal engine is unavailable on this server. This check runs before authentication. |
Errors return { "error": "…" }; see Errors.