Backlink API: Referring Domains & Backlinks Data avatar

Backlink API: Referring Domains & Backlinks Data

Pricing

from $1.20 / 1,000 backlink or referring domains

Go to Apify Store
Backlink API: Referring Domains & Backlinks Data

Backlink API: Referring Domains & Backlinks Data

Backlink API and MCP tool for AI agents: backlinks, referring domains or anchor texts of any domain or URL as JSON (anchor, dofollow, domain rank, spam score, dates). Referring domains checker for link audits. From $1.20 per 1,000 backlinks (Business; $2 on Starter) + $0.035/target.

Pricing

from $1.20 / 1,000 backlink or referring domains

Rating

0.0

(0)

Developer

PlainRows

PlainRows

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

A backlink API you call with one HTTP request, from your code or from an AI agent: send domains or URLs, get back their backlinks, referring domains or anchor texts as clean JSON (linking URL, anchor, dofollow/nofollow, domain rank, page rank, spam score, first and last seen dates). Also a referring domains checker for link audits, and an MCP tool for Claude, Cursor or any MCP client. Pay per use, no subscription.

It reads a live backlink index through a commercial data API instead of scraping an SEO tool's website: results in seconds, no login, no blocked runs, up to 1,000 targets per run and 10,000 rows per target. You pay per row returned plus a small fee per target looked up (see Pricing).

Same engine, same data and same prices as our Backlink Checker: this page is written for developers and AI agents who call it as an API.

Call it as an API

One call, results returned directly (synchronous: for runs that finish within a few minutes):

curl -X POST "https://api.apify.com/v2/acts/plainrows~backlink-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"targets": ["backlinko.com"], "mode": "referringDomains", "maxResultsPerTarget": 50}'

The response is the JSON array of rows described below.

Longer runs (many targets or rows): start the run with POST https://api.apify.com/v2/acts/plainrows~backlink-api/runs?token=YOUR_APIFY_TOKEN (same JSON body), then read the rows from the run's default dataset (GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items) once it has finished, or use the Apify client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("plainrows/backlink-api").call(run_input={
"targets": ["backlinko.com", "https://ahrefs.com/blog/"],
"mode": "backlinks",
"maxResultsPerTarget": 100,
"dofollowOnly": True,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["target"], row.get("sourceUrl"), row.get("anchor"))

The run summary (targets checked, lookups charged, rows billed, totals per target, warnings) is the OUTPUT record of the run's key-value store.

Use it from AI agents (MCP)

Add https://mcp.apify.com?tools=plainrows/backlink-api to Claude, Cursor or any MCP client. The agent gets a typed tool with the input below (targets, mode, row limit, sort, filters) and gets the rows back as JSON. It pays per lookup and per row, like any other caller, and never more than the maximum cost set for the run.

Typical agent tasks: "list the referring domains of competitor.com sorted by rank", "find the dofollow backlinks of this page", "compare the anchor texts of these three sites".

n8n, Make, Zapier: use the Apify integration, pick plainrows/backlink-api, and send the rows to Google Sheets, Airtable, your CRM or a database.

Typical uses

  • Competitor backlink research: see which sites link to a competitor, with which anchor, and which links pass authority (dofollow).
  • Referring domains check: list the domains that link to a site, with their backlink counts and the rank they pass, strongest first.
  • Link building prospecting and backlink gap: list the referring domains of competing sites, then keep the ones that link to competitors but not to you (free n8n template).
  • Backlink audits: spot spammy, broken, lost or nofollow links pointing to your site.
  • New link monitoring: sort by newest to see links found recently; schedule the run weekly.

What you get

Backlinks mode (one row per link):

FieldDescription
sourceUrl, sourceDomain, sourceTitleThe page that links to your target, its domain and title
targetUrlThe page of your target that is linked
anchor, linkTypeAnchor text; link type (anchor, image, redirect, canonical...)
dofollow, relAttributesWhether the link passes authority; its rel attributes (nofollow, ugc, sponsored...)
sourceDomainRank, sourcePageRankRank of the linking domain and page, 0 to 100
spamScoreSpam score of the backlink, 0 to 100
firstSeen, lastSeenWhen the link was first and last found (ISO 8601, UTC)
isNew, isLost, isBroken, isIndirectNew in the latest crawl update; gone; pointing to a broken page; reaching the target through a redirect
targetStatusCode, sourceLanguage, sourceServerCountry, sourcePlatformTypes, sourcePageExternalLinks, imageUrlExtra context on both pages

Referring domains mode (one row per linking domain):

FieldDescription
referringDomainThe linking domain
rankPassedRank (0 to 100) this domain passes to your target through its links: high means strong links, not necessarily a big site
backlinks, dofollowBacklinks, nofollowBacklinks, referringPagesHow many links (and pages) from that domain point to your target
spamScore, brokenBacklinksSpam score of its links; links to broken pages
firstSeen, lostDate, isLostWhen the domain first linked, and when it stopped

Anchor texts mode (one row per anchor text):

FieldDescription
anchorThe anchor text used in links to your target (null groups the links without text: images, redirects)
backlinks, referringPagesHow many links (and pages) use this anchor
referringDomains, dofollowReferringDomainsHow many domains link with this anchor, and how many of them without nofollow
rankPassed, spamScore, brokenBacklinksRank passed through these links; their spam score; links to broken pages
firstSeen, lostDate, isLostWhen the anchor first appeared, and when it disappeared

Use it to audit an anchor profile (branded vs exact-match vs generic anchors), spot over-optimization or spammy anchors pointing to you, and see which anchors competitors earn.

Summary mode (one row per target: the totals of its backlink profile):

FieldDescription
domainRankRank of the target in the backlink index, 0 to 100
backlinks, dofollowBacklinksTotal backlinks, and those without nofollow
referringDomains, dofollowReferringDomains, referringMainDomainsLinking domains, those with dofollow links, root domains
referringPages, referringIps, referringSubnetsLinking pages, IP addresses and subnets (link diversity)
spamScore, targetSpamScoreSpam score of the backlinks, and of the target itself
brokenBacklinks, brokenPagesLinks to pages that answer with an error, and those pages
topLinkTlds, topLinkCountries, linkTypes, linkPlatformTypesBacklinks by TLD, country, link type and platform of the linking site (top 10 each)
crawledPages, externalLinks, internalLinks, serverCountry, cms, firstSeenContext on the target

Use it to compare the backlink profiles of many domains in one run (your site against competitors, a list of link prospects or of domains to buy).

Every row also has target (what you checked), targetType (domain or url), totalAvailable (how many backlinks or referring domains exist for the target with your filters, before your row limit), found, observedAt and schemaVersion. Missing values are always null, never guessed.

Input

{
"targets": ["backlinko.com", "https://ahrefs.com/blog/"],
"mode": "backlinks",
"maxResultsPerTarget": 100,
"sortBy": "rank",
"dofollowOnly": false,
"onePerDomain": false,
"includeLostLinks": false,
"includeSubdomains": true
}
  • targets: up to 1,000 per run. A domain (example.com) or subdomain covers the whole site; a URL with a path (https://example.com/blog/post) covers that page only. www. and https:// are handled for you.
  • mode: backlinks (one row per link), referringDomains (one row per linking domain), anchors (one row per anchor text, same price per row) or summary (one row per target with the totals of its profile; maxResultsPerTarget and sortBy are ignored).
  • maxResultsPerTarget: 1 to 10,000 (default 100). Big sites have millions of links: you get the first rows in your sort order.
  • sortBy: rank (strongest first, default: linking domain rank in backlinks mode, rank passed in referring domains and anchors modes), newest (most recently found first), or backlinks (referring domains or anchors with the most links first).
  • dofollowOnly: skip nofollow links. onePerDomain: keep one link per linking domain. includeLostLinks: also return links that disappeared. includeSubdomains: count links to the target's subdomains too.

Output example

Real row from a run on 2026-10-07 of the same code (Backlink Checker; target backlinko.com, backlinks mode, default sort by domain rank):

{
"target": "backlinko.com",
"targetType": "domain",
"found": true,
"sourceUrl": "https://apps.apple.com/us/app/seoquake-go/id1184890971",
"sourceDomain": "apps.apple.com",
"sourceTitle": "‎SEOquake Go on the App Store",
"targetUrl": "https://backlinko.com/tools/seo-checker",
"anchor": "App Support",
"linkType": "anchor",
"dofollow": true,
"relAttributes": [],
"sourceDomainRank": 100,
"sourcePageRank": 7,
"spamScore": 20,
"firstSeen": "2019-06-17T23:37:10.000Z",
"lastSeen": "2025-10-06T10:16:44.000Z",
"isNew": false,
"isLost": false,
"isBroken": false,
"isIndirect": true,
"targetStatusCode": 200,
"sourceLanguage": "en",
"sourceServerCountry": "US",
"sourcePlatformTypes": [
"ecommerce"
],
"sourcePageExternalLinks": 30,
"imageUrl": null,
"totalAvailable": 885847,
"observedAt": "2026-10-07T13:15:07.795Z",
"schemaVersion": "1.0"
}

A target with no backlink returns one free row: {"target": "...", "targetType": "domain", "found": false, "totalAvailable": 0, ...}.

Pricing

Pay per use, no subscription. See the Pricing tab for current prices. Two events:

  • Backlink or referring domain returned: one per row in your dataset, cheaper on higher Apify plans.
  • Target looked up: a flat fee per domain or URL checked, because each lookup in the backlink index has a fixed cost. When you ask for more than 1,000 rows for one target, each extra block of 1,000 rows is one more lookup.

Example: 1 target, 1,000 backlinks = 1 lookup ($0.035) + 1,000 rows: $2.04 on the Starter plan, $1.64 on Scale, $1.24 on Business (prices of the Pricing tab on October 15, 2026: $0.002, $0.0016 and $0.0012 per row).

Summary mode: 1 target = 1 lookup + 1 row: $0.037 on the Starter plan ($0.035 + $0.002), so 100 domains compared = $3.70.

A target with no backlink found is charged its lookup fee only (its found: false row is free). Invalid targets, duplicates and lookups that fail are never charged. The run never spends more than the maximum cost you set: it stops before a lookup it could not pay for.

Free Apify plan: each run checks up to 2 targets with up to 20 rows each, so you can check the output. A paid Apify plan removes these limits.

What this is not

  • Not Ahrefs, Semrush or Moz data. Ranks and spam scores come from an independent backlink index (DataForSEO), on their own 0 to 100 scale; they do not match Ahrefs DR or Moz DA exactly, and link counts differ between tools.
  • No traffic or keyword rankings: rows are backlinks, referring domains, anchor texts or backlink profile totals.
  • Not affiliated with Ahrefs, Semrush, Moz or Google.

Run summary

Each run stores a summary in the key-value store (OUTPUT): targets checked, lookups charged, rows billed, targets with no backlinks, total backlinks available per target, duplicates and invalid targets, and anything skipped because of the free-plan or budget limit.

FAQ

Is this the same as Backlink Checker? Yes: Backlink Checker runs exactly the same code, with the same data and prices. Use either one; this page documents the API and MCP use.

How do I check the anchor text profile of a website? Run in anchors mode with sortBy backlinks: one row per anchor text pointing to the site, with how many backlinks and referring domains use it, most used first. Same price per row as backlinks.

How do I see who links to a website? Enter the domain in targets and run in backlinks mode: one row per linking page with anchor text, dofollow flag, ranks and dates. Use referringDomains mode for one row per linking website.

Can I check the backlinks of a single page? Yes: give the full URL with its path (https://example.com/blog/post); a bare domain covers the whole site.

How do I find new or lost backlinks? Sort by newest to see the most recently found links first, and turn on includeLostLinks to also get links that disappeared (isLost: true).

Is this Ahrefs or Moz data? No. Ranks and spam scores come from an independent backlink index (DataForSEO) on their own 0-100 scale, so they do not match Ahrefs DR or Moz DA.

How many backlinks can I get? 1 to 10,000 per target and run (maxResultsPerTarget), strongest first by default.

Can I check backlinks in bulk, for many domains at once? Yes: this is a bulk backlink checker. Put up to 1,000 domains or URLs in targets (one per line) and they are checked in one run, each row tagged with its target. Each target costs one index lookup plus the rows you get (see Pricing), so for a quick overview of many sites use referringDomains mode or onePerDomain with a small maxResultsPerTarget (e.g. 20). To get only the totals of thousands of sites (domain rank, spam score, number of backlinks and referring domains, one row per site, about $0.002 per site on the Starter plan for 1,000 sites instead of one $0.035 lookup per site; prices of its Pricing tab on October 19, 2026), use our Domain Authority Checker. The free Apify plan is limited to 2 targets per run.

More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

Support

Missing a field or found a bug? Open an issue on this page. Issues are read and answered.