# Keyword Research & Backlink API - SE Ranking SEO Data (`nabeelbaghoor/keyword-research-backlinks-seo-api`) Actor

Keyword research and backlink API for SE Ranking: search volume, CPC, keyword difficulty, intent and trends, similar, related and question keywords, domain traffic, ranking keywords, competitors, backlinks, referring domains, anchors and InLink Rank. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/keyword-research-backlinks-seo-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** SEO tools, Developer tools, Marketing
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 domain or backlink report returneds

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

## Keyword Research & Backlink API - SE Ranking SEO Data

Pull keyword search volume, CPC, keyword difficulty, keyword ideas, domain traffic, ranking keywords, competitors and backlinks from the SE Ranking Data API with your own API key, straight into an Apify dataset.

Works with the SE Ranking Data API (api.seranking.com/v1), the same keyword, domain and backlink database behind SE Ranking's Keyword Research, Competitive Research and Backlink Checker tools. The actor turns a list of keywords, domains or URLs into clean, deduplicated rows you can download as JSON, CSV or Excel, schedule, or feed into SEO dashboards, content briefs, link building pipelines, reporting tools and AI agents. Bring your own API key.

BYOK, not live-tested: every route, parameter and field comes from SE Ranking's published Data API documentation, and each route was confirmed to exist with a deliberately invalid key, but the actor has not been run against a live SE Ranking account.

### What it does

- **Keyword metrics in bulk**: search volume, CPC, paid competition, keyword difficulty (0 to 100), search intent (informational, navigational, transactional, commercial, local) and a 12 month search volume trend for your own keyword list, in any of 209 regional databases.
- **Keyword ideas**: similar keywords (same intent), related keywords (overlapping search results, with a relevance score), question keywords and long-tail keywords for each seed keyword, filtered by search volume, difficulty, CPC, competition, word count, intent and SERP features such as AI overviews, featured snippets and people also ask.
- **Domain overview**: organic and paid keyword counts, estimated traffic, traffic value and position changes for a domain or page, in one country or worldwide with an optional country breakdown.
- **Domain ranking keywords**: every keyword a domain or URL ranks for in organic search or Google Ads, with position, previous position, ranking URL, traffic, traffic share and SERP features, filtered by position, position change (new, lost, improved, declined) and keyword metrics.
- **Competitors**: organic or paid competitor domains with common keywords, missing keywords, relevance, traffic and traffic value.
- **Backlinks**: a backlink profile summary (backlinks, referring domains, IPs, subnets, dofollow and nofollow, top anchors, TLDs and countries), the backlinks themselves, referring domains, anchor texts, and page and domain InLink Rank authority scores.
- **Credit aware**: each page asks SE Ranking only for the rows still wanted, so the maximum results setting also caps the Data API credits a run spends.
- **Pay only for results**: refused, empty and no-data lookups are recorded as a free row that says why, never charged.

### How to get an API key

The SE Ranking Data API is sold as annual credit packages (from 12 million credits a year), and trial accounts get API access at 1 request a second. In your SE Ranking account, open the API Dashboard from the API icon in the left menu, click Create API key, name it and copy the key. Paste it into the API key field, or set the `DATA_API_KEY` environment secret. The key is sent only in the documented `Authorization: Token` header. This actor never ships a shared key.

### Input

| Field | Used by | What it does |
| --- | --- | --- |
| `mode` | all | `keywordMetrics`, `similarKeywords`, `relatedKeywords`, `questionKeywords`, `longtailKeywords`, `domainOverview`, `domainWorldwide`, `domainKeywords`, `domainCompetitors`, `backlinkSummary`, `backlinks`, `referringDomains`, `anchors` or `authority` |
| `keywords` | keyword modes | Keywords to measure, or seed keywords for ideas, one per line |
| `domains` | domain modes | Domains (or page URLs for the overview and ranking keyword modes), one per line |
| `targets` | backlink modes | Domains, hosts or page URLs, one per line |
| `source` | keyword modes, domain overview, ranking keywords, competitors | Regional database, such as `us`, `uk` or `de` (default `us`) |
| `keywordSortBy`, `sortOrder` | keyword modes | Sort by search volume, CPC, difficulty, competition or keyword |
| `includeHistoryTrend` | similar, related, question | Add the 12 month search volume trend |
| `minVolume` to `maxWords` | ideas, ranking keywords | Search volume, difficulty, CPC, competition and word count ranges |
| `intents`, `serpFeatures` | ideas, ranking keywords | Search intent and SERP feature filters |
| `searchType` | ranking keywords, competitors | `organic` or `adv` (paid) |
| `includeSubdomains` | domain overviews, ranking keywords | Count subdomains (default on) |
| `rankingSortBy`, `minPosition`, `maxPosition`, `positionChange` | ranking keywords | Sort, position range and position change filter |
| `currency`, `worldwideFields`, `showCountries` | worldwide overview | Traffic value currency, statistics to include, per-country breakdown |
| `backlinkScope` | backlink modes | `host`, `domain` (with subdomains) or `url` |
| `linkSortBy`, `anchorSortBy` | backlinks, referring domains, anchors | Sort order |
| `linkType`, `perDomain`, `minDomainInlinkRank`, `maxDomainInlinkRank`, `anchorContains` | backlinks | Dofollow or nofollow, links per domain, authority range, anchor filter |
| `maxResults` | all | Row ceiling for the run (default 100) |
| `requestsPerMinute` | all | Pacing (default 60; the Data API allows 10 a second) |
| `apiKey` | all | Your SE Ranking Data API key, stored as a secret |

An endpoint only receives the parameters its documentation lists; an input that belongs to another mode is left off with a warning.

Example input, question keywords for two seeds in the US database with an intent and volume filter:

```json
{
    "mode": "questionKeywords",
    "keywords": ["keyword research", "backlinks"],
    "source": "us",
    "intents": ["I"],
    "minVolume": 50,
    "keywordSortBy": "volume",
    "maxResults": 100
}
```

### Example output

A keyword metrics row, abridged. The common columns come first; every field the API returns follows unchanged.

```json
{
    "mode": "keywordMetrics",
    "recordType": "keywordMetrics",
    "identifier": null,
    "source": "us",
    "found": true,
    "keyword": "seo platform",
    "domain": null,
    "url": null,
    "volume": 160,
    "cpc": 3.87,
    "difficulty": 31,
    "position": null,
    "traffic": null,
    "is_data_found": true,
    "competition": 0.06,
    "intents": ["C", "I"],
    "history_trend": { "2025-04-01": 240, "2025-05-01": 300 },
    "note": null
}
```

A domain overview row carries `organicKeywords`, `organicTraffic`, `organicTrafficValue`, `paidKeywords` and `paidTraffic` plus the raw `organic` and `adv` objects; ranking keywords carry `position`, `prev_pos`, `url`, `traffic_percent` and `serp_features`; competitors carry `common_keywords`, `missing_keywords` and `domain_relevance`; backlinks carry `url_from`, `url_to`, `anchor`, `nofollow`, `first_seen` and `last_visited`; referring domains carry `refdomain`, `backlinks` and `domain_inlink_rank`.

### FAQ

#### What is the SE Ranking Data API?

SE Ranking is an SEO platform with its own keyword, SERP and backlink database. Its Data API returns that data directly: keyword research (search volume, CPC, keyword difficulty, intent, trends and keyword ideas), domain analysis (traffic estimates, ranking keywords, paid ads, competitors) and backlinks (summary, backlinks, referring domains, anchors and InLink Rank), billed in API credits.

#### Do I need my own SE Ranking API key?

Yes. The actor calls the API with your own Data API key. A run without one ends straight away with a message that says where to create it, and nothing is charged.

#### How do I get search volume and keyword difficulty for a list of keywords?

Use the keyword metrics mode, put the keywords in `keywords`, one per line, and pick the regional database in `source`. Each keyword becomes one row with search volume, CPC, competition, keyword difficulty, intent and a 12 month trend. Keywords SE Ranking has no data for come back as free rows with `found` set to false.

#### How do I find keyword ideas and questions for a topic?

Use the similar, related, question or long-tail keywords mode with one or more seed keywords. Narrow the ideas with search volume, difficulty, CPC, competition, word count, intent and SERP feature filters, and sort them by volume or difficulty.

#### How do I see which keywords a competitor ranks for?

Use the domain ranking keywords mode with the competitor's domain, organic or paid search type, and optional position, position change and keyword filters. The domain competitors mode lists the domains that compete for the same keywords.

#### How do I check a site's backlinks and domain authority?

Use the backlink summary mode for totals, top anchors and InLink Rank, the backlinks mode for the individual links with filters for dofollow, authority and anchor text, the referring domains and anchor text modes for the link profile, and the authority mode for page and domain InLink Rank (0 to 100).

#### How many SE Ranking credits does a run use?

SE Ranking's unit cost table lists 10 credits per keyword for keyword metrics and for similar, related and question keywords, 1 credit per long-tail keyword, 100 credits per domain overview, competitor list or page of up to 1000 ranking keywords, 100 credits per backlink summary, 1 credit per backlink, referring domain or anchor, and 10 credits per authority lookup. Only successful answers consume credits. The default maximum of 100 results keeps a first run small.

#### What do I pay?

Pay per result: 0.02 USD per domain overview or backlink summary, 0.008 USD per keyword with metrics, ranking keyword or competitor, and 0.005 USD per backlink, referring domain, anchor text, authority score or long-tail keyword. Refused, empty and no-data lookups are never charged. Your SE Ranking credits are billed separately by SE Ranking.

#### What happens if my key is wrong or my credits run out?

A rejected key (HTTP 401), an expired licence (HTTP 403) or an empty credit balance ("Insufficient funds") ends the run cleanly with a status message that explains what to change. Rate limits (HTTP 429) are waited out and retried. A keyword, domain or filter the API refuses, or a very large site the API does not serve (HTTP 244), becomes a free row with the API's own words, and the run moves on.

### Pricing

| Event | Price | Charged for |
| --- | --- | --- |
| `domain-report` | 0.02 USD | Each domain overview or backlink summary |
| `keyword-record` | 0.008 USD | Each keyword with metrics, ranking keyword or competitor |
| `basic-record` | 0.005 USD | Each backlink, referring domain, anchor text, authority score or long-tail keyword |

### Keyword map

keyword research API, search volume API, keyword difficulty API, CPC data, keyword ideas, question keywords, long-tail keywords, SEO API, backlink API, backlink checker API, referring domains, anchor text, domain authority, InLink Rank, domain traffic estimate, competitor keywords, keyword gap, SERP features, AI overview keywords, SE Ranking API.

### Terms and data use

Use of the SE Ranking Data API is governed by SE Ranking's Terms of Service. SE Ranking's usage guidelines allow commercial use of the data subject to those terms, but a direct competitor of SE Ranking must get SE Ranking's explicit consent before accessing, using or distributing the data. Run this actor with your own key and check your plan's terms before redistributing results. This actor is not affiliated with or endorsed by SE Ranking.

# Actor input Schema

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

Keyword modes read SE Ranking's keyword database for a regional database: metrics for your own keyword list (search volume, CPC, competition, keyword difficulty, intent, 12 month trend), or similar, related, question and long-tail keyword ideas for each seed keyword. Domain modes read a domain's organic and paid traffic overview in one country or worldwide, the keywords it ranks for, and its competitors. Backlink modes read a target's backlink summary, backlinks, referring domains, anchor texts and InLink Rank authority.

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

Keyword modes only. One keyword per line. Keyword metrics reads every keyword in the list (up to the maximum results); the idea modes use each line as a seed keyword.

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

Domain modes only. Domains such as seranking.com, one per line. The overview and ranking keyword modes also take a full page URL such as https://seranking.com/api.html.

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

Backlink modes only. A domain, a host such as blog.example.com, or a full page URL, one per line.

## `source` (type: `string`):

Keyword modes and the domain overview, ranking keyword and competitor modes. The country keyword database SE Ranking reads (search volume, CPC and rankings are per country).

## `keywordSortBy` (type: `string`):

Keyword metrics and the similar, related and question modes. Provider default sorts keyword metrics by CPC.

## `sortOrder` (type: `string`):

Keyword metrics, the similar, related and question modes, and domain ranking keywords.

## `includeHistoryTrend` (type: `boolean`):

Similar, related and question modes only. Adds the 12 month search volume history to each keyword. Keyword metrics always includes it.

## `minVolume` (type: `integer`):

Similar, related and question modes, and domain ranking keywords. Only keywords with at least this monthly search volume.

## `maxVolume` (type: `integer`):

Similar, related and question modes, and domain ranking keywords. Only keywords with at most this monthly search volume.

## `minDifficulty` (type: `integer`):

Similar, related and question modes, and domain ranking keywords. Keyword difficulty 0 to 100.

## `maxDifficulty` (type: `integer`):

Similar, related and question modes, and domain ranking keywords. Keyword difficulty 0 to 100.

## `minCpc` (type: `number`):

Similar, related and question modes, and domain ranking keywords. Cost per click, such as 0.5.

## `maxCpc` (type: `number`):

Similar, related and question modes, and domain ranking keywords. Cost per click, such as 3.

## `minCompetition` (type: `number`):

Similar, related and question modes, and domain ranking keywords. Paid search competition from 0 to 1.

## `maxCompetition` (type: `number`):

Similar, related and question modes, and domain ranking keywords. Paid search competition from 0 to 1.

## `minWords` (type: `integer`):

Similar, related and question modes, and domain ranking keywords. Long-tail filter, such as 3.

## `maxWords` (type: `integer`):

Similar, related and question modes, and domain ranking keywords.

## `intents` (type: `array`):

Similar, related and question modes, and domain ranking keywords. Only keywords with any of these intents. Leave empty for all.

## `serpFeatures` (type: `array`):

Similar, related and question modes, and domain ranking keywords. Only keywords whose search results show these features, such as AI overview (sge), featured snippets or people also ask.

## `searchType` (type: `string`):

Domain ranking keywords and competitors. Organic rankings or paid search ads.

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

Domain overview and ranking keyword modes. Counts every subdomain of the domain. Ignored for a page URL.

## `rankingSortBy` (type: `string`):

Domain ranking keywords only.

## `minPosition` (type: `integer`):

Domain ranking keywords only. Only keywords ranking at this position or lower, such as 1.

## `maxPosition` (type: `integer`):

Domain ranking keywords only. Only keywords ranking at this position or better, such as 10 for page one.

## `positionChange` (type: `string`):

Domain ranking keywords only. Keywords by how their position moved since the previous month.

## `currency` (type: `string`):

Worldwide domain overview only. ISO 4217 code for the traffic value, such as USD, EUR or GBP.

## `worldwideFields` (type: `array`):

Worldwide domain overview only. Which statistics to include.

## `showCountries` (type: `boolean`):

Worldwide domain overview only. Adds per-country statistics after the worldwide totals in the organic and adv arrays.

## `backlinkScope` (type: `string`):

Backlink modes except authority. Host reads links to the host as written, domain adds every subdomain, URL reads one exact page.

## `linkSortBy` (type: `string`):

Backlinks and referring domains only.

## `anchorSortBy` (type: `string`):

Anchor texts only.

## `linkType` (type: `string`):

Backlinks only.

## `perDomain` (type: `integer`):

Backlinks only. At most this many backlinks from each referring domain; 1 gives one link per domain.

## `minDomainInlinkRank` (type: `integer`):

Backlinks only. Only links from domains with at least this authority (0 to 100).

## `maxDomainInlinkRank` (type: `integer`):

Backlinks only. Only links from domains with at most this authority (0 to 100).

## `anchorContains` (type: `string`):

Backlinks only. Only links whose anchor text contains this text.

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

The most rows this run returns and charges for. Each page asks SE Ranking only for the rows still wanted, which also caps the Data API credits spent.

## `requestsPerMinute` (type: `integer`):

Pacing. The Data API allows 10 requests a second per key (1 a second on a trial key) and answers 429 above it, which the actor waits out and retries.

## `apiKey` (type: `string`):

Your own SE Ranking Data API key, created on the API Dashboard in your SE Ranking account. Stored as a secret and sent only in the Authorization header; it is never logged. You can instead set the DATA_API_KEY environment secret.

## Actor input object example

```json
{
  "mode": "keywordMetrics",
  "keywords": [
    "seo platform",
    "rank tracker"
  ],
  "source": "us",
  "keywordSortBy": "default",
  "sortOrder": "desc",
  "includeHistoryTrend": false,
  "searchType": "organic",
  "includeSubdomains": true,
  "rankingSortBy": "traffic",
  "positionChange": "any",
  "currency": "USD",
  "worldwideFields": [
    "price",
    "traffic",
    "keywords"
  ],
  "showCountries": false,
  "backlinkScope": "host",
  "linkSortBy": "default",
  "anchorSortBy": "backlinks",
  "linkType": "any",
  "maxResults": 100,
  "requestsPerMinute": 60
}
```

# Actor output Schema

## `records` (type: `string`):

One row per keyword, domain, competitor, backlink, referring domain, anchor or authority score.

# 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 = {
    "keywords": [
        "seo platform",
        "rank tracker"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/keyword-research-backlinks-seo-api").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 = { "keywords": [
        "seo platform",
        "rank tracker",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/keyword-research-backlinks-seo-api").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 '{
  "keywords": [
    "seo platform",
    "rank tracker"
  ]
}' |
apify call nabeelbaghoor/keyword-research-backlinks-seo-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/keyword-research-backlinks-seo-api"
        }
    }
}
```

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/AlNa9rmtoanXreuUX/builds/FiC73UtfqEUqvAM1B/openapi.json
