Keyword Research API: Search Volume, CPC, Difficulty, Intent avatar

Keyword Research API: Search Volume, CPC, Difficulty, Intent

Pricing

from $1.60 / 1,000 keyword with data

Go to Apify Store
Keyword Research API: Search Volume, CPC, Difficulty, Intent

Keyword Research API: Search Volume, CPC, Difficulty, Intent

Keyword search volume, AI search volume, CPC, difficulty, intent and SERP features for up to 10,000 keywords per run, plus long-tail suggestions, related searches and the keywords of up to 10 competitor sites. Keyword Planner alternative. $2 per 1,000.

Pricing

from $1.60 / 1,000 keyword with data

Rating

0.0

(0)

Developer

Gaël GERARD

Gaël GERARD

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a minute ago

Last modified

Categories

Share

Get keyword search volume in bulk, with the rest of Google's keyword data in the same row: cost per click (CPC), competition, top-of-page bids, keyword difficulty, search intent, a 12-month trend, AI search volume and the SERP features on Google's first page. Paste up to 10,000 keywords per run, grow a few seeds into up to 5,000 keyword ideas, long-tail suggestions or related searches, or enter up to 10 competitor websites and see every keyword they rank for. Works in every country Google Ads serves.

A Google Keyword Planner alternative built for SEO teams, agencies and AI agents: no Google Ads account, no data-provider account, one flat typed row per keyword and a price you can compute in advance. $2 per 1,000 keywords with data, plus $0.01 per run that returns data. Keywords without data are free.

What does Keyword Research API do?

You send keywords and a country. For each keyword you get:

FieldWhat it tells you
search_volumeAverage monthly Google searches over the last 12 months
monthly_searchesSearches for each of the last 12 months, newest first
cpcAverage cost per click in USD (Google Ads)
competition, competition_levelPaid search competition, from 0 to 1 and as LOW, MEDIUM or HIGH
low_top_of_page_bid, high_top_of_page_bidBid range for the top of the results page, in USD
keyword_difficultyHow hard it is to rank in the organic top 10, from 0 to 100
search_intent, secondary_intentsInformational, navigational, commercial or transactional
trendChange in search volume over the last month, quarter and year, in %
serp_featuresResult types on Google's first page: AI Overview, featured snippet, People Also Ask, local pack, video, shopping and more
serp_urlThe Google search DataForSEO checked, to see the results yourself
core_keywordThe main form of a group of close variants (plurals, word order), to cluster keywords that share one volume
ai_search_volume, ai_monthly_searchesHow often the keyword comes up in AI assistants such as ChatGPT, estimated by DataForSEO from People Also Ask questions: last month, and each of the 12 months before. Included at no extra cost
data_statusok (every metric the source has), partial (Google Ads metrics only) or no_data (free row)

The data comes from DataForSEO: Google Ads keyword data plus the DataForSEO Labs keyword database, which adds difficulty, intent and trend, and DataForSEO's AI keyword data for the AI search volume. A value the source does not have is null. It is never replaced by 0.

Three modes

  • Metrics (default): one row per keyword you send. Up to 10,000 keywords per run. Duplicates, extra spaces and capital letters are cleaned up first, so the same keyword is never looked up or charged twice.
  • Ideas: send 1 to 20 seed keywords and get up to 5,000 keywords with the same metrics, with three methods (ideasMethod):
    • ideas (default): broad ideas from the same topics;
    • suggestions: long-tail phrases that contain your seed, such as "best running shoes for flat feet";
    • related: Google's related searches, up to four levels deep. Suggestions and related searches run once per seed and say which seed each row came from (seed_keyword).
  • Domain (competitor keywords): enter one website, or up to 10 to compare competitors in one run. You get the keywords each ranks for on Google, best traffic first, with its position (rank_position), the ranking page (ranking_url) and an estimate of the monthly visits each keyword brings (estimated_traffic), plus the usual metrics. Keep only positions 4 to 20 to find striking-distance keywords. Up to 5,000 keywords per website, same price per row.

In ideas and domain modes, includeTerms keeps only keywords that contain a word ("best", "near me"), excludeTerms leaves out brand names or "free" before anything is charged, and sortBy fetches the highest volume, the highest CPC or the easiest keywords first.

What can you use it for?

  • Bulk search volume checker: average monthly Google searches and the last 12 months, for up to 10,000 keywords per run.
  • Keyword difficulty checker: how hard each keyword is to rank for in the organic top 10, from 0 to 100.
  • Search intent checker: informational, navigational, commercial or transactional.
  • CPC checker: cost per click, paid competition and the top-of-page bid range from Google Ads.
  • Keyword ideas and long-tail keywords: up to 5,000 related keywords from 1 to 20 seeds, filtered by minimum volume.
  • Competitor keyword research: the keywords any website or page ranks for, with position, ranking URL and estimated traffic.
  • AI search volume checker: how often each keyword comes up in AI assistants, with its 12-month history.
  • SERP features checker: which keywords show an AI Overview, a featured snippet, People Also Ask or a local pack.
  • Long-tail keyword finder: phrases that contain your seed, with volume, CPC and difficulty, easiest first if you like.
  • Striking-distance keywords: the keywords your site ranks for in positions 4 to 20, the quickest wins.
  • Competitor comparison: the keywords of up to 10 websites in one run, each row tagged with its website.
  • Keyword data for AI agents: call it as an MCP tool or through the API and get the same typed rows.

How to use it

  1. Paste your keywords, one per line. Google Ads match-type notation such as "phrase" or [exact] is removed.
  2. Pick a country. The language defaults to the country's main language, for example German for Switzerland; change it if you need French or Italian.
  3. Optional: set a minimum search volume or a maximum number of keywords.
  4. Set a maximum cost per run that covers your list (see the price table below), then start.
  5. Open the Output tab: the Keyword metrics view, a Google Ads bids and competition view and a 12-month history view. Export JSON, CSV or Excel, or use the Main columns for spreadsheets (CSV) link, which leaves out the monthly columns.

Input examples

Metrics for your own list:

{
"keywords": ["running shoes", "trail running shoes", "best running shoes for flat feet"],
"location": "US"
}

Keyword ideas from a seed, only ideas with at least 100 searches a month:

{
"mode": "ideas",
"keywords": ["running shoes"],
"location": "GB",
"maxIdeas": 500,
"minSearchVolume": 100
}

Keywords a competitor ranks for in the US, best traffic first:

{
"mode": "domain",
"domain": "competitor.com",
"location": "US",
"maxIdeas": 1000
}

Long-tail suggestions that contain the seed, without brand names, easiest first:

{
"mode": "ideas",
"ideasMethod": "suggestions",
"keywords": ["coffee grinder"],
"excludeTerms": ["baratza", "breville"],
"sortBy": "difficulty",
"maxIdeas": 200
}

Striking-distance keywords of two competitors (positions 4 to 20):

{
"mode": "domain",
"domains": ["competitor.com", "other-competitor.com"],
"minPosition": 4,
"maxPosition": 20,
"maxIdeas": 500
}

Another language in the same country:

{
"keywords": ["chaussures de course", "logiciel de facturation"],
"location": "CA",
"language": "fr"
}

location accepts an ISO country code (US, GB), a country name in English or French (United Kingdom, Royaume-Uni) or a numeric DataForSEO location_code (2840). Every country works. The 94 countries in the drop-down list get every metric and all three modes. The other countries, and location codes such as a city, return Google Ads metrics: search volume, CPC, competition and bids, without difficulty, intent or trend, in metrics mode.

Output example

What a row looks like, with illustrative values (the 12 monthly values are shortened here):

{
"keyword": "running shoes",
"location_code": 2840,
"language_code": "en",
"search_volume": 246000,
"monthly_searches": [
{ "year": 2026, "month": 9, "search_volume": 201000 },
{ "year": 2026, "month": 8, "search_volume": 246000 }
],
"cpc": 1.12,
"competition": 1,
"competition_level": "HIGH",
"low_top_of_page_bid": 0.58,
"high_top_of_page_bid": 1.71,
"keyword_difficulty": 79,
"search_intent": "commercial",
"secondary_intents": ["transactional"],
"trend": { "monthly": -18, "quarterly": -18, "yearly": 0 },
"data_status": "ok",
"source_endpoint": "dataforseo_labs/google/keyword_overview/live",
"retrieved_at": "2026-10-18T09:00:00.000Z"
}

Every run also writes a SUMMARY record (linked in the Output tab). It shows how many keywords were received, cleaned up, looked up and delivered, each batch with its attempts, any limit that stopped the run, and what was charged.

How much does it cost?

This Actor uses pay-per-event pricing. Platform usage is included.

EventPrice
Keyword with data (keyword-result)$0.002 per keyword
Run start (run-start), charged only when the run returns at least one keyword with data$0.01 per run
Keywords with dataTotal price
100$0.21
1,000$2.01
10,000$20.01

You are never charged for:

  • keywords the source has no data for (rows with data_status: "no_data");
  • keywords left out by minSearchVolume or maxKeywords, or listed as duplicates;
  • keywords in a batch that failed;
  • a run that returns nothing.

Maximum cost per run. Set it in the run options (or with maxTotalChargeUsd in the API). The Actor only requests data it can bill within that limit, and keywords that turn out to have no data free their share of the budget for the rest of your list. When the limit is reached, it stops cleanly, keeps every row already delivered and tells you how many keywords are left, for example: "Stopped at your $1.00 maximum cost per run: 495 keywords with data. Raise it to $2.01 to get the other 505." For 1,000 keywords, a limit of $2.01 is enough.

Apify free plan. Runs started from a free Apify account are limited to 20 keywords (or 20 ideas), enough to try the Actor. Paid Apify plans process up to 10,000 keywords per run.

How does it compare?

Popular keyword Actors in Apify Store charge up to $12 per 1,000 keywords, and many leave out keyword difficulty or search intent. This one:

  • costs $2 per 1,000 keywords with data, and keywords without data are free;
  • takes up to 10,000 keywords in one run;
  • puts volume, CPC, bids, difficulty, intent and the 12-month trend in the same row, for every keyword in the 94 countries with full data;
  • adds keyword ideas, long-tail suggestions, related searches and the keywords of up to 10 competitor websites at the same price per row;
  • includes AI search volume and SERP features at no extra cost;
  • filters by words, position and minimum volume at the source, so keywords left out are never charged.

What it does not do: SERP results, backlinks or clickstream-adjusted volumes. It is also new, so its public track record is short. The SUMMARY record shows exactly what happened in each run.

Reliable by design

  • Keywords are sent in batches of up to 700, three batches at a time.
  • Each request is retried up to 3 times, with growing waits, on rate limits, timeouts and server errors.
  • If the DataForSEO Labs request fails for a batch, the Actor asks Google Ads for the same keywords. You still get volume, CPC, competition and bids; difficulty, intent and trend stay null and the row says data_status: "partial".
  • A failed batch does not stop the others, and results already delivered are kept. The run is marked as failed only if nothing could be delivered, and then nothing is charged.
  • The Actor stops starting new batches shortly before the run timeout, leaving time to write the summary and a clear status message.
  • If the platform restarts the run, keywords already delivered are skipped and not charged again.

Use it from your code

Run it and get the rows in one request with the run-sync-get-dataset-items endpoint:

curl -X POST "https://api.apify.com/v2/acts/gaelasao~keyword-research-api/run-sync-get-dataset-items?maxTotalChargeUsd=2.01" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": ["running shoes", "trail running shoes"], "location": "US"}'

With the JavaScript client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('gaelasao/keyword-research-api').call(
{ keywords: ['running shoes', 'trail running shoes'], location: 'GB' },
{ maxTotalChargeUsd: 2.01 },
);
const { items } = await client.dataset(run.defaultDatasetId).listItems();

For long lists, start the run asynchronously and read the dataset when it finishes; the synchronous endpoint waits up to 5 minutes.

Use it from an AI agent (MCP)

Apify hosts this Actor as a tool on its MCP server. In an MCP client such as Claude, Cursor or VS Code, add:

https://mcp.apify.com?tools=actors,docs,gaelasao/keyword-research-api

Then ask, for example: "Get search volume, CPC, difficulty and intent for these 40 keywords in Germany and sort them by volume." or "Which keywords bring competitor.com the most traffic in the UK? Show the top 50 with their ranking pages." The agent sends the same JSON input as above. The output is the same flat rows, and the price per keyword is fixed, so an agent can estimate the cost before it runs.

FAQ

Where does the data come from?

From DataForSEO, a licensed SEO data provider. Search volume, CPC, competition and bids are Google Ads keyword data. Keyword difficulty, search intent and trend come from the DataForSEO Labs database, and AI search volume from DataForSEO's AI keyword data. source_endpoint on each row says which one answered.

How fresh is it?

Google publishes keyword volumes as monthly averages, and DataForSEO refreshes its database every month. The newest month appears a few days after it ends; the current month is never included. retrieved_at shows when the Actor fetched the data, not when Google updated it.

Why is there no data for some keywords?

Very rare or very new keywords are often missing from the Google Ads and DataForSEO databases. Those keywords come back with data_status: "no_data" and null metrics, and they are free.

Why do similar keywords have the same volume?

Google Ads groups close variants, such as plurals or reordered words, and reports the same volume for the group. This is how Google provides the data.

Which countries and languages are supported?

Every country Google Ads serves: use a two-letter code (US, GB, DE) or the country name in English or French. 94 countries get every metric and all three modes, each in its supported languages (for example English and Spanish for the US, Dutch, French and German for Belgium). The other countries get Google Ads metrics (volume, CPC, competition and bids) in metrics mode. Regions and cities work with a numeric DataForSEO location_code. DataForSEO does not serve Russia or Belarus.

What are the limits?

  • Metrics mode: 1 to 10,000 keywords per run. Ideas mode: 1 to 20 seeds and up to 5,000 ideas. Domain mode: one website or page and up to 5,000 ranked keywords.
  • Each keyword can have up to 80 characters and 10 words. Longer ones are listed in SUMMARY and skipped.
  • Google Ads rejects some characters (, ! @ % ^ * ( ) = { } ; ~ < > ? \ | and emojis). Keywords containing them can still get full metrics from DataForSEO Labs, but they are left out of the Google Ads fallback and listed in SUMMARY.

What are SERP features?

The kinds of results Google shows on the first page for a keyword: classic organic links, but also an AI Overview, a featured snippet, People Also Ask questions, a local pack, videos, images or shopping results. They tell you what it takes to be seen: a keyword with an AI Overview and a featured snippet leaves fewer clicks to the organic results. serp_features lists them for each keyword with full metrics, at no extra cost. Turn it off with "includeSerpInfo": false.

What is AI search volume?

An estimate, by DataForSEO, of how often a keyword comes up in AI assistants such as ChatGPT, built from the questions in Google's People Also Ask boxes. You get last month's value in ai_search_volume and the 12 months before in ai_monthly_searches (when includeTrend is on). It is on by default, costs nothing extra, and is null where DataForSEO has no AI data, for example for some countries or languages. Turn it off with "includeAiVolume": false.

Is it a Google Keyword Planner alternative?

Yes. You get the same Google Ads keyword metrics (search volume, CPC, competition and bid range) without a Google Ads account or ad spend, plus keyword difficulty, search intent and trend from DataForSEO Labs, for thousands of keywords at once.

Do I need a DataForSEO or Google Ads account?

No. You only need an Apify account. Charges come out of your Apify balance.

Can I track the same keywords every month?

Yes. Save your input as a task and add an Apify schedule. Each run is charged like any other run.