Most backlink tools make you choose between depth and cost: a free "check a few backlinks" widget, or a paid seat that meters usage per row or per export. BacklinkMCP's backlink endpoint skips that tradeoff for the common analysis workflow — auditing one domain's full link profile, or running that same check across a list of competitor or prospect domains — by returning the complete ranked list in one call, at a flat per-lookup price.
Try it
The endpoint
A single GET request returns the full ranked backlink list for one domain:
curl "https://backlinkmcp.com/api/v1/backlinks?domain=stripe.com"
Response shape:
{
"ok": true,
"backlinks": {
"domain": "stripe.com",
"results": [
{ "source": "example.com", "authority": 42.1, "links_out": 118 },
{ "source": "another.org", "authority": 38.7, "links_out": 54 }
],
"ranked_returned": 25
},
"row_cap": 25,
"granularity": { "level": "domain" }
}
Running it in bulk across a domain list
There's no multi-domain batch endpoint today — that would need its own queueing and result-polling design, and we'd rather be honest about that than fake a "bulk upload" button that just loops internally anyway. In practice, looping the same call client-side is the bulk workflow, because each call is cheap, cacheable, and already returns everything for that domain in one shot:
const domains = ["stripe.com", "notion.so", "linear.app"];
const rows = await Promise.all(
domains.map(async (domain) => {
const r = await fetch(
"https://backlinkmcp.com/api/v1/backlinks?domain=" + encodeURIComponent(domain)
);
const { ok, backlinks } = await r.json();
return { domain, count: ok ? backlinks.ranked_returned : 0, ok };
})
);
console.table(rows);
On the free tier that's capped by the 10-lookups/day rate limit shared across all endpoints, so a list of more than a handful of domains needs the Pro plan for unlimited calls. Each call is still one domain's full list, not a fragment of it.
What each row means
source— the linking domain.authority— that linking domain's own editorial-authority score, so you can sort a backlink list by how much each link is actually worth rather than just counting rows.links_out— the linking domain's total outbound link count, a rough signal of whether it's a curated hub or a low-effort link farm.ranked_returned/row_cap— how many rows this call actually returned and the tier limit that capped it, so you know when a domain has more backlinks than you're seeing.
This is domain-level data — referring domains and their scores, not individual linking URLs or anchor text. See the docs for the full field reference.
Rate limits and pricing
10 lookups/day per IP on the free tier (25 backlink rows per call). Unlimited lookups and 100 rows per call on the $19/mo Pro plan. No per-row or per-export charge either way.
Frequently asked questions
Is there a single call that analyzes many domains at once?
Not as one batched request today. Each domain is its own GET call to /api/v1/backlinks, and each of those calls already returns that domain's full backlink list in bulk (up to 100 rows on Pro) rather than one row at a time. For a list of domains, loop the same endpoint — it's cheap and cacheable per domain. See the code sample above.
How many backlinks does one call return?
Up to 25 rows per call on the free tier, up to 100 on Pro, ranked by the linking domain's authority score.
Do I get billed per link like some backlink tools?
No. Pricing is per lookup call — free tier or a flat $19/mo Pro plan for unlimited calls — not per row returned.
What data does each backlink row include?
The linking domain (source), that domain's own authority score, and its outbound link count — domain-level data, not per-URL or anchor-text detail.
Can an AI agent run bulk analysis without integration code?
Yes, via the backlinks_for_domain MCP tool — any MCP-aware agent can call it directly, including in a loop across a domain list, mid-conversation. See the MCP install docs.
For the authority-score side of a domain rather than its backlink list, see the domain metrics API.