# Bulk Domain Authority & Backlink Checker (Ahrefs Alternative) (`jesting_grass/bulk-domain-authority-checker`) Actor

Check domain authority and backlinks for thousands of domains: domain rank 0-100, referring domains, backlinks, dofollow/nofollow and 30-day changes. Cheap Ahrefs / Moz / Semrush alternative for link building and SEO audits. Pay per domain.

- **URL**: https://apify.com/jesting\_grass/bulk-domain-authority-checker.md
- **Developed by:** [A J](https://apify.com/jesting_grass) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 domain checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Bulk Domain Authority & Backlink Checker (Ahrefs Alternative)

**Check domain authority and backlinks for hundreds or thousands of domains at once.** For every domain you get a **domain rank (0–100)**, **referring domains**, **total backlinks**, **dofollow vs nofollow** links and their **30-day changes** — as a table, CSV, Excel or JSON.

A pay-per-domain alternative to Ahrefs, Semrush and Moz for link building, SEO audits and prospect qualification. No subscription, no seat limits, no browser extension.

### What you get per domain

| Field | Description |
|---|---|
| `domainRank` | Authority score from 0 to 100 based on the domain's backlink profile (Serpstat Domain Rank — similar in spirit to Moz DA or Ahrefs DR, not identical) |
| `referringDomains` | Unique websites linking to the domain |
| `backlinks` | Total backlinks |
| `dofollowBacklinks` / `nofollowBacklinks` / `dofollowRatio` | Link quality split |
| `referringIps`, `referringSubnets` | Diversity of linking sites |
| `backlinksFromHomepages`, `textBacklinks`, `imageBacklinks`, `redirectBacklinks` | Link types |
| `outboundDomains`, `outboundLinks` | Who the domain links out to |
| `maliciousReferringDomains` | Referring domains flagged as malicious (toxic-link signal) |
| `referringDomainsChange`, `backlinksChange`, `dofollowBacklinksChange` | Change over roughly the last 30 days |

### Why this Actor

- 📋 **Bulk** — paste thousands of domains or URLs; `https://`, `www.` and paths are cleaned up and duplicates removed.
- 🎯 **Filter by authority** — `minDomainRank: 40` returns only strong domains for link-building outreach lists.
- 💸 **Pay only for results** — one price per domain with data; invalid domains and domains with no backlink data are free.
- ⚡ **Fast & reliable** — reads from a commercial backlink index, no scraping of Ahrefs or Semrush, no logins or cookies.
- 🤖 **Automation & agents** — Python, JavaScript, n8n, Make, Zapier, or as a tool for AI agents through the Apify MCP server.

### Use cases

- **Link building** — qualify guest-post and outreach prospects by authority before you email them
- **SEO audits** — benchmark a client against competitors in one run
- **Domain investing & expired domains** — screen domain lists by referring domains and dofollow ratio
- **Agencies & lead gen** — enrich a list of websites with authority metrics
- **Monitoring** — schedule weekly runs and track referring-domain changes

### Input

```json
{
  "domains": ["allbirds.com", "gymshark.com", "dev.to"],
  "minDomainRank": 30,
  "includeSubdomains": true,
  "includeChanges": true
}
```

### Output example (real, September 2026)

```json
{
  "domain": "dev.to",
  "domainRank": 70,
  "referringDomains": 46486,
  "backlinks": 1167777,
  "dofollowBacklinks": 878528,
  "nofollowBacklinks": 289249,
  "dofollowRatio": 0.752,
  "referringDomainsChange": -108
}
```

| domain | domainRank | referringDomains | backlinks | dofollowRatio |
|---|---|---|---|---|
| dev.to | 70 | 46,486 | 1,167,777 | 0.75 |
| allbirds.com | 57 | 7,391 | 30,318 | 0.90 |
| gymshark.com | 56 | 5,540 | 178,435 | 0.96 |

### Use it from code

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("jesting_grass/bulk-domain-authority-checker").call(run_input={
    "domains": ["allbirds.com", "gymshark.com", "dev.to"],
    "minDomainRank": 30,
})
for row in client.dataset(run.default_dataset_id).iterate_items():
    print(row["domain"], row.get("domainRank"), row.get("referringDomains"))
```

More examples (CSV export, link-building filter, Node.js, cURL): **[github.com/emiohr/bulk-domain-authority-checker](https://github.com/emiohr/bulk-domain-authority-checker)** · Tutorial: [Check domain authority for 1,000 sites at once with Python](https://dev.to/jesting_grass/check-domain-authority-for-1000-sites-at-once-with-python-a-pay-per-use-ahrefs-alternative-570i)

### Pricing

Pay per domain checked — see the **Pricing** tab. No subscription. Domains without backlink data and invalid inputs are free. With `minDomainRank`, every checked domain is billed, whether or not it passes the filter.

### More SEO tools from the same developer

- [Backlink Checker](https://apify.com/jesting_grass/backlink-checker) — every backlink, referring domains and competitor link gap
- [Google Trends Scraper & API](https://apify.com/jesting_grass/google-trends-api) — interest over time, rising queries and regions
- [Keyword Research Tool](https://apify.com/jesting_grass/keyword-research-tool) — search volume, difficulty, intent, AI Overviews and keyword ideas
- [Tech Stack Detector](https://apify.com/jesting_grass/tech-stack-detector) — CMS, ecommerce, analytics and payments behind any website

### FAQ

**Is domain rank the same as Moz DA or Ahrefs DR?** No — every vendor computes authority from its own backlink index, so numbers differ between tools. Domain rank here is Serpstat's 0–100 score. Use it consistently to compare domains against each other.

**How fresh is the data?** It comes from a continuously updated commercial backlink index; the 30-day change fields show recent movement.

**Can I get the individual backlinks?** This Actor returns aggregate metrics per domain. Individual backlink lists may come as an add-on — ask in the Issues tab.

*Not affiliated with Ahrefs, Semrush or Moz; names are used for comparison only.*

# Actor input Schema

## `domains` (type: `array`):

Domains or URLs to check (e.g. example.com or https://www.example.com/page). Duplicates removed. One billed check per domain with backlink data.

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

Optional. Only output domains with a domain rank at or above this value (0-100) — handy for link-building prospect lists. Every checked domain is billed.

## `includeSubdomains` (type: `boolean`):

Count backlinks to all subdomains (blog.example.com, shop.example.com…), not just the root domain.

## `includeChanges` (type: `boolean`):

Add the recent change in referring domains, backlinks and dofollow backlinks.

## Actor input object example

```json
{
  "domains": [
    "allbirds.com",
    "gymshark.com",
    "dev.to"
  ],
  "includeSubdomains": true,
  "includeChanges": true
}
```

# 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 = {
    "domains": [
        "allbirds.com",
        "gymshark.com",
        "dev.to"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jesting_grass/bulk-domain-authority-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 = { "domains": [
        "allbirds.com",
        "gymshark.com",
        "dev.to",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("jesting_grass/bulk-domain-authority-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 '{
  "domains": [
    "allbirds.com",
    "gymshark.com",
    "dev.to"
  ]
}' |
apify call jesting_grass/bulk-domain-authority-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jesting_grass/bulk-domain-authority-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/J627gvkXyqYjPCbMs/builds/vRfPkLVGDJjonCSHp/openapi.json
