# Keyword Research: Search Volume, CPC and Ideas

> Keyword Research Tool is an Apify actor (API) by CheapAPI Labs. Search volume, CPC, competition, difficulty and intent for your keywords, plus new keyword ideas. It costs $1.20 per 1,000 keywords on the Apify Free plan and $0.60 on Gold, plus $0.0145 per data request ($0.0151 on Gold), billed through your Apify account with no API key. Compared with the most used keyword volume actor (about 1,200 users): search volume for 1,000 keywords on the Free plan costs $1.23 here and $12.00 there (Apify Store listing prices, checked September 2026). A batch priced actor charges $0.70 on Free and $0.35 on Gold for 1,000 keywords, with intent but no difficulty score.

- Page: https://cheapapilabs.com/actors/keyword-research-tool/
- Run on Apify: https://apify.com/cheapapi/keyword-research-tool
- Publisher: CheapAPI Labs (Apify username cheapapi)
- Main price: $1.20 per 1,000 keywords on Free, $0.60 on Gold
- Our prices updated: 2026-10-30

## Prices per event (USD)

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| Data request | $0.0145 | $0.0145 | $0.0145 | $0.0151 |
| Keyword result | $0.0012 | $0.0012 | $0.0012 | $0.0006 |
| Keyword idea | $0.002 | $0.002 | $0.002 | $0.002 |
| Website analyzed | $0.12 | $0.12 | $0.12 | $0.12 |
| Real time small batch fee | $0.10 | $0.10 | $0.10 | $0.10 |
| Audience demographics add on | $0.005 | $0.005 | $0.005 | $0.005 |
| Request without results | $0.0009 | $0.0009 | $0.0009 | $0.0003 |
| Keyword checked without a result | $0.0002 | $0.0002 | $0.0002 | $0.0002 |

Platinum and Diamond pay the Gold price. Apify platform usage: billed separately by Apify.

## Call it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~keyword-research-tool/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"mode":"searchVolume","keywords":["running shoes","best coffee maker","keyword research"],"country":"US","dataSource":"auto"}'
```

## Example output row

```json
{
  "id": "2a37305c4b49a8d2",
  "keyword": "nothing phone",
  "searchVolume": 165000,
  "cpc": 0.31,
  "competition": "HIGH",
  "competitionIndex": 92,
  "lowBid": 0.03,
  "highBid": 0.38,
  "keywordDifficulty": 31,
  "searchIntent": "informational",
  "secondaryIntents": null,
  "trendMonthlyPct": 22,
  "trendQuarterlyPct": 0,
  "trendYearlyPct": 174,
  "monthlyTrend": [
    {
      "year": 2026,
      "month": 6,
      "searchVolume": 301000
    },
    {
      "year": 2026,
      "month": 7,
      "searchVolume": 246000
    },
    {
      "year": 2026,
      "month": 8,
      "searchVolume": 301000
    }
  ],
  "coreKeyword": "phones nothing",
  "wordCount": 2,
  "detectedLanguage": "en",
  "categoryIds": [
    10007,
    10878,
  …
}
```

## Fields

Search volume mode (default), one row per keyword:

| Field | Type | Example |
|---|---|---|
| `id` | string | `"0f02f3bb0cfda02f"` (stable: same keyword, mode and market give the same id in every run) |
| `keyword` | string | `"running shoes"` |
| `searchVolume` | integer | `246000` (average monthly Google searches) |
| `cpc` | number | `1.12` (average cost per click, USD) |
| `competition` | string | `"HIGH"` (`LOW` / `MEDIUM` / `HIGH`, paid competition) |
| `competitionIndex` | integer | `100` (0 to 100) |
| `lowBid` / `highBid` | number | `0.61` / `2.07` (top of page bid range, USD) |
| `keywordDifficulty` | integer | `71` (0 to 100, how hard it is to rank organically) |
| `searchIntent` | string | `"commercial"` (informational, navigational, commercial, transactional) |
| `secondaryIntents` | array | `["transactional"]` |
| `trendMonthlyPct` / `trendQuarterlyPct` / `trendYearlyPct` | number | `-18` / `22` / `0` (% change) |
| `monthlyTrend` | array | `[{ "year": 2026, "month": 8, "searchVolume": 201000 }, …]` oldest first |
| `coreKeyword` | string | `null` or the main keyword of its synonym group |
| `wordCount` | integer | `2` |
| `detectedLanguage` | string | `"en"` (estimated from the keyword text, not the market; one word keywords can get another language, the market language is `languageCode`) |
| `categoryIds` | array | `[10021, 10178]` (Google product category ids) |
| `lastUpdated` | string | `"2026-09-16 03:19:59 +00:00"` (when the metrics were refreshed) |
| `mode`, `country`, `languageCode`, `locationCode`, `dataSource`, `scrapedAt` | context | `"searchVolume"`, `"US"`, `"en"`, `2840`, `"database"`, ISO timestamp |

Other modes add or swap fields:

| Mode | Extra fields |
|---|---|
| Idea modes | `seedKeyword`; related keywords add `depth` and `relatedKeywords` |
| Keywords for a website | `website`, `concepts` (keyword groups), `spellingCorrection` when present |
| Keyword difficulty | `keywordDifficulty` only (plus context) |
| Search intent | `searchIntent`, `intentProbability`, `secondaryIntents` with probabilities |
| Keyword overview | `topResultsAvgBacklinks`, `topResultsAvgReferringDomains`, `topResultsAvgRank`, `topResultsAvgDomainRank`, normalized volume estimates |
| Historical data | `monthsOfHistory`, `firstMonth`, `lastMonth`, `history` (monthly volume, CPC, competition, bids) |
| AI search volume | `aiSearchVolume`, `aiTrendMonthlyPct`, `aiTrendQuarterlyPct`, `aiMonthlyTrend` |
| Optional add ons | `serpFeatures`, `serpResultsCount`, `serpUrl`, `serpLastUpdated` (search results info); `demographics` (age and gender) |

The **RUN_SUMMARY** record in the key value store lists:

- keywords that had no data
- keywords that were not found
- skipped keywords
- any problems
- why the run stopped (result cap or budget)
- the events that were charged

## Compared with alternatives

Typical run: **search volume for your own list of 10 or 1,000 keywords**. Prices are Actor fees per the public Apify Store listings, checked September 2026; user counts are rounded. ", " means the listing does not offer or state it.

| Option | 10 keywords, Free | 1,000 keywords, Free | 1,000 keywords, Gold | Billing (Free plan) | Difficulty + intent |
|---|---|---|---|---|---|
| Most used keyword volume Actor (~1,200 users) | $0.12 | $12.00 | $8.00 | $0.012 per keyword |, |
| Flat batch volume Actor (~790 users) | $1.99 | $1.99 | $0.40 | $1.99 per batch of up to 1,000 keywords |, |
| Batch priced Google + Bing volume Actor (~400 users) | $0.70 | **$0.70** | **$0.35** | $0.20 per run + $0.50 per batch of up to 1,000 keywords | intent only |
| Per keyword Actor with optional enrichment (~240 users) | $0.021 | $2.00 ($3.00 with difficulty + intent) | $1.60 ($2.40) | $0.001 per run + $0.002 per keyword, + $0.001 per keyword for difficulty/intent | paid add on |
| **This Actor** | **$0.027** | $1.23 | $0.63 | $0.0145 per data request + $0.0012 per keyword with data | ✓ included |

What this means:

- **Small and medium lists**: this Actor is the cheapest option with difficulty and intent, because it has no per run or per batch minimum.
- **A full 1,000-keyword list**: we are **not** the cheapest. On the Free plan the batch priced Google + Bing Actor costs $0.70 (and also returns Bing volume, which we do not); on Gold both batch priced Actors ($0.35 and $0.40) cost less than our $0.63. They do not include keyword difficulty or the 3-month and year over year trend %.
- **Platform usage**: for this Actor, Apify platform usage is billed separately on top of the prices above (at the default 256 MB a small run typically uses about $0.001 to $0.005).

**Keyword ideas from seed keywords** (1,000 idea rows, Free plan):

| Option | 1,000 ideas | Difficulty + intent | Notes |
|---|---|---|---|
| Seed suggestion Actor, volume/CPC/intent (~270 users) | **$1.00** | intent only | $0.001 per suggestion; platform usage also billed to the user |
| Seed suggestion Actor with difficulty (~530 users) | $3.00 | ✓ | $0.003 per keyword; one seed and up to 500 keywords per run |
| **This Actor** (*Keyword ideas* mode) | $2.01 | ✓ included | $0.0145 per page of up to 1,000 ideas + $0.002 per idea |

For plain idea lists without difficulty, the $1.00 Actor is cheaper than this one. Those two Actors expand seed keywords into suggestions; their listings do not describe looking up metrics for a list of your own keywords.

## Not included

- **Bing, YouTube or Amazon volume**: this Actor returns Google data only.
- **Live Google search results (rankings, snippets, ads)**: use [Google SERP Scraper](https://cheapapilabs.com/actors/google-serp-scraper/).
- **Visibility of a brand in AI answers** (ChatGPT, Perplexity, AI Overviews): use [AI Search Visibility Tracker](https://cheapapilabs.com/actors/ai-search-visibility-tracker/). This Actor's AI search volume shows demand, not who gets cited.
- **Backlinks and domain authority**: use [Backlink Checker](https://cheapapilabs.com/actors/backlink-checker/) or [Domain SEO Analyzer](https://cheapapilabs.com/actors/domain-seo-analyzer/).
- **Technical on page audits**: use [SEO Site Audit](https://cheapapilabs.com/actors/seo-site-audit/).
- **YouTube keyword ideas**: use [YouTube Search Scraper](https://cheapapilabs.com/actors/youtube-search-scraper/) to see what ranks for a query on YouTube.

## Limits

- Up to 10,000 keywords per run in per keyword modes and 200 seed keywords in idea modes. Each keyword can be at most 80 characters and 10 words. Longer ones are skipped and listed in RUN_SUMMARY.
- Search volume is Google only. Rare keywords may return no volume; they cost at most the $0.0002 check fee.
- Keyword difficulty, intent, overview, history, ideas and demographics come from the keyword database. They cover country level locations and the major languages, not city targeting.
- Custom date ranges, search partners and city or coordinate targeting are real time only options, without difficulty or intent.
- AI search volume is an estimate with 12 months of history, so there is no year over year change for it.
- Demographics are not available for every keyword or country. Only rows that include them are charged.
- Economy processing can take 1 to 3 hours.

## FAQ

**Is there a Free plan limit, and is platform usage included?**
On the Apify Free plan you can use up to $0.25 of this Actor's results per calendar month, enough to try it (Apify pays developers nothing for Free plan usage while our data costs are real). Runs that reach the allowance stop cleanly with a message and keep everything collected; the allowance resets on the 1st, and any paid plan has no limit. Apify platform usage (compute) is not included: it is billed separately by Apify, typically $0.001 to $0.005 for a small run at the default 256 MB, and shown in the run details.

**How accurate and fresh is the data?**
Volumes are the Google Ads keyword planner numbers advertisers see: average monthly searches, rounded the way Google rounds them, as exact numbers rather than bands. Keyword database metrics are refreshed monthly (each row's `lastUpdated` shows when); real time data is fetched during your run; AI search volume covers the last 12 full months.

**What is the difference between database and real time data, and can I target a city?**
The keyword database is the default: fast, refreshed monthly, with difficulty and intent. Real time data asks the Google Ads keyword planner during your run and supports custom date ranges, search partners and city targeting (`locationName` such as `London,England,United Kingdom`, `locationCode` or `coordinates`), but has no difficulty or intent. Keywords missing from the database are listed in RUN_SUMMARY (`keywordsNotFound`); look them up with `dataSource: "realtime"` in a second run. Real time only options switch the run to real time data automatically.

**What is AI search volume?**
A model based estimate of how often a keyword or question is asked in AI assistants and AI search each month, with a 12-month trend. Use it next to Google volume to spot topics growing in AI search; it is not an exact count from each assistant.

**Why did I get fewer rows than keywords, and why was I charged for them?**
Very rare keywords may have no data (listed in `keywordsWithoutData` / `keywordsNotFound`); filters, `maxResults`, deduplication and the maximum cost per run can also reduce rows. Every lookup is paid when it is made, so a request that outputs nothing costs the data request plus the no result fee ($0.0154), and keywords returned without data, filtered out or duplicated cost $0.0002 each. A keyword that is not returned at all is free. In the website mode each analyzed website costs $0.12 even with no keywords, and opt in real time requests with fewer than 82 keywords with data (163 on Gold) add the $0.10 small batch fee. RUN_SUMMARY lists every charged event.

**How do I control my budget?**
Set **Maximum cost per run** in the run options. The Actor checks the remaining budget before every request, asks for no more keywords than it can pay for in the worst case, and stops cleanly when the next request would not fit. `maxResults` caps the number of rows.

**Can I monitor keywords every month?**
Yes. Save your input as a task and add a monthly schedule (the keyword database is refreshed monthly). Every row has a stable `id` (same keyword, mode and market give the same `id` in every run) and a `scrapedAt` timestamp, so you can append runs to one sheet or table and compare rows with the same `id`.

**Do I need an API key or a Google Ads account?**
No. Everything runs on our own data infrastructure.

**Is it legal?**
The Actor returns aggregated keyword statistics (search counts, bids, difficulty), not personal data. You are responsible for using the results in line with your local laws and the terms of the services you use them with.

**Something does not work. Where do I get help?**
Open an issue on the Actor's **Issues** tab and include your run ID. The run's RUN_SUMMARY record helps us find the cause quickly.
