# Semrush Keyword Overview Scraper (`khadinakbar/semrush-keyword-overview-scraper`) Actor

Score keyword lists with volume, difficulty, CPC, intent, priority scores and observed seasonal peaks. Includes planning-month suggestions and transparent explanations. No Semrush login.

- **URL**: https://apify.com/khadinakbar/semrush-keyword-overview-scraper.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 $9.00 / 1,000 keyword overviews

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

### Semrush Keyword Overview Scraper — Volume, Difficulty, CPC & Intent

Score a known keyword list into one overview row per phrase: monthly search volume, keyword difficulty, CPC, competition, search intent, SERP features, a 12-month trend, transparent keyword prioritization, and observed seasonal insights. SEO planners and AI agents use it when the phrases are already chosen and a scoring table is the next step.

### Best fit and focused standalone workflow

Choose this Actor when you already have a phrase list and need volume, difficulty, CPC, intent, and trend in one run. It is designed as a focused standalone workflow for lists of up to 50 unique phrases, with a predictable Pay per event cost per saved row.

When you need domain rankings, competitors, or backlinks instead, continue with [SEMRush Alternative](https://apify.com/khadinakbar/semrush-alternative). When you only need volume and CPC for a list, start with [Keyword Search Volume API](https://apify.com/khadinakbar/keyword-search-volume-api).

### How this workflow compares with Semrush Keyword Overview

This Actor covers the Keyword Overview lookup for a caller-supplied phrase list: volume, difficulty, CPC, competition, intent, SERP feature names, and monthly trend. Semrush remains the broader suite option for Position Tracking, Site Audit, and a logged-in project workspace.

The same-job comparison is two United States English phrases (`seo tools`, `keyword research`) scored once.

| Decision | This Actor | Semrush Keyword Overview | Best fit |
|---|---|---|---|
| Scope and workflow | One overview row per supplied keyword, up to 50 | Keyword Overview inside a Semrush project, plus the rest of the suite | A known phrase list |
| Billing and same-job cost | Pay per event: $0.10 start plus $0.009 per saved keyword; platform usage included. Two saved rows cost $0.118 | Semrush subscription; consult its current pricing for suite access | Occasional lists versus a full suite seat |
| Effective efficiency | One API or Console call yields an exportable dataset operators can schedule or chain | In-app lookups with suite dashboards and project workflows | Agents and scheduled Apify runs |
| Output and integrations | Dataset, Apify API, schedules, and Apify MCP with `keyword`, `searchVolume`, `keywordDifficulty`, `cpcUsd`, `searchIntent` | In-app Keyword Overview and Semrush exports | Machine-readable rows for automations |
| Broader product | Focused keyword-overview workflow | Full Semrush toolkit | Choose Semrush when the job is the suite |

Semrush is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by Semrush.

### Score a keyword list before a content brief

An SEO lead pastes `seo tools` and `keyword research`, leaves the location on United States and the language on `en`, and runs the Actor. Each saved row shows volume, difficulty, CPC, intent, the yearly trend, explained priority, and observed seasonal peaks. The lead keeps the lower-difficulty phrase for a new page and then passes the higher-CPC phrase to paid search. The dataset exports to JSON or CSV for the brief.

### Quick start input

```json
{
  "keywords": ["seo tools", "keyword research"],
  "locationName": "United States",
  "languageCode": "en",
  "maxKeywords": 10
}
```

`keywords` is the phrase list. `maxKeywords` stops processing at 10 by default and accepts at most 50. Extra phrases beyond the cap are skipped and named in the run warning.

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `keywords` | string list, required | Phrases to score. Duplicates are removed. Example: `seo tools`. |
| `locationName` | string | Market name. Default `United States`. Example: `United Kingdom`. |
| `languageCode` | string | Short code such as `en`, `de`, or `es`. Default `en`. |
| `maxKeywords` | integer | Cap from 1 to 50. Default 10. |

### What data you receive

Each dataset item is one keyword overview. Download the dataset as JSON, CSV, Excel, or HTML.

```json
{
  "keyword": "seo tools",
  "locationName": "United States",
  "languageCode": "en",
  "searchVolume": 12100,
  "keywordDifficulty": 61,
  "cpcUsd": 4.15,
  "competition": 0.82,
  "competitionLevel": "HIGH",
  "searchIntent": "commercial",
  "trendYearly": 8,
  "monthlySearches": [{ "year": 2026, "month": 8, "searchVolume": 12100 }],
  "serpFeatures": ["organic", "people_also_ask"],
  "source": "semrush_keyword_overview",
  "status": "OK",
  "fetchedAt": "2026-09-30T12:00:00.000Z"
}
```

| Field | Meaning |
|---|---|
| `searchVolume` | Average monthly searches. |
| `keywordDifficulty` | Difficulty score from 0 to 100. |
| `cpcUsd` | Cost-per-click in USD. |
| `searchIntent` | Main intent, such as commercial or informational. |
| `monthlySearches` | Up to 12 months of volume. |
| `serpFeatures` | SERP feature names seen for the phrase. |
| `fetchedAt` | ISO-8601 collection time for the row. |

Rows are saved when the phrase comes back from the data source. A phrase with no overview is listed under `missingKeywords` in `OUTPUT` and stays outside the keyword-overview charge. A zero-row result finishes `VALID_EMPTY`.

### Use through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~semrush-keyword-overview-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["seo tools"],"locationName":"United States","languageCode":"en","maxKeywords":1}'
```

Read items from the run dataset URL after the Actor finishes successfully, and read `OUTPUT` from the default key-value store. Check `outcome` before treating an empty dataset as a problem: `VALID_EMPTY` and `INVALID_INPUT` are successful runs with no billed keyword rows.

### Use with AI agents through Apify MCP

> Score the keywords "seo tools" and "keyword research" for the United States in English. Return keyword, search volume, keyword difficulty, CPC, search intent, priority.score, priority.reasons, and seasonality. Preserve insufficient-history markers and distinguish observations from forecasts. Keep maxKeywords at 2. After completion, read OUTPUT.outcome for scope and cost readback, then the dataset for provenance fields source and fetchedAt.

Ask the agent to preserve `source` and `fetchedAt`. Send phrases through the input schema only. Client setup for Apify MCP is at <https://mcp.apify.com>.

### Connect the workflow

Pass `keyword` values from this dataset into [Keyword Search Volume API](https://apify.com/khadinakbar/keyword-search-volume-api) when you want a second volume and CPC check. Pass a domain into [SEMRush Alternative](https://apify.com/khadinakbar/semrush-alternative) when the next step is organic keywords or competitors for a site.

### Pricing

**Pay per event, with platform usage included.** Check the [live Pricing tab](https://apify.com/khadinakbar/semrush-keyword-overview-scraper/pricing) for the effective price. No separate data-request fee.

| Event | Price | When charged |
|---|---|---|
| Actor start | $0.10 | Once per started run at the supported 256–512 MB memory range, including empty, invalid and failed started runs |
| Keyword overview | $0.009 | Once per validated saved keyword, including all priority and seasonal analysis |

Examples: 1 saved keyword costs $0.109; 10 cost $0.19; 50 cost $0.55. No-data keywords have no keyword-row fee, but the start fee applies. Spending limits can stop delivery: a $0.25 event cap permits up to 16 saved keywords; a $0.50 cap permits up to 44. Set maxKeywords explicitly above the default 10 when submitting larger lists. Use $0.55 or more to deliver a full 50-row batch.

### Keyword prioritization and seasonal insights

Each row includes `priority.score` (0–100), `priority.band`, component scores, and reasons. The score is a general content-planning heuristic: 40% demand, 40% organic ease and 20% intent. Demand is `min(100, 20 * log10(max(1, searchVolume)))`; ease is `100 - keywordDifficulty`. Commercial and transactional intent score 100, informational 60, navigational 20. Missing intent redistributes its weight equally to demand and ease. Both volume and valid organic difficulty are required; zero volume scores zero. HIGH starts at 70 and MEDIUM at 40. CPC and paid-ad competition are separate metrics and do not stand in for organic difficulty. Scores do not predict your site's rankings or revenue. `OUTPUT.prioritizedKeywords` lists up to five highest-scoring saved rows.

Each row also includes `seasonality`: observed monthly pattern, peak and trough month numbers, peak-to-average ratio, variability, observed period and suggested planning months. Analysis requires twelve distinct consecutive valid calendar months. Incomplete history returns `INSUFFICIENT_HISTORY`; all-zero history returns `NO_DEMAND`. Missing months are never filled with invented zeroes.

A PEAKED pattern requires a peak at least 1.5 times the average and a coefficient of variation at least 0.25. Otherwise variability of at least 0.15 is VARIABLE; lower variability is STEADY. Planning-month suggestions appear only for PEAKED patterns, two calendar months before the observed peak. They are a planning convention, not a forecast. One annual window cannot prove a recurring seasonal cycle. All insights use the returned metrics and add no provider requests or event fees. Original monthly data remains available for your own analysis.

This focused bulk workflow does not include global country breakdowns, related keyword discovery or full organic SERP rows. Other tools can suit those jobs better. Metrics come from an independent search-data source and can differ from Semrush; the Actor does not scrape or reproduce Semrush's proprietary metrics.

### Best results

- Provide the market name the data source expects, such as `United States` or `United Kingdom`, with a matching language code.
- Start with the prefilled two keywords before sending a larger list.
- Confirm keyword difficulty, volume, and intent against `metricsUpdatedAt` and `fetchedAt` as current modeled metrics for that collection.
- Keep the list focused and public phrases you are authorized to research.

### Builder's note

I built this overview SKU so a known phrase list can leave as machine-readable rows without opening a Semrush workspace. Clickstream metrics stay off on purpose: turning them on doubles the upstream request price and adds fields this volume, difficulty, CPC, and intent decision does not need. The row is billed only after a keyword string is present, so a missing phrase stays in `missingKeywords` instead of becoming an empty paid row.

### Responsible use

Use this Actor for keyword research on phrases you are authorized to analyze. It returns public-style search metrics. Follow Semrush's terms if you also use Semrush, and follow the terms of the search data you rely on downstream. Apply applicable laws and site terms for your use case.

# Changelog

This Actor's version history is a separate document: https://apify.com/khadinakbar/semrush-keyword-overview-scraper/changelog.md

# Actor input Schema

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

Phrases to score. Each accepted phrase can become one keyword overview row with search volume, keyword difficulty, CPC, competition, search intent, SERP features, and a 12-month trend. Duplicates are removed. The run stops at maxKeywords (default 10, hard cap 50).

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

Market name for the overview, such as United States, United Kingdom, or Germany. Defaults to United States. Use the full country or city name the SEO data source expects.

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

Short language code for the market, such as en, de, or es. Defaults to en. This is not a language name.

## `maxKeywords` (type: `integer`):

How many unique keywords to score in this run. Defaults to 10. The hard cap is 50 so one run stays inside a predictable cost.

## Actor input object example

```json
{
  "keywords": [
    "seo tools",
    "keyword research"
  ],
  "locationName": "United Kingdom",
  "languageCode": "en",
  "maxKeywords": 10
}
```

# Actor output Schema

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

Dataset items with keyword, searchVolume, keywordDifficulty, cpcUsd, searchIntent, monthlySearches, and serpFeatures.

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

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

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

Detailed RUN_SUMMARY including provider cost, request counts, and timing.

# 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",
        "keyword research"
    ],
    "locationName": "United States",
    "languageCode": "en",
    "maxKeywords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/semrush-keyword-overview-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 = {
    "keywords": [
        "seo tools",
        "keyword research",
    ],
    "locationName": "United States",
    "languageCode": "en",
    "maxKeywords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/semrush-keyword-overview-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 '{
  "keywords": [
    "seo tools",
    "keyword research"
  ],
  "locationName": "United States",
  "languageCode": "en",
  "maxKeywords": 10
}' |
apify call khadinakbar/semrush-keyword-overview-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/semrush-keyword-overview-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/CIeFA5CsvCABi6N1W/builds/qyzFw8FTjpsyDbA8K/openapi.json
