# Mangools Alternative — KWFinder, SERPChecker & LinkMiner (`khadinakbar/mangools-alternative`) Actor

Return Mangools-style SEO reports: KWFinder keyword metrics, related keywords, SERPChecker results, SiteProfiler domain stats, and LinkMiner backlinks. No Mangools login. Charged $0.01/row plus $0.04/API request.

- **URL**: https://apify.com/khadinakbar/mangools-alternative.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** SEO tools, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 seo records

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Mangools Alternative — KWFinder, SERPChecker & LinkMiner

Freelance SEOs and AI agents get Mangools-style dataset records from a seed keyword or domain: KWFinder metrics, related keywords, SERPChecker results, SiteProfiler domain stats, and LinkMiner backlinks. Built for structured keyword and SERP research on Apify with API, schedule, and MCP access. Owner credentials are already configured for Store runs.

### Best fit for this Actor

- Score a seed phrase with search volume, CPC, competition, and keyword difficulty.
- Expand that seed into related keywords, then inspect the live SERP with SERPChecker.
- Pull a SiteProfiler-style domain row or a LinkMiner backlink list for the same research pass.

When you already have a finished keyword list and only need volume plus CPC, start with [Keyword Search Volume API](https://apify.com/khadinakbar/keyword-search-volume-api). For Semrush-style ranked keywords a domain already ranks for, continue with [SEMRush Alternative](https://apify.com/khadinakbar/semrush-alternative). After you pick phrases to watch over time, continue with [Keyword Rank Tracker](https://apify.com/khadinakbar/keyword-rank-tracker).

### Practical scenario

An SEO freelancer pastes `seo tools`, keeps `mode` on `kwfinder`, and runs the Actor. The dataset returns one row with `searchVolume`, `cpcUsd`, `keywordDifficulty`, and `searchIntent`. They then switch `mode` to `serp_checker` with `maxResults` 5 to see who ranks and which SERP features appear before writing the brief. Unknown or empty matches finish `SUCCEEDED` with `VALID_EMPTY` and no `seo-record` charge.

### Quick start input

```json
{
  "mode": "kwfinder",
  "keywords": ["seo tools"],
  "locationName": "United States",
  "languageCode": "en",
  "maxResults": 5
}
```

Keyword modes use `keywords`. SiteProfiler and LinkMiner use `target` instead.

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `mode` | enum | `kwfinder`, `related_keywords`, `serp_checker`, `site_profiler`, `link_miner`, or `serp_competitors`. Default `kwfinder`. |
| `keywords` | array | Seed phrases for KWFinder, related keywords, SERPChecker, and SERP competitors. Example: `["seo tools"]`. |
| `target` | string | Domain or URL for SiteProfiler and LinkMiner. Example: `mangools.com`. |
| `locationName` | string | Country name, or city,region,country for SERPChecker. Default United States. |
| `languageCode` | string | Language code such as `en`. Default `en`. |
| `device` | enum | `desktop` or `mobile` for SERPChecker. Default `desktop`. |
| `maxResults` | integer | Row cap 1–100. Default 5. SiteProfiler still writes at most one row. |

Owner API credentials are already configured for Store runs. This Actor does not accept user API keys.

### What data you receive

One dataset item is one keyword, SERP item, domain, competitor, or backlink row.

```json
{
  "mode": "kwfinder",
  "keyword": "seo tools",
  "locationName": "United States",
  "languageCode": "en",
  "searchVolume": 5400,
  "cpcUsd": 6.1,
  "keywordDifficulty": 42,
  "searchIntent": "commercial",
  "source": "mangools_alternative/kwfinder",
  "status": "OK",
  "fetchedAt": "2026-08-22T00:00:00.000Z"
}
```

| Field | Meaning |
|---|---|
| `searchVolume` / `cpcUsd` | Monthly search volume estimate and paid CPC |
| `keywordDifficulty` | Upstream difficulty score, not Mangools KWFinder KD |
| `serpItemType` | SERPChecker item type such as `organic` or `people_also_ask` |
| `rankScore` | Upstream SEO rank score, not a Mangools Citation Flow value |
| `source` | Mode provenance label for the row |

`OUTPUT` and `RUN_SUMMARY` in the default key-value store hold `outcome`, `itemsPushed`, `chargedEventCounts`, and `providerCostUsd`. Download the dataset as JSON, CSV, Excel, or HTML.

### Use through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~mangools-alternative/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"kwfinder","keywords":["seo tools"],"maxResults":5}'
```

### Use with AI agents through Apify MCP

> Run a KWFinder-style keyword overview for "seo tools" in the United States. Return searchVolume, cpcUsd, keywordDifficulty, searchIntent, source, and fetchedAt. Read OUTPUT.outcome and itemsPushed. Treat keywordDifficulty as an independent upstream score.

Connect via <https://mcp.apify.com>. Cost signal: about `$0.05` per successful SEO API request plus `$0.01` per saved row.

### Connect the workflow

- When you already have phrases and only need volume plus CPC, then use [Keyword Search Volume API](https://apify.com/khadinakbar/keyword-search-volume-api).
- For Semrush-style organic keywords a competitor domain ranks for, continue with [SEMRush Alternative](https://apify.com/khadinakbar/semrush-alternative).
- After you choose phrases to monitor, continue with [Keyword Rank Tracker](https://apify.com/khadinakbar/keyword-rank-tracker).
- For broader Google SERP capture after SERPChecker, continue with [Google SERP All-in-One Scraper](https://apify.com/khadinakbar/google-serp-all-in-one-scraper).

### Pricing

This Actor uses Pay per event plus Apify platform usage. The live Pricing tab is the current source of truth for billing details.

- `apify-actor-start`: $0.00005 per run
- `seo-api-request`: **$0.05** per successful upstream SEO API task
- `seo-record`: **$0.012** per persisted row

A KWFinder prefill is one API task plus one row. Empty matches have no `seo-record` charge. Provider cost is recorded in `RUN_SUMMARY.providerCostUsd`.

### How it works

1. Normalize the keyword list or domain for the selected mode.
2. Call the matching upstream SEO API endpoint for that mode.
3. Charge `seo-api-request` after each successful task.
4. Charge `seo-record`, then write each validated dataset row.

### Best results

- Use a real seed such as `seo tools` rather than a Mangools app URL.
- Keep `maxResults` at 5 while you confirm the output shape, then raise it for exports.
- Treat volume, difficulty, and rank as model estimates for public keywords and domains you are authorized to research.
- A valid query with no match finishes `SUCCEEDED` with `VALID_EMPTY`.
- This Actor is a one-shot report. Historical rank watching belongs on Keyword Rank Tracker, not here.

### Builder's note

I found that Mangools Store matches were either unrelated or a historical-backlink checker that still needed Mangools-shaped data. Routing this SKU through owner-managed upstream SEO APIs keeps the KWFinder / SERPChecker / SiteProfiler / LinkMiner jobs without claiming Mangools KD, scraping mangools.com, or asking buyers for API keys. SERPChecker is the mode that the Semrush-named sibling does not advertise.

### Legal and responsible use

Use this Actor with public SEO research you are authorized to run. Metrics are independent of Mangools s.r.o. Follow applicable law and the upstream data provider terms, and keep the output in your own compliance workflow.

Issues and feature requests: use the Actor Issues tab on Apify.

# Actor input Schema

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

Which Mangools-style report to run. kwfinder scores seed phrases with volume, CPC, and difficulty. related\_keywords expands the first seed. serp\_checker returns live SERP items. site\_profiler returns one domain row. link\_miner lists referring URLs. serp\_competitors lists domains ranking for the seeds. Default kwfinder. This is NOT a Mangools login or API key field.

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

Seed phrases for kwfinder, related\_keywords, serp\_checker, or serp\_competitors. Example: \["seo tools"]. Duplicates collapse. Capped by maxResults. related\_keywords and serp\_checker use the first keyword as the seed. Ignored in site\_profiler and link\_miner. This is NOT a domain list.

## `target` (type: `string`):

Website to analyze for site\_profiler or link\_miner. Accepts mangools.com or https://www.mangools.com. Protocol and www are stripped to the hostname except for page-level LinkMiner URLs. Prefill mangools.com. Not a keyword and not a Mangools app URL.

## `locationName` (type: `string`):

Country for keyword and SiteProfiler reports, such as United States. SERPChecker also accepts city,region,country such as Austin,Texas,United States. Defaults to United States. Ignored for LinkMiner.

## `languageCode` (type: `string`):

Language code matching the location, such as en, de, or es. Defaults to en. This is a short code, not a language name like English.

## `device` (type: `string`):

Device used only by serp\_checker. desktop or mobile. Defaults to desktop. Ignored in KWFinder, SiteProfiler, and LinkMiner. This is NOT a browser fingerprint field.

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

Maximum dataset rows to write (1-100). Defaults to 5 so quality tests and agent calls stay cheap. site\_profiler always writes at most one row. Caps keyword lists in kwfinder.

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

When true, SiteProfiler backlink summary includes subdomain data. Defaults to true. Does not crawl the live website.

## Actor input object example

```json
{
  "mode": "kwfinder",
  "keywords": [
    "seo tools"
  ],
  "target": "mangools.com",
  "locationName": "United States",
  "languageCode": "en",
  "device": "desktop",
  "maxResults": 5,
  "includeSubdomains": true
}
```

# Actor output Schema

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

Keyword, SERP, domain, competitor, or backlink rows.

## `summary` (type: `string`):

Compact OUTPUT record with outcome, itemsPushed, charges, and warnings.

## `runSummary` (type: `string`):

Detailed RUN\_SUMMARY including providerCostUsd and request counts.

# 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 = {
    "mode": "kwfinder",
    "keywords": [
        "seo tools"
    ],
    "target": "mangools.com",
    "locationName": "United States",
    "languageCode": "en",
    "device": "desktop",
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/mangools-alternative").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 = {
    "mode": "kwfinder",
    "keywords": ["seo tools"],
    "target": "mangools.com",
    "locationName": "United States",
    "languageCode": "en",
    "device": "desktop",
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/mangools-alternative").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 '{
  "mode": "kwfinder",
  "keywords": [
    "seo tools"
  ],
  "target": "mangools.com",
  "locationName": "United States",
  "languageCode": "en",
  "device": "desktop",
  "maxResults": 5
}' |
apify call khadinakbar/mangools-alternative --silent --output-dataset

```

## MCP server setup

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

```

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/NTW8gTzzsNpUYs3Zf/builds/H5oVTlP80lwGZ6LEo/openapi.json
