# Ahrefs SEO Tools Scraper - $3.00 / 1000 Lookups (`scrapeunblocker/ahrefs-seo-tools-scraper`) Actor

Ahrefs' free SEO tools in bulk, no Ahrefs account: Domain Rating, backlinks with top backlinks, organic traffic and its value, broken links, keyword difficulty, keyword ideas and the Google SERP with DR/UR metrics. Many domains and keywords per run. $3.00 per 1000 lookups.

- **URL**: https://apify.com/scrapeunblocker/ahrefs-seo-tools-scraper.md
- **Developed by:** [Scrapeunblocker](https://apify.com/scrapeunblocker) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

## Ahrefs SEO Tools Scraper

Run **Ahrefs' free SEO tools** in bulk and get their data as clean JSON, without an Ahrefs account or subscription: **Domain Rating**, backlink counts and the top backlinks, **organic traffic** with its USD value, top pages, countries and keywords, **broken links**, **keyword difficulty**, **keyword ideas** with search-volume buckets and the **Google SERP** with DR, UR, backlinks and traffic of every ranking page. Many domains and keywords per run, several tools at once.

### Features

- **Seven tools in one actor** - pick any combination:
  - `authority` (Website Authority Checker): Domain Rating, backlinks, referring domains and their dofollow shares.
  - `backlinks` (Backlink Checker): the same plus the top backlinks with source URL, title, anchor, surrounding text and the linking page's DR.
  - `traffic` (Traffic Checker): monthly organic traffic and its value in USD, traffic history, top pages, top countries and top keywords; narrow it to one country.
  - `broken-links` (Broken Link Checker): broken backlinks pointing at the site and broken outgoing links on its pages.
  - `keyword-difficulty` (Keyword Difficulty Checker): KD 0-100, the referring domains a page needs to rank in the top 10, and the SERP.
  - `keywords` (Keyword Generator): Google keyword ideas and question ideas with difficulty and volume buckets.
  - `serp` (SERP Checker): the top Google results with DR, UR, backlinks, referring domains, traffic, value and keyword counts, plus AI overview, questions, shopping, local and news blocks.
- **Bulk** - every selected domain tool runs for every domain or URL, every keyword tool for every keyword, in parallel.
- **Scope control** - a domain with its subdomains, without them, a URL prefix or one exact URL.
- **Any market** - keyword tools take a country (US by default).

### Use cases

- **Link-building prospecting** - Domain Rating and referring domains of hundreds of sites in one run.
- **Competitor research** - organic traffic, its value and top pages of competitor domains.
- **Keyword research** - difficulty and ideas for a keyword list before writing content.
- **SERP analysis** - how strong the pages ranking for a keyword are.
- **Site maintenance** - broken backlinks worth reclaiming and broken outgoing links to fix.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `tools` | array | `["authority"]` | Tools to run: `authority`, `backlinks`, `traffic`, `broken-links`, `keyword-difficulty`, `keywords`, `serp`. |
| `targets` | array | - | Domains or URLs for the domain tools. |
| `keywords` | array | - | Search phrases for the keyword tools. |
| `mode` | string | `subdomains` | Domain scope: `subdomains`, `domain`, `prefix` or `exact`. |
| `country` | string | - | Keyword tools: search market (empty = `us`). Traffic: one country only (empty = worldwide). |
| `includeQuestions` | boolean | `true` | Keyword ideas: also return question ideas. |
| `protocol` | string | `both` | Traffic only: `both`, `http` or `https`. |
| `concurrency` | integer | `3` | Lookups at the same time (1-5). |

With no domains and no keywords the actor runs the selected tools for the examples `github.com` / `web scraping`.

#### Example input

```json
{
  "tools": ["authority", "traffic", "keyword-difficulty", "serp"],
  "targets": ["stripe.com", "https://www.shopify.com/blog"],
  "keywords": ["web scraping", "best vpn"],
  "country": "us"
}
```

This runs 2 domain tools for 2 targets and 2 keyword tools for 2 keywords: 8 lookups.

### Output

One dataset item per lookup, with the tool, your input and the tool's fields:

```json
{
  "input": "github.com",
  "tool": "authority",
  "query": {"target": "github.com", "mode": "subdomains"},
  "source": "https://ahrefs.com/website-authority-checker",
  "found": true,
  "domainRating": 97.0,
  "backlinks": 4691419106,
  "referringDomains": 2418604,
  "dofollowBacklinksPercent": 91,
  "dofollowReferringDomainsPercent": 95
}
```

Other tools add `topBacklinks` (backlinks), `organicTraffic`, `trafficValueUsd`, `trafficHistory`, `topPages`, `topCountries`, `topKeywords` (traffic), `inbound` / `outbound` (broken links), `difficulty`, `referringDomainsToRank`, `results` (keyword difficulty, SERP), `ideas`, `questionIdeas`, `totalIdeas` (keywords).

The key-value store also holds `ERRORS` - lookups Ahrefs had no data for, or that failed, with the reason. These are **not billed**.

### Pricing

**$3.00 per 1000 lookups.** One lookup is one tool for one domain or keyword. You pay only for lookups that returned data.

### Notes

- The data is what Ahrefs' free tools show signed out: the top 20 backlinks, top 5 pages, countries and keywords, 20 keyword ideas and 20 question ideas per keyword, the top 10 SERP results. For full exports you need an Ahrefs subscription.
- A domain or keyword Ahrefs has no data for is reported in `ERRORS` and not charged.
- This actor is not affiliated with Ahrefs.

# Actor input Schema

## `tools` (type: `array`):

Which Ahrefs free tools to run. Domain tools (Domain Rating, backlinks, traffic, broken links) run for every domain/URL; keyword tools (keyword difficulty, keyword ideas, SERP) for every keyword. Each tool for each input is one lookup.

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

Domains (github.com) or URLs (https://github.com/features) for the domain tools. One per line.

## `keywords` (type: `array`):

Search phrases for the keyword tools, e.g. web scraping, running shoes. One per line.

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

What the domain tools measure for each target.

## `country` (type: `string`):

Two-letter country code (us, gb, de ...). Keyword tools: the search market (empty = us). Traffic: limits the estimate to this country (empty = worldwide). Not used by the other domain tools.

## `includeQuestions` (type: `boolean`):

Keyword ideas: also return question keywords (how, what, why ...).

## `protocol` (type: `string`):

Traffic only: which protocol's pages to count.

## `concurrency` (type: `integer`):

How many lookups to run at the same time (1-5).

## Actor input object example

```json
{
  "tools": [
    "authority"
  ],
  "targets": [
    "github.com"
  ],
  "mode": "subdomains",
  "country": "",
  "includeQuestions": true,
  "protocol": "both",
  "concurrency": 3
}
```

# Actor output Schema

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

One item per lookup with the tool, the input and the tool's data

## `errors` (type: `string`):

Lookups Ahrefs had no data for, or that failed, with the reason (not billed)

# 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 = {
    "tools": [
        "authority"
    ],
    "targets": [
        "github.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeunblocker/ahrefs-seo-tools-scraper").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 = {
    "tools": ["authority"],
    "targets": ["github.com"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeunblocker/ahrefs-seo-tools-scraper").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 '{
  "tools": [
    "authority"
  ],
  "targets": [
    "github.com"
  ]
}' |
apify call scrapeunblocker/ahrefs-seo-tools-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapeunblocker/ahrefs-seo-tools-scraper"
        }
    }
}
```

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/YEfD2e59IItp706At/builds/58oLvk8mHxwbCcTx2/openapi.json
