Similar Domains
Find domains whose backlink profile overlaps with a target, useful for competitor discovery.
GET
/v1/similar-domains5 creditsAPI keyFinds sites that tend to be linked from the same places as your target. It samples up to 30 domains that link to the target, looks at where each of those domains links out to, and ranks the destinations by how many of the sampled linkers point at them. Use it to discover competitors and peers you did not know about. 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 find peers for, 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 100 (lower than most endpoints). A non-numeric value falls back to 100. |
This endpoint does not support offset. The maximum you can request is 100 rows.
Example
curl "https://api.rankparse.com/v1/similar-domains?domain=stripe.com&limit=20" \
-H "X-API-Key: rp_your_key"import requests
res = requests.get(
"https://api.rankparse.com/v1/similar-domains",
params={"domain": "stripe.com", "limit": 20},
headers={"X-API-Key": "rp_your_key"},
timeout=60,
)
res.raise_for_status()
body = res.json()
print(f"sampled {body['processed_linkers']} of {body['attempted_linkers']} linkers")
for row in body["data"]:
print(row["similar_domain"], row["shared_linkers"])const params = new URLSearchParams({ domain: "stripe.com", limit: "20" });
const res = await fetch(`https://api.rankparse.com/v1/similar-domains?${params}`, {
headers: { "X-API-Key": "rp_your_key" },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data, partial } = await res.json();
console.log(data, partial);Response
{
"domain": "stripe.com",
"data": [
{ "similar_domain": "square.com", "shared_linkers": 19 },
{ "similar_domain": "paypal.com", "shared_linkers": 17 },
{ "similar_domain": "adyen.com", "shared_linkers": 11 }
],
"total": 3,
"limit": 20,
"credits_used": 5,
"credits_remaining": 995,
"partial": false,
"processed_linkers": 30,
"attempted_linkers": 30,
"budget_ms": 12000
}Response fields
Top level:
| Field | Type | Description |
|---|---|---|
domain | string | The normalized (lowercased) domain you queried. |
data | array | Similar domains sorted by shared_linkers descending. Empty when the domain has no linkers in the data. |
total | integer | Number of rows returned in data. |
limit | integer | The limit value you sent, echoed back as received. |
partial | boolean | true when not every sampled linker was processed in time. Always present. |
processed_linkers | integer | How many of the sampled linking domains were fully processed. |
attempted_linkers | integer | How many linking domains were sampled (at most 30). |
budget_ms | integer | The time budget for the fan-out, in milliseconds. |
credits_used | integer | Always 5. |
credits_remaining | integer | Your balance after this call. |
Each row in data:
| Field | Type | Description |
|---|---|---|
similar_domain | string | A domain that sampled linkers also link to. The target itself is excluded. |
shared_linkers | integer | How many of the sampled linking domains link to this domain. It can never exceed attempted_linkers. |
Behavior and limits
- Sampled, not exhaustive: the analysis is based on at most 30 linking domains, and at most 500 outgoing destinations per linker. Treat
shared_linkersas a relative signal, not a count of all shared linkers. - Partial results: the work fans out across linkers under a time budget. If the budget runs out, you get the results so far with
partial: trueandprocessed_linkerslower thanattempted_linkers. Partial responses are billed normally but are not cached, so retrying later can return a fuller answer. - Credits: 5 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 linkers returns
200withdata: [],partial: falseand zero counters, 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 5 credits. |
| 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_similar_domains (accepts domain; the tool does not expose limit).