# Keyword Research API - Mangools KWFinder, SERP and Backlinks (`nabeelbaghoor/keyword-research-difficulty-serp-api`) Actor

Keyword research with the Mangools API: search volume with monthly history, CPC, keyword difficulty, related keywords, keywords a domain ranks for, competitors, Google SERP with DA, PA, Citation Flow and Trust Flow, backlinks and SiteProfiler domain authority. Bring your own key.

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

## Pricing

from $10.00 / 1,000 keyword difficulty or authority 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 API - Mangools KWFinder, SERP and Backlinks

Pull keyword research, keyword difficulty, Google SERP, backlink and domain authority data from the Mangools API with your own API key, as clean dataset rows.

Works with the Mangools REST API v3 (api.mangools.com/v3), the API behind KWFinder, SERPChecker, LinkMiner and SiteProfiler. The actor turns a list of keywords or domains into deduplicated rows you can download as JSON, CSV or Excel, schedule, or feed into SEO dashboards, content planning, PPC research, link building, Google Sheets, Looker Studio and AI agents. Bring your own API key.

BYOK, not live-tested: every path, parameter and response field comes from Mangools' published OpenAPI specification (api.mangools.com/v3/openapi.json, linked from apidocs.mangools.com), and every route was confirmed to exist, but the actor has not been run against a live Mangools account.

### What it does

- **Related keywords**: keyword ideas for a seed keyword from KWFinder, each with average search volume, 12 month and older monthly search volume history, CPC in USD, PPC competition and cached keyword difficulty, for any country, city or language.
- **Keyword metrics**: the same metrics for your own keyword list, up to 200 keywords per lookup.
- **Keywords a domain ranks for**: up to 1,000 keywords a domain, subdomain or URL ranks for in Google, with volume, CPC and difficulty, in 90 countries.
- **Organic competitor domains**: the domains competing with a site for the same organic keywords.
- **Keyword difficulty and SERP overview**: the Mangools keyword difficulty score (0 to 100), total results, search intent, SERP features, content types, keyword opportunities, click-through rates and the top organic results with their Moz and Majestic metrics, on desktop or mobile.
- **SERP results with SEO metrics**: every organic result (or every SERP feature and ad too) of the Google results page, with position, URL, title, snippet, estimated CTR, Moz Domain Authority and Page Authority, Majestic Citation Flow, Trust Flow, referring domains and backlinks, Mangools authority rank and above the fold visibility, down to city level.
- **Backlinks**: LinkMiner backlinks of a URL, domain or path, with source URL, target, anchor text, link type, nofollow, first and last seen dates and Citation Flow and Trust Flow, all, new or lost, optionally one per referring domain.
- **URL authority metrics**: Moz DA and PA, Majestic Citation Flow, Trust Flow, referring domains and backlinks for any URL.
- **SiteProfiler site overview, backlink profile, top content and competitors**: domain authority, page authority, Citation Flow, Trust Flow, referring IPs and their history; the full Majestic backlink profile with EDU and GOV links, link types, new and lost link calendar, top referring domains and anchor texts; the most linked pages; and competing sites.
- **API quota and limits** and **location ID search**: what is left in each Mangools quota pool, and the location ID of any country, region or city. Both free.
- **Pay only for results**: refused and empty lookups are recorded as a free row that says why, never charged.

### How to get an API key

Register for a free account at mangools.com, then copy your API key from mangools.com/api-token and paste it into the API key field, or set the `DATA_API_KEY` environment secret. The key travels in the `x-access-token` header. This actor never ships a shared key.

#### What a run uses from your Mangools plan

Each paid operation draws from a named Mangools quota pool, the same limits as the Mangools apps: related keywords, keyword metrics and domain keywords use one keyword lookup each; keyword difficulty and SERP results use one SERP lookup each; URL metrics and the site overview use their own daily pools; backlinks take one backlink row per link returned (LinkMiner pages hold up to 500 links, so a page is taken whole). Competitor domains and the SiteProfiler backlink profile, top content and competitors reports are free, but Mangools serves them only after a domain keyword lookup or a site overview of the same URL, which this actor runs first. Identical requests within 24 hours are served from the Mangools cache and do not count again, except keyword imports. Daily pools refill 24 hours after their first counted request; backlink rows reset at the end of the month.

Mangools allows 3 requests per 30 seconds per quota pool, so this actor sends one request at a time and leaves 11 seconds between requests to the same pool, as the docs ask. A run of 50 keywords takes around 9 minutes.

### Input

| Field | Used by | What it does |
| --- | --- | --- |
| `mode` | all | `relatedKeywords`, `keywordMetrics`, `domainKeywords`, `competitorDomains`, `keywordDifficulty`, `serpResults`, `backlinks`, `urlMetrics`, `siteOverview`, `backlinkProfile`, `topContent`, `siteCompetitors`, `quotaLimits` or `locationSearch` |
| `keywords` | keyword modes | Keywords, one per line, such as running shoes |
| `targets` | domain modes | Domains, subdomains or URLs, one per line, such as mangools.com |
| `locationNames` | location ID search | Place names, such as New York |
| `location` | keyword and domain keyword modes | Country as a Google location ID: United States (2840, default), United Kingdom (2826), Germany (2276) and 87 more, or Anywhere (0) |
| `locationId` | same | Any Google location ID, such as a city, overriding the country |
| `language` | related keywords, keyword metrics, keyword difficulty | Google Ads language ID, such as English (1000), or any language (0, default) |
| `platform` | keyword difficulty, SERP results | Desktop (1, default) or mobile (2) |
| `organicOnly` | SERP results | Keep only organic results (default true) |
| `linkSource` | backlinks | All (0, default), new (1) or lost (2) backlinks |
| `oneLinkPerDomain` | backlinks | One backlink per referring domain (default false) |
| `maxResults` | all | Row ceiling for the run (default 100) |
| `apiKey` | all | Your Mangools API key, stored as a secret |

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

Example input, keyword difficulty and the top results for three keywords on mobile in the United Kingdom:

```json
{
    "mode": "keywordDifficulty",
    "keywords": ["seo tools", "keyword research tool", "backlink checker"],
    "location": "2826",
    "language": "1000",
    "platform": "2",
    "maxResults": 10
}
```

### Example output

An illustrative related keyword row, shaped like the documented response. The common columns come first; every field Mangools returns follows unchanged.

```json
{
    "mode": "relatedKeywords",
    "modeLabel": "Related keywords",
    "recordType": "keyword",
    "identifier": "seo tools",
    "found": true,
    "locationId": 2840,
    "keyword": "seo agency",
    "domain": null,
    "url": null,
    "position": null,
    "searchVolume": 930,
    "cpc": 0.813559,
    "ppcCompetition": 15,
    "difficulty": 39,
    "domainAuthority": null,
    "pageAuthority": null,
    "citationFlow": null,
    "trustFlow": null,
    "referringDomains": null,
    "backlinks": null,
    "retrievedAt": "2026-10-14T09:00:00.000Z",
    "note": null,
    "_id": "11e2a4ff072b3f6394dfb602dcea80c3",
    "kw": "seo agency",
    "lid": 2840,
    "sv": 930,
    "svs": 0,
    "ppc": 15,
    "svn": 530,
    "ts": 1617710810,
    "seo": 39,
    "seo_ts": 1590868935,
    "searchVolumeHistory": [{ "month": "2026-08", "volume": 880 }, { "month": "2026-09", "volume": 1000 }]
}
```

SERP result rows add `serpPosition`, `resultType`, `title`, `desc`, `ctr`, `topRank`, `authorityRank`, `screenCoverage`, `visPart`, `totalResults` and the raw `m` metric groups; keyword difficulty rows add `totalResults`, `intents`, `serpFeatures`, `contentTypes`, `keywordOpportunities`, `ctr` and `topResults`; backlink rows add `targetUrl`, `anchorText`, `linkType`, `noFollow`, `first_seen` and `last_seen`; site overview rows add `referringIps`, `topRank`, `facebookEngagement` and the Majestic, Facebook and top rank histories.

### FAQ

#### What is the Mangools API?

Mangools is an SEO toolkit run by CodeCat s.r.o. of Bratislava, Slovakia, best known for KWFinder. Its REST API v3 at api.mangools.com/v3 serves the same keyword research, SERP analysis, backlink and domain data as KWFinder, SERPChecker, LinkMiner and SiteProfiler, with Moz and Majestic link metrics for each URL.

#### Do I need my own Mangools API key?

Yes. The actor calls Mangools with your own key and uses the lookups of your own Mangools plan. A run without a key ends straight away with a message that says where to find it, and nothing is charged.

#### How do I get search volume, CPC and keyword difficulty for a keyword list?

Use the keyword metrics mode and paste your keywords into `keywords`. Each keyword becomes one row with average search volume, monthly search volume history, CPC, PPC competition and the cached Mangools keyword difficulty. Use the keyword difficulty mode for a freshly calculated difficulty score with the SERP behind it.

#### How do I find the keywords a website ranks for?

Use the keywords a domain ranks for mode, put the domain or URL in `targets` and pick the country. Mangools returns up to 1,000 keywords per lookup, as many as your plan's competitor keyword rows allow.

#### Can I see who ranks in Google for a keyword, with their authority?

Yes. The SERP results mode returns each organic result with position, URL, title, snippet, estimated CTR, Moz Domain Authority and Page Authority, Majestic Citation Flow and Trust Flow, referring domains and backlinks, for any country or city and on desktop or mobile.

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

Yes. The backlinks mode lists LinkMiner backlinks with anchors and link metrics; URL authority metrics gives DA, PA, CF and TF for any URL; the SiteProfiler modes give the domain overview, the full backlink profile, the most linked pages and competing sites.

#### How do I find a location ID for a city?

Run the location ID search mode with the place name, such as New York. Each match comes back as a free row with its ID, which you can put in `locationId` for local SERPs and search volumes.

#### What do I pay?

Pay per result: 0.01 USD per keyword difficulty report, URL authority report, site overview or backlink profile, and 0.005 USD per keyword, competitor domain, SERP result, backlink, top page or site competitor row. Refused and empty lookups are never charged, and the quota and location lookups are free. Your Mangools plan is billed separately by Mangools.

#### What happens if my key is wrong or my quota runs out?

A rejected key (401 AuthError) or a spent quota (429 CreditLimit) ends the run cleanly with a status message that explains what to change. The burst limit (429 RateLimit with retry_after) is waited out and retried. A keyword, domain or URL Mangools refuses becomes a free row with the API's own words, and the run moves on.

### Pricing

| Event | Price | Charged for |
| --- | --- | --- |
| `seo-report` | 0.01 USD | Each keyword difficulty report, URL authority report, site overview or backlink profile |
| `seo-row` | 0.005 USD | Each keyword, competitor domain, SERP result, backlink, top page or site competitor |

### Keyword map

Keyword research API, KWFinder API, Mangools API, keyword difficulty API, search volume API, CPC data, related keywords, long-tail keywords, keyword ideas, competitor keywords, ranking keywords, SERP API, SERPChecker, Google SERP checker, SERP features, backlink checker API, LinkMiner, SiteProfiler, domain authority checker, Moz DA PA, Citation Flow, Trust Flow, referring domains, Ahrefs alternative, Semrush alternative.

### Terms and data use

Use of Mangools is governed by the Mangools Terms and Conditions (mangools.com/conditions). They grant a limited, non-transferable licence for your internal business purposes, forbid reselling or redistributing the data or access to it, require you to attribute Mangools in any publication or distribution of data obtained under the licence, and name the API as the only allowed way to get data with automatic tools. Run this actor with your own key, for your own SEO work, keep the results for your own use, and credit Mangools if you publish them. This actor is not affiliated with or endorsed by Mangools.

# Actor input Schema

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

Keyword modes take keywords: related keyword ideas, metrics for your own keyword list, keyword difficulty with the SERP overview, and the full SERP with per-result SEO metrics. Domain modes take domains or URLs: the keywords a site ranks for, its organic competitors, backlinks, URL authority metrics and the SiteProfiler overview, backlink profile, top content and competitors. API quota and limits reads what is left on your Mangools plan, and location ID search finds the ID of a city or region; both are free.

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

Keyword modes only. Search phrases, one per line, such as running shoes. Related keywords, keyword difficulty and SERP results make one lookup per keyword; keyword metrics sends up to 200 keywords per lookup.

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

Domain modes only. Domains, subdomains or URLs, one per line, such as mangools.com or https://mangools.com/blog/. They are sent as written.

## `locationNames` (type: `array`):

Location ID search only. Country, region or city names, one per line, such as New York. Each returns up to 100 matching locations with their IDs.

## `location` (type: `string`):

Keyword modes and the domain keyword modes. The country for search volumes, CPC and SERPs, as a Google geotarget location ID. Anywhere gives global search volumes; SERP lookups read it as the United States.

## `locationId` (type: `integer`):

Optional. Any Google geotarget location ID, such as a city (New York is 1023191) for local SERPs and search volumes. Find IDs with the location ID search mode. Domain keyword modes read a city or region as its country.

## `language` (type: `string`):

Related keywords, keyword metrics and keyword difficulty. The Google Ads language of the keywords, or any language.

## `platform` (type: `string`):

Keyword difficulty and SERP results. Read the desktop or the mobile Google results page.

## `organicOnly` (type: `boolean`):

SERP results only. Keep only the organic results. Turn off to also get ads and SERP features (featured snippet, local pack, people also ask and more) as rows.

## `linkSource` (type: `string`):

Backlinks only. All live backlinks, recently found ones, or recently lost ones.

## `oneLinkPerDomain` (type: `boolean`):

Backlinks only. Return one backlink from each referring domain instead of every backlink, which gives a referring domains list.

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

The most rows this run returns and charges for. Mangools also counts lookups against your plan: one per keyword, domain or keyword batch, and one backlink row per link returned (500 per page).

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

Your own Mangools API key, from mangools.com/api-token. Stored as a secret and sent only in the x-access-token header to api.mangools.com; it is never logged. You can instead set the DATA_API_KEY environment secret.

## Actor input object example

```json
{
  "mode": "relatedKeywords",
  "keywords": [
    "seo tools"
  ],
  "location": "2840",
  "language": "0",
  "platform": "1",
  "organicOnly": true,
  "linkSource": "0",
  "oneLinkPerDomain": false,
  "maxResults": 100
}
```

# Actor output Schema

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

One row per keyword, SERP result, backlink, report, page or competitor.

# 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 tools"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/keyword-research-difficulty-serp-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 tools"] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/keyword-research-difficulty-serp-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 tools"
  ]
}' |
apify call nabeelbaghoor/keyword-research-difficulty-serp-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/keyword-research-difficulty-serp-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/2fD4c5vyvNXEfLeHD/builds/e6koXj7oxwKN4Krwh/openapi.json
