Top Pages
Get the pages on a domain that attract the most inbound links.
/v1/top-pages2 creditsAPI keyReturns the pages on a domain (including its subdomains) ranked by number of inbound links, with the number of distinct linking domains and the page's HTTP status and content type where known. Use it to find the content that earns links. Data comes from the pre-processed link graph snapshot (see Response format).
Request
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | Yes | none | Domain to query, for example stripe.com. No scheme or path. Must contain a dot. Subdomains are included. |
limit | integer | No | 100 | Number of pages to return. Clamped to 1 to 1000. A non-numeric value falls back to 100. |
This endpoint does not support offset. Results are ranked after all matching pages are aggregated, so a smaller limit does not necessarily make a large-domain query faster.
Example
curl "https://api.rankparse.com/v1/top-pages?domain=stripe.com&limit=25" \
-H "X-API-Key: rp_your_key"import requests
res = requests.get(
"https://api.rankparse.com/v1/top-pages",
params={"domain": "stripe.com", "limit": 25},
headers={"X-API-Key": "rp_your_key"},
timeout=90,
)
res.raise_for_status()
body = res.json()
if body.get("partial"):
print("Partial result: treat as a preview")
for page in body["data"]:
print(page["inbound_links"], page["referring_domains"], page["url"])const params = new URLSearchParams({ domain: "stripe.com", limit: "25" });
const res = await fetch(`https://api.rankparse.com/v1/top-pages?${params}`, {
headers: { "X-API-Key": "rp_your_key" },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body = await res.json();
console.log(body.data, body.partial ?? false);Response
{
"domain": "stripe.com",
"data": [
{
"url": "https://stripe.com/",
"inbound_links": 5678,
"referring_domains": 1234,
"status_code": 200,
"mime": "text/html"
},
{
"url": "https://stripe.com/docs",
"inbound_links": 2210,
"referring_domains": 640,
"status_code": 200,
"mime": "text/html"
}
],
"total": 2,
"limit": 25,
"credits_used": 2,
"credits_remaining": 996
}Response fields
Top level:
| Field | Type | Description |
|---|---|---|
domain | string | The normalized (lowercased) domain you queried. |
data | array | Pages sorted by inbound_links descending, then URL. Empty when the domain has no data. |
total | integer | Number of rows returned in data. |
limit | integer | The limit value you sent, echoed back as received. |
partial | boolean | Only present, and always true, when the result is incomplete (see below). |
credits_used | integer | Always 2. |
credits_remaining | integer | Your balance after this call. |
Each row in data:
| Field | Type | Description |
|---|---|---|
url | string | Absolute URL of the page. |
inbound_links | integer | Number of links pointing to this page. |
referring_domains | integer | Number of distinct domains linking to this page. |
status_code | integer or null | HTTP status recorded for the page, or null when unknown. |
mime | string or null | Content type recorded for the page, or null when unknown. |
Behavior and limits
Large domains and partial results
For domains with very large link graphs the query can exceed its time budget and fail with 503 and code: "query_timeout". One retry may succeed. If the same domain keeps timing out, try a narrower subdomain, because the endpoint may not currently support the full domain. Failed requests are refunded.
If the aggregating query fails but a simpler fallback completes, the response includes partial: true. That result is incomplete because duplicate page URLs are not merged, so treat it as a preview rather than a full ranking. Partial responses are billed normally but are not cached.
Other behavior
- Credits: 2 per call, charged before the lookup. Server errors are refunded.
- Caching: complete results are cached for 30 days per crawl release and per combination of
domainandlimit. A cache hit is billed the same as a fresh lookup. - Empty results: a domain with no data returns
200withdata: [], never404. - Rate limit: 60 requests per minute per key. See Rate limiting.
Errors
| HTTP | Code | When |
|---|---|---|
| 400 | invalid_domain | domain is missing or not a valid domain. |
| 401 | invalid_api_key | Missing, invalid or revoked API key. |
| 402 | insufficient_credits | Balance is lower than the call cost. |
| 402 | spend_cap_reached | Your monthly spend cap is reached. |
| 429 | rate_limited | More than 60 requests in a minute. |
| 503 | query_timeout | The query exceeded its time budget. Retry once, then try a subdomain. Includes retry: true. |
| 503 | upstream_error | Transient data store problem. Retry after the Retry-After header. |
See Errors for the full list and the error body format.
Related
MCP tool: get_top_pages (accepts domain, limit).