RankParse

Similar Domains

Find domains whose backlink profile overlaps with a target, useful for competitor discovery.

GET/v1/similar-domains5 creditsAPI key

Finds 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

ParameterTypeRequiredDefaultDescription
domainstringYesnoneDomain to find peers for, for example stripe.com. No scheme or path. Must contain a dot.
limitintegerNo100Number 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:

FieldTypeDescription
domainstringThe normalized (lowercased) domain you queried.
dataarraySimilar domains sorted by shared_linkers descending. Empty when the domain has no linkers in the data.
totalintegerNumber of rows returned in data.
limitintegerThe limit value you sent, echoed back as received.
partialbooleantrue when not every sampled linker was processed in time. Always present.
processed_linkersintegerHow many of the sampled linking domains were fully processed.
attempted_linkersintegerHow many linking domains were sampled (at most 30).
budget_msintegerThe time budget for the fan-out, in milliseconds.
credits_usedintegerAlways 5.
credits_remainingintegerYour balance after this call.

Each row in data:

FieldTypeDescription
similar_domainstringA domain that sampled linkers also link to. The target itself is excluded.
shared_linkersintegerHow 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_linkers as 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: true and processed_linkers lower than attempted_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 domain and limit. A cache hit is billed the same as a fresh lookup.
  • Empty results: a domain with no linkers returns 200 with data: [], partial: false and zero counters, never 404.
  • Rate limit: 60 requests per minute per key. See Rate limiting.

Errors

HTTPCodeWhen
400invalid_domaindomain is missing or not a valid domain.
401invalid_api_keyMissing, invalid or revoked API key.
402insufficient_creditsBalance is lower than 5 credits.
402spend_cap_reachedYour monthly spend cap is reached.
429rate_limitedMore than 60 requests in a minute.
503query_timeout, upstream_errorTransient data store problem. Retry after the Retry-After header. Credits are refunded.

See Errors for the full list and the error body format.

MCP tool: get_similar_domains (accepts domain; the tool does not expose limit).

On this page