# Backlink Checker, Domain Rank & Link Gap (`precisionlabs/backlink-checker`) Actor

Check backlinks, referring domains and domain rank for any site or page, in bulk. See who links to your competitors but not you (link gap). Each link with source URL, anchor, dofollow, site rank and first/last seen. Ahrefs and Moz alternative on an official API.

- **URL**: https://apify.com/precisionlabs/backlink-checker.md
- **Developed by:** [Precision Labs](https://apify.com/precisionlabs) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 backlinks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Check the backlinks, referring domains and domain rank of any website or page, in bulk, and find sites that link to your competitors but not to you.** Every backlink comes with the linking page, anchor text, dofollow or nofollow, the linking site's rank, and when it was first and last seen. No Ahrefs, Semrush or Moz subscription needed. Built by Precision Labs.

### What it does

Pick one of four modes:

- **Backlinks**: the links pointing at a domain or a single page, from the strongest linking sites down. By default you get the best link from each site, so one site with thousands of links doesn't fill the list.
- **Referring domains**: every site linking to a domain or page, with its own domain rank, how much link value it passes, and how many links it has.
- **Domain overview**: domain rank, backlinks, referring domains and spam score for up to 10,000 domains in one run. Use it to vet link prospects, compare competitors, or check a list of domains before buying them.
- **Link gap**: sites that link to your competitors but not to you, with which competitors they link to. These are your best outreach prospects: they already link to sites like yours.

The data comes from DataForSEO's backlink index, which is updated continuously.

### Who it's for

- **SEOs and link builders** auditing a site's links or building an outreach list.
- **Agencies** reporting on clients and competitors without paying for another seat.
- **Domain investors** checking the link profile of domains before buying.
- **AI agents and automations** (n8n, Make, Zapier, MCP clients) that need backlink data through an API, as clean rows.

### How to use it

1. Choose **What to find**.
2. Enter **Domains or URLs**, such as `example.com` for a whole site or `https://example.com/blog/post` for one page. For a link gap, enter your competitors here and your site under **Your domain**.
3. Click **Start**. Most runs finish in under a minute. Download the results as JSON, CSV or Excel, or get them through the API.

### Pricing

You pay only for data you get, with no subscription, and prices drop on Apify's paid plans. For example, 1,000 backlinks of a domain cost $1.04 (54¢ on the Business plan).

| Event                     | Free   | Starter | Scale   | Business | When                                                                                                                                                                                             |
| ------------------------- | ------ | ------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `backlink-result`         | $0.001 | $0.0009 | $0.0008 | $0.0005  | Each backlink.                                                                                                                                                                                   |
| `referring-domain-result` | $0.001 | $0.0009 | $0.0008 | $0.0005  | Each referring domain, or each site in a link gap.                                                                                                                                               |
| `domain-result`           | $0.001 | $0.0009 | $0.0008 | $0.0005  | Each domain in the overview.                                                                                                                                                                     |
| `data-request`            | $0.04  | $0.04   | $0.04   | $0.04    | One lookup of up to 1,000 rows. Referring domains take two per 1,000 (the list, then each site's rank); the overview takes four per 1,000 domains; a link gap takes one per competitor plus one. |

| Example                                   | Free  | Starter | Scale | Business |
| ----------------------------------------- | ----- | ------- | ----- | -------- |
| 1,000 backlinks of one domain             | $1.04 | $0.94   | $0.84 | $0.54    |
| 1,000 referring domains of one domain     | $1.08 | $0.98   | $0.88 | $0.58    |
| Overview of 100 domains                   | $0.26 | $0.25   | $0.24 | $0.21    |
| Overview of 1,000 domains                 | $1.16 | $1.06   | $0.96 | $0.66    |
| Link gap against 3 competitors, 500 sites | $0.66 | $0.61   | $0.56 | $0.41    |

**Never charged:** entries that aren't domains or URLs, entries the data provider rejects (such as an unknown domain ending; the rest of the list is still checked), and overview entries DataForSEO has no record of. A backlinks or referring-domains lookup that finds nothing costs only its request fee. In the overview, a domain with no links is still a result (rank 0, no backlinks) and is charged like any other. **No request fee** when you repeat a lookup (same target and settings) within the same week: the results come from your own Apify storage. Set **Maximum cost per run** and the Actor never fetches more than that budget can pay for.

### Input

| Field                               | What it does                                                                                    |
| ----------------------------------- | ----------------------------------------------------------------------------------------------- |
| **What to find**                    | Backlinks, referring domains, domain overview, or link gap.                                     |
| **Domains or URLs**                 | What to look up, one per line. In link gap mode, the competitors to compare with (up to 20).    |
| **Your domain**                     | Link gap only: the site to find missing links for.                                              |
| **Max results per target**          | Backlinks or referring domains per target, up to 20,000. For a link gap, in total, up to 1,000. |
| **One backlink per linking site**   | Backlinks only. On by default.                                                                  |
| **Dofollow links only**             | Backlinks only. Off by default.                                                                 |
| **Include lost links**              | Also return links that have since been removed. Off by default.                                 |
| **Min domain rank of linking site** | Backlinks only: skip links from sites weaker than this (0–100).                                 |

Example input for a link gap through the API:

```json
{
    "mode": "gap",
    "yourDomain": "budgetbytes.com",
    "targets": ["seriouseats.com", "thekitchn.com"],
    "maxResults": 500
}
```

### Output

Each row has a `type`: `backlink`, `referring-domain`, `overview`, `gap`, or `error`. A backlink (real data, October 2026):

```json
{
    "type": "backlink",
    "target": "backlinko.com",
    "sourceUrl": "https://cloud.google.com/transform/transforming-seo-with-ai-marketing-botify",
    "sourceDomain": "cloud.google.com",
    "sourceTitle": "Transforming SEO with AI, Botify makes discovery magic | Google Cloud Blog",
    "sourceDomainRank": 100,
    "sourcePageRank": 0,
    "sourceCountry": "US",
    "targetUrl": "https://backlinko.com/google-ctr-stats",
    "anchor": "according to Backlinko",
    "dofollow": true,
    "linkType": "anchor",
    "spamScore": 0,
    "isNew": false,
    "isLost": false,
    "isBroken": false,
    "firstSeen": "2023-11-03T12:58:36.000Z",
    "lastSeen": "2026-10-16T18:22:28.000Z",
    "fetchedAt": "2026-10-26T12:00:00.000Z"
}
```

A referring domain:

```json
{
    "type": "referring-domain",
    "target": "backlinko.com",
    "domain": "seoquake.com",
    "domainRank": 67,
    "linkStrength": 66,
    "backlinks": 129,
    "spamScore": 0,
    "firstSeen": "2019-01-18T12:35:55.000Z",
    "lostDate": null,
    "fetchedAt": "2026-10-26T12:00:00.000Z"
}
```

A domain in the overview:

```json
{
    "type": "overview",
    "target": "backlinko.com",
    "domainRank": 70,
    "backlinks": 337051,
    "referringDomains": 61523,
    "referringMainDomains": 57599,
    "nofollowReferringDomains": 10158,
    "spamScore": 2,
    "fetchedAt": "2026-10-26T12:00:00.000Z"
}
```

A link gap row (a site that links to The Kitchn but not to Budget Bytes):

```json
{
    "type": "gap",
    "yourDomain": "budgetbytes.com",
    "domain": "whatfinger.com",
    "domainRank": 73,
    "spamScore": 0,
    "competitorCount": 1,
    "competitors": [
        {
            "domain": "thekitchn.com",
            "backlinks": 266,
            "linkStrength": 51,
            "firstSeen": "2025-10-09T23:24:47.000Z"
        }
    ],
    "fetchedAt": "2026-10-26T12:00:00.000Z"
}
```

The dataset has a view for each mode, so the table shows the right columns.

### FAQ

#### Where does the data come from?

From DataForSEO's backlink index, through the DataForSEO API. This Actor isn't affiliated with, or endorsed by, DataForSEO, Ahrefs, Semrush, Moz, or any site named in the examples. Those examples are real output for public websites, used only to show what the data looks like.

#### What is domain rank?

A 0–100 score of how strong a site is, from the links pointing at it, computed the way Google's original PageRank was. It plays the same role as Ahrefs' Domain Rating or Moz's Domain Authority, but it's DataForSEO's own score, so the numbers differ from theirs. Use it to compare sites with each other.

#### What's the difference between domain rank and link strength?

**Domain rank** is how strong the linking site is overall. **Link strength** is how much of that value it passes to your target, which depends on how and where it links. A strong site with one footer link can pass less than a weaker site that links from many relevant pages.

#### Why does a backlink list include links from sites I've never heard of?

Every site that links to you is in the index, including scrapers, directories and spam. Turn on **Dofollow links only**, raise **Min domain rank of linking site**, or sort by spam score.

#### How do I find the best link building prospects?

Run a **link gap** against 3–5 competitors in your niche. Sites that link to several of your competitors come first: they cover your topic and already link to sites like yours.

#### Do I need an Ahrefs, Semrush, Moz or DataForSEO account?

No. You only need an Apify account.

#### Why is there a new storage in my account?

The Actor keeps this week's lookups in a key-value store called `precisionlabs-backlink-checker-cache` in your own account, so repeating a lookup skips the request fee. You can delete it at any time.

#### Something looks wrong?

Open an issue on the **Issues** tab with the target and settings, and we'll look into it.

### More from Precision Labs

- [Competitor Keywords, Ranked Keywords & Keyword Gap](https://apify.com/precisionlabs/competitor-keywords): the Google keywords any domain ranks for, its organic competitors, and your keyword gap.
- [Keyword Search Volume & CPC](https://apify.com/precisionlabs/keyword-search-volume): Google Keyword Planner search volume, CPC and trends for up to 100,000 keywords per run.
- [Poland Company Check](https://apify.com/precisionlabs/poland-company-check): check Polish companies by NIP, KRS or REGON, with the VAT whitelist.

# Actor input Schema

## `mode` (type: `string`):

<b>Backlinks</b>: the links pointing at each domain or page, with source URL, anchor text and dofollow. <b>Referring domains</b>: the sites linking to it. <b>Domain overview</b>: domain rank, backlink and referring-domain counts and spam score for up to 10,000 domains. <b>Link gap</b>: sites that link to your competitors but not to <b>Your domain</b>.

## `targets` (type: `array`):

One per line, such as <code>example.com</code> for a whole site or <code>https://example.com/blog/post</code> for one page. For <b>Link gap</b>, these are the competitors to compare with (up to 20).

## `yourDomain` (type: `string`):

The site to find missing links for, such as <code>example.com</code>. Only used in <b>Link gap</b> mode.

## `maxResults` (type: `integer`):

For <b>Backlinks</b> and <b>Referring domains</b>, the most rows per domain or page. For <b>Link gap</b>, the most missing referring domains in total (up to 1,000). Not used by the overview.

## `onePerDomain` (type: `boolean`):

On: the strongest link from each linking site, so one site with thousands of links doesn't fill the list. Off: every backlink. <b>Backlinks</b> only.

## `dofollowOnly` (type: `boolean`):

Leave out nofollow links, which pass little SEO value. <b>Backlinks</b> only.

## `includeLost` (type: `boolean`):

Off: only links that are live now. On: also links that have since been removed.

## `minDomainRank` (type: `integer`):

Only links from sites at least this strong. Domain rank runs from 0 to 100, like Ahrefs' Domain Rating or Moz's Domain Authority, but is DataForSEO's own score. <b>Backlinks</b> only.

## Actor input object example

```json
{
  "mode": "backlinks",
  "targets": [
    "backlinko.com"
  ],
  "yourDomain": "",
  "maxResults": 20,
  "onePerDomain": true,
  "dofollowOnly": false,
  "includeLost": false,
  "minDomainRank": 0
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "targets": [
        "backlinko.com"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("precisionlabs/backlink-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "targets": ["backlinko.com"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("precisionlabs/backlink-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "targets": [
    "backlinko.com"
  ],
  "maxResults": 20
}' |
apify call precisionlabs/backlink-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precisionlabs/backlink-checker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CKr5rAnyMSx7lau3e/builds/taaHwMl3RCl4NINt8/openapi.json
