Backlinks
Get the inbound links pointing to a domain, with optional filters and per-link quality scoring.
/v1/backlinks2 credits (3 credits with score=true)API keyReturns links found on other sites that point to the domain you query. Data comes from the link graph snapshot that RankParse has pre-processed (see Response format for how snapshots and freshness work), so a lookup is a fast read, not a live crawl.
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. |
limit | integer | No | 100 | Number of rows to return. Clamped to 1 to 1000. A non-numeric value falls back to 100. |
sort | string | No | importance | importance or recent. Any other value returns 400 invalid_sort. |
from_domain | string | No | none | Only return links whose linking domain is exactly this domain. |
link_type | string | No | none | Only return links of this type. Lowercased and matched exactly. Stored values are hyperlink, image, script, stylesheet, iframe and other. Allowed characters are a-z, 0-9, _ and - (up to 32). |
score | boolean | No | false | Send score=true to add from_domain_score, anchor_type and link_quality to every row. Costs 3 credits instead of 2. Only the exact value true enables it. |
This endpoint does not support offset. To see more rows, raise limit (up to 1000) or narrow the result with from_domain and link_type.
Example
curl "https://api.rankparse.com/v1/backlinks?domain=stripe.com&limit=5&sort=recent&score=true" \
-H "X-API-Key: rp_your_key"import requests
res = requests.get(
"https://api.rankparse.com/v1/backlinks",
params={"domain": "stripe.com", "limit": 5, "sort": "recent", "score": "true"},
headers={"X-API-Key": "rp_your_key"},
timeout=90,
)
res.raise_for_status()
for link in res.json()["data"]:
print(link["from_domain"], link["anchor_text"], link["link_quality"])const params = new URLSearchParams({
domain: "stripe.com",
limit: "5",
sort: "recent",
score: "true",
});
const res = await fetch(`https://api.rankparse.com/v1/backlinks?${params}`, {
headers: { "X-API-Key": "rp_your_key" },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data } = await res.json();
console.log(data);Response
{
"domain": "stripe.com",
"data": [
{
"from_domain": "techcrunch.com",
"from_url": "https://techcrunch.com/2025/11/04/stripe-launches-new-billing-tools/",
"to_url": "https://stripe.com/billing",
"anchor_text": "Stripe Billing",
"rel": null,
"link_type": "hyperlink",
"crawled_at": "2026-02-10",
"from_domain_score": 91,
"anchor_type": "branded",
"link_quality": "high"
}
],
"total": 1,
"limit": 5,
"credits_used": 3,
"credits_remaining": 997
}Response fields
Top level:
| Field | Type | Description |
|---|---|---|
domain | string | The normalized (lowercased) domain you queried. |
data | array | Backlink rows, described below. Empty when the domain has no data. |
total | integer | Number of rows returned in data. It is not the all-time link count for the domain. |
limit | integer | The limit value you sent, echoed back as received (the query itself is clamped to 1000). |
credits_used | integer | 2, or 3 with score=true. |
credits_remaining | integer | Your balance after this call. |
Each row in data:
| Field | Type | Description |
|---|---|---|
from_domain | string | Domain of the linking page. |
from_url | string | URL of the linking page. |
to_url | string | URL on your domain that is linked to. |
anchor_text | string or null | Anchor text, or null when there is none (images, for example). |
rel | string or null | The link rel attribute, such as nofollow, or null. |
link_type | string | hyperlink, image, script, stylesheet, iframe or other. Aggregated rows use aggregate (see below). |
crawled_at | string | Date the link was crawled. Empty string on aggregated rows. |
domain_host_count | integer | Only present on aggregated rows: the number of links from that referring domain. |
from_domain_score | integer | Only with score=true. Authority score (0 to 100) of the linking domain, 0 when unknown. See Domain Authority. |
anchor_type | string | Only with score=true. One of branded, partial, naked, generic, image. |
link_quality | string | Only with score=true. One of high, medium, low, derived from the linking domain score, anchor type and rel. |
Row shape depends on the data path that serves your request. With sort=importance, a request may be answered with one aggregated row per referring domain (link_type: "aggregate", anchor_text: null, from_url set to the domain home page, and domain_host_count holding the link count) instead of URL-level rows. sort=recent always returns URL-level rows, newest first. Write client code that tolerates both shapes.
Behavior and limits
- Credits: 2 per call, 3 with
score=true. The charge happens before the lookup. If the lookup fails with a server error, the credits are refunded. - Validation first:
invalid_domain,invalid_sort,invalid_from_domainandinvalid_link_typeare returned before any charge. - Scoring: with
score=truethe linking domains in the page of results are scored in a single extra lookup, so the response may take a little longer. - Caching: results are cached for 30 days per crawl release and per combination of
domain,limit,sort,score,from_domainandlink_type. 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. |
| 400 | invalid_sort | sort is not importance or recent. |
| 400 | invalid_from_domain | from_domain is not a valid domain. |
| 400 | invalid_link_type | link_type has disallowed characters or is longer than 32 characters. |
| 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, upstream_error | Transient data store problem. Retry after the Retry-After header. Credits are refunded. |
See Errors for the full list and the error body format.
Related
MCP tool: get_backlinks (accepts domain, limit, score, sort, from_domain, link_type).