# Keyword Search Volume & CPC Checker - Bulk Google Ads Data ✅ (`unseenuser/keyword-search-volume`) Actor

Google Keyword Planner alternative: bulk search volume, CPC, bid range, advertiser competition and 12-month trend for up to 1,000 keywords per call. Ideas mode finds related keywords. $6 per 1,000 keywords, no-data keywords free. No Google Ads account needed.

- **URL**: https://apify.com/unseenuser/keyword-search-volume.md
- **Developed by:** [Unseen User](https://apify.com/unseenuser) (community)
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.00 / 1,000 keyword results

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 Search Volume, CPC & Competition

> **Bulk Google Ads keyword data: search volume, CPC, advertiser competition and 12-month trend, up to 1,000 keywords per call. No-data keywords are free.**

Check keyword search volume, CPC and Google Ads competition for a whole keyword list in one run, or turn a few seed topics into new keyword ideas with the same metrics, without a Google Ads account.

### ⚡ Why This Actor?

Combined-endpoint actor: paste a keyword list and get back Google Ads search volume, CPC, advertiser competition, top-of-page bid range and a 12-month trend for every keyword, or give up to 20 seeds and get related keyword ideas with the same metrics. Built as a pay-per-keyword alternative to Keyword Planner and to monthly SEO-suite subscriptions. Keywords that come back with no data are never charged.

This actor returns **Google Ads competition (advertiser)**, which measures how crowded the paid ads auction is. It is **not SEO keyword difficulty** and says nothing about how hard it is to rank organically.

### 🆓 Free Plan Limit

NOTE: Free Apify users receive up to 5 results per run. Upgrade to any paid Apify plan to remove this limit. This limit was set by the Actor developer, not by Apify.

1 result = 1 keyword with data. Metrics mode processes the first 5 keywords of your list (any of them without data are free); ideas mode stops after 5 keyword ideas with data, and ideas without data do not count. Keywords with no data are never charged. The run's status message tells you when the limit stopped a run.

### 🧾 Sample Output Row

```json
{
  "keyword": "buy laptop",
  "spell": null,
  "seeds": null,
  "mode": "metrics",
  "country": "US",
  "location_code": 2840,
  "language_code": "en",
  "search_partners": false,
  "search_volume": 2900,
  "cpc": 7.95,
  "competition": "HIGH",
  "competition_index": 100,
  "low_top_of_page_bid": 1.69,
  "high_top_of_page_bid": 10.04,
  "monthly_searches": [
    { "year": 2026, "month": 9, "search_volume": 2400 },
    { "year": 2026, "month": 8, "search_volume": 2900 }
  ],
  "trend": "falling",
  "mom_change_pct": -17.2,
  "yoy_change_pct": -11.1,
  "status": "ok",
  "empty_reason": null,
  "charged": true,
  "data_as_of": "2026-09",
  "retrieved_at": "2026-10-18T20:15:03.000Z"
}
```

*(Values illustrative. `monthly_searches` is trimmed here; real rows contain 12 months.)*

### 🧭 Which Mode Do I Use?

| You have... | Use mode | What you get |
|---|---|---|
| A list of keywords you want numbers for | `metrics` | One row per keyword you sent |
| A few seed topics and want more keywords | `ideas` | Related keywords Google Ads suggests, each with full metrics (up to `maxIdeas` rows) |
| A competitor domain and want its keywords | Not in v1 | See Roadmap |

Ideas mode doubles as a keyword suggestions tool: give it a few seed topics and it returns related keywords Google Ads suggests, each with volume, CPC and competition.

### 🎯 Use Cases

- **SEO content planning** - Rank a topic list by real monthly demand before writing anything
- **PPC budget planning** - Use CPC and top-of-page bid ranges to estimate cost before launching campaigns
- **Keyword expansion** - Turn 5-20 seed topics into hundreds of related keywords with volumes
- **Seasonality checks** - Read the 12-month history and trend to time launches and content
- **Market sizing** - Compare demand for products or services across countries and languages
- **Client reporting** - Pull volumes for an agency client's keyword set without seat-based tools
- **Automation pipelines** - Feed volumes into Sheets, Make, n8n or an AI agent via API or MCP
- **Bulk keyword volume checker** - Paste thousands of keywords and get monthly search volume, CPC and competition for each in one run; keywords with no data are free
- **Google Keyword Planner alternative** - Keyword Planner-style volumes, CPC and top-of-page bid ranges without a Google Ads account or an active campaign
- **Keyword CPC checker** - Check the average CPC and the low/high top-of-page bid for every keyword before you set a budget
- **High search volume, low competition keywords** - Use `minVolume` to drop small terms, then sort by `competition_index` to find keywords advertisers have not crowded yet

### 🚀 Quick Start

1. Click **Try for free** on this Actor's page
2. Paste your keywords (see Inputs Overview below)
3. Run the Actor
4. Download results as JSON, CSV, or XLSX, or pull via Apify API

**Set a "Max cost per run"** in the run options before large runs. It is the simplest way to cap what a single run can spend.

### ⚙️ Inputs Overview

| Input | Type | Required | Description | Example/Allowed Values |
|---|---|---|---|---|
| `mode` | enum | ❌ | What to do. Default `metrics` | `metrics`, `ideas` |
| `keywords` | array of strings | ⚠️ One of `keywords`/`keywordsText` required | Metrics mode: keywords to measure, any total (sent in batches of up to 1,000). Ideas mode: seed keywords (sent in batches of up to 20) | `["buy laptop", "cheap laptops"]` |
| `keywordsText` | string | ⚠️ One of `keywords`/`keywordsText` required | Paste a list, one per line or comma-separated. Merged with `keywords` | `buy laptop, cheap laptops` |
| `country` | string | ❌ | ISO code, country name, or Google Ads location code. Default `US` (2840) | `US`, `United Kingdom`, `2826` |
| `language` | string | ❌ | Language code or name. Default `en` (English) | `en`, `de`, `Spanish` |
| `searchPartners` | boolean | ❌ | Include Google search partner sites in volumes. Default `false` | `false` |
| `maxIdeas` | integer | ❌ | **⚠️ COST CONTROL:** Ideas mode only. You are billed per idea row returned, not per seed. The run stops pushing and charging once this many ideas are delivered. Default 1,000; `0` = all ideas (the run then stops only at the free-plan limit, your Maximum cost per run or the per-run safety limit) | `1000` |
| `minVolume` | integer | ❌ | Drop rows below this monthly volume. Dropped rows are not charged. Default 0 | `50` |

**Keyword rules (from Google Ads):** max 80 characters and max 10 words per keyword; emojis and some symbols are not allowed; keywords are lowercased. Invalid keywords come back as error rows and are not charged.

**Validation per mode:**

- **Metrics:** any number of keywords; the actor sends them in tasks of up to 1,000 keywords each.
- **Ideas:** seeds are sent in tasks of up to 20 seeds each; each task can return thousands of ideas, limited by `maxIdeas`.

**Results appear as you go:** rows are pushed to the dataset after each batch, so you can watch or download partial results while a large run is still working.

#### Example input (from a real run)

Metrics mode, 10 keywords, United States, English:

```json
{
  "mode": "metrics",
  "keywords": [
    "crm software",
    "best crm for small business",
    "hubspot crm",
    "salesforce pricing",
    "project management software",
    "email marketing tools",
    "seo tools",
    "keyword research tool",
    "asdkjhqwe nonsense keyword",
    "pipedrive vs hubspot"
  ],
  "country": "US",
  "language": "en"
}
```

### 📊 Output Fields

| Field | Meaning | When it is null |
|---|---|---|
| `keyword` | The keyword (lowercased) | Never |
| `spell` | Corrected spelling Google used, if your keyword looked misspelled | When no correction was applied |
| `seeds` | Ideas mode: the seed list sent in the task that produced this idea | Always null in metrics mode |
| `mode` | `metrics` or `ideas` | Never |
| `country` | Country as you entered it | Never |
| `location_code` | Google Ads location code used | When Google returned no data |
| `language_code` | Language code used | When Google returned no data |
| `search_partners` | Whether partner-network searches are included | Never |
| `search_volume` | Average monthly searches (Google Ads estimate) | No data from Google for this keyword |
| `cpc` | Average cost per click, USD | No ad data for this keyword/location |
| `competition` | **Google Ads competition (advertiser):** `LOW`, `MEDIUM`, `HIGH`. Not SEO difficulty | Not enough ad data |
| `competition_index` | Advertiser competition 0-100 | Not enough ad data |
| `low_top_of_page_bid` | Lower top-of-page bid estimate, USD | No ad data |
| `high_top_of_page_bid` | Upper top-of-page bid estimate, USD | No ad data |
| `monthly_searches` | 12 months of `{year, month, search_volume}` | No data from Google |
| `trend` | `rising`, `flat` or `falling` (last 3 months vs the 3 before, ±10%) | Fewer than 6 months of data |
| `mom_change_pct` | Latest month vs the month before, % | Missing month or previous month was 0 |
| `yoy_change_pct` | Latest month vs the same month one year earlier (12 months apart), %. The earlier month is fetched for this comparison but is not listed in `monthly_searches`. | Missing month or that month was 0 |
| `status` | `ok`, `no_data` or `error` | Never |
| `empty_reason` | Why there is no data (see below) | When `status` is `ok` |
| `error` | `{ "type", "message" }`: a short machine-readable `type` and a plain-English `message` with what to do next (for example `{ "type": "invalid_keyword", "message": "Keyword rejected - check length or characters" }`) | On normal rows; set on error rows and on the run notice row |
| `charged` | Whether this row was billed | Never |
| `data_as_of` | Latest month with data, `YYYY-MM` | No data from Google |
| `retrieved_at` | When the row was fetched (ISO timestamp) | Never |

**`empty_reason` values:** `google_no_data` (Google returned the keyword with no volume), `not_returned` (Google returned nothing for this keyword, often because it was merged with a close variant), `invalid_keyword` (failed the length, word or symbol rules), `request_failed` (provider error after retries), `run_notice` (one row with keyword `(run notice)` that explains in `error.message` why a run stopped early or returned nothing, for example an input problem, no data found, the Maximum cost per run or the free-plan limit; never charged).

**`error.type` values:** `invalid_input`, `invalid_keyword`, `all_keywords_invalid`, `nothing_found`, `rate_limited`, `timeout`, `source_unavailable`, `source_access`, `request_rejected`, `max_cost_reached`, `free_plan_limit`, `safety_limit`, `unexpected_error`. Rows below `minVolume` are dropped: they are never emitted and never charged.

#### Example output row (from the same run)

The `hubspot crm` row from the run above, unedited (retrieved 2026-10-19, data through September 2026):

```json
{
  "keyword": "hubspot crm",
  "spell": null,
  "seeds": null,
  "mode": "metrics",
  "country": "US",
  "location_code": 2840,
  "language_code": "en",
  "search_partners": false,
  "search_volume": 27100,
  "cpc": 32.06,
  "competition": "LOW",
  "competition_index": 11,
  "low_top_of_page_bid": 15.88,
  "high_top_of_page_bid": 230.2,
  "monthly_searches": [
    { "year": 2026, "month": 9, "search_volume": 40500 },
    { "year": 2026, "month": 8, "search_volume": 27100 },
    { "year": 2026, "month": 7, "search_volume": 27100 },
    { "year": 2026, "month": 6, "search_volume": 40500 },
    { "year": 2026, "month": 5, "search_volume": 33100 },
    { "year": 2026, "month": 4, "search_volume": 27100 },
    { "year": 2026, "month": 3, "search_volume": 33100 },
    { "year": 2026, "month": 2, "search_volume": 22200 },
    { "year": 2026, "month": 1, "search_volume": 22200 },
    { "year": 2025, "month": 12, "search_volume": 18100 },
    { "year": 2025, "month": 11, "search_volume": 18100 },
    { "year": 2025, "month": 10, "search_volume": 27100 }
  ],
  "trend": "flat",
  "mom_change_pct": 49.4,
  "yoy_change_pct": 49.4,
  "status": "ok",
  "empty_reason": null,
  "error": null,
  "charged": true,
  "data_as_of": "2026-09",
  "retrieved_at": "2026-10-19T10:50:25.744Z",
  "_metadata": {
    "mode": "metrics",
    "task_index": 1,
    "task_id": "10191050-2850-0367-0000-bd3a838e702b",
    "keywords_in_task": 10,
    "fetched_at": "2026-10-19T10:50:25.744Z"
  }
}
```

### 🌍 Country and Language Codes

You can type a country name, an ISO code, or a numeric location code. Common ones:

| Country | ISO | Location code |
|---|---|---|
| United States | US | 2840 |
| United Kingdom | GB / UK | 2826 |
| Canada | CA | 2124 |
| Australia | AU | 2036 |
| Germany | DE | 2276 |
| France | FR | 2250 |
| Spain | ES | 2724 |
| Italy | IT | 2380 |
| Netherlands | NL | 2528 |
| Brazil | BR | 2076 |
| Mexico | MX | 2484 |
| India | IN | 2356 |
| Japan | JP | 2392 |
| Israel | IL | 2376 |

| Language | Code |
|---|---|
| English | en |
| Spanish | es |
| German | de |
| French | fr |
| Italian | it |
| Portuguese | pt |
| Dutch | nl |
| Japanese | ja |

Any other country (including regions and cities) or language that Google Ads supports also works: type its full name in the Google Ads location format (for example `London,England,United Kingdom`).

### 💰 Pricing

Pay-per-event model on Apify:

- **Start fee:** $0.10 per run, charged by Apify's built-in `apify-actor-start` event when the run starts
- **Per keyword with data:** $6 per 1,000 ($0.006 each)
- **Ideas mode bills per output row:** each idea returned is one billed keyword. Seeds themselves are not billed.
- **Maximum cost per run:** before each provider request the Actor checks your remaining budget and only requests as many keywords as it can still bill; when the budget is used up it stops cleanly
- **Never charged:** keywords with no data, invalid keywords, rows dropped by `minVolume`, ideas beyond `maxIdeas`, keywords that fail after retries, and any keyword already delivered earlier in the same run (a retried batch never charges twice)

| Run size | What you pay |
|---|---|
| 10 keywords, all with data | $0.10 + $0.06 = **$0.16** |
| 1,000 keywords, all with data | $0.10 + $6.00 = **$6.10** |
| 10,000 keywords, all with data | $0.10 + $60.00 = **$60.10** |
| 10,000 keywords, 3,000 with no data | $0.10 + $42.00 = **$42.10** |
| Ideas mode, 5 seeds, `maxIdeas` 100 | $0.10 + $0.60 = **$0.70** |
| Ideas mode, 5 seeds, default `maxIdeas` 1,000 | up to $0.10 + $6.00 = **$6.10** |
| Ideas mode, `maxIdeas` 0 (all ideas), 20 seeds | can reach $0.10 + $120.00 (up to 20,000 ideas) |

> **⚠️ Cost Warning:** Ideas mode bills per idea returned, not per seed. One seed list can return up to 20,000 ideas. Keep `maxIdeas` at the number you need (default 1,000), avoid `0` unless you mean it, and set **Max cost per run**.

See exact per-event pricing on the Actor's Apify page.

### 🆚 Compared to SEO Suites

| | This Actor | Ahrefs / Semrush subscriptions |
|---|---|---|
| Billing | Pay per keyword with data, no subscription | Monthly plan, typically from the low hundreds of USD per month (check their current pricing pages) |
| Bulk volume lookups | 1,000 keywords per provider call | Limited by plan quotas and export limits |
| Data source | Google Ads keyword data | Their own clickstream/modeled databases |
| SEO difficulty, backlinks, rank tracking | ❌ Not included | ✅ Included |
| API / automation access | Apify API and MCP on every account | Usually higher-tier plans or API add-ons |

Use this actor when you need volumes and CPC at scale. Use a full suite when you need the rest of the toolset.

### 🔌 API and MCP Examples

**Apify API (run and get results in one call):**

```bash
curl -X POST "https://api.apify.com/v2/acts/UnseenUser~keyword-search-volume/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"metrics","keywords":["buy laptop","cheap laptops for sale"],"country":"US","language":"en"}'
```

**JavaScript (apify-client):**

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('UnseenUser/keyword-search-volume').call({
  mode: 'ideas',
  keywords: ['running shoes'],
  country: 'GB',
  maxIdeas: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**MCP (Claude Desktop, Cursor and other MCP clients) via the Apify MCP server:**

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server", "--actors", "UnseenUser/keyword-search-volume"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}
```

*(Check Apify's MCP documentation for the current syntax.)*

### 🎬 Demo Videos

New to Apify? Schedule this Actor to run automatically, for example a weekly keyword search volume check on the same list:

[![How to schedule Apify Actors to run automatically](https://img.youtube.com/vi/GRFW_Loo2dk/hqdefault.jpg)](https://www.youtube.com/watch?v=GRFW_Loo2dk)

Connect this Actor to your stack and send keyword data to Google Sheets, Make, n8n or a webhook after every run:

[![Apify integrations: send Actor results to your tools](https://img.youtube.com/vi/bNACk1_S_6w/hqdefault.jpg)](https://www.youtube.com/watch?v=bNACk1_S_6w)

### 🔗 Related Actors

- [AI search visibility checker](https://apify.com/unseenuser/ai-answer-extractor) - see how AI search answers cover the topics you research with keyword volumes here
- [Google Ads Transparency scraper](https://apify.com/unseenuser/Google-ads) - see the ads advertisers actually run on Google, next to the CPC and Google Ads competition data from this Actor

### ❓ FAQ

**Q: Is this legal?**
A: This Actor uses a third-party data provider that supplies the underlying Google Ads keyword data. Your downstream use of the data is your responsibility - see the full Terms of Service and the Actor-Specific Addendum (Part 4) for details.

**Q: Do I need a Google Ads or data-provider account?**
A: No. UnseenUser holds the provider credentials. You only need an Apify account.

**Q: What terms apply to the Google Ads data?**
A: The data originates from Google's advertising systems and is supplied by a third-party data provider from its own infrastructure and databases. Google's Terms of Service and the data provider's Terms of Service both apply to your use. The provider's terms specifically prohibit using search engine data to compete with or adversely affect the search engines it comes from. Part 4 names the provider and links its terms.

**Q: What if Google or the data provider sends a cease-and-desist?**
A: Notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser) and cease using this Actor immediately.

**Q: Can I redistribute or resell the data?**
A: Using results inside your own analysis, reports for your clients, and your own products is the intended use. Reselling raw output as a keyword database or a competing keyword-data API is prohibited by the Master Terms (Section 4.7) and may breach the data provider's terms. See Part 4.

**Q: Does this return personal data?**
A: No. It returns aggregate search and advertising statistics about keywords, not data about individual people. Your own keyword lists can still be sensitive (for example health or legal topics tied to a client); handle them accordingly.

**Q: How accurate are the volumes?**
A: They are Google Ads estimates, not exact counts. Google groups close variants (plurals, misspellings, reordered words) and can report the same combined volume for each of them. For the cleanest split, send close variants in separate runs.

**Q: How often does the data refresh?**
A: Google updates keyword data monthly. The previous month usually appears a few days to a couple of weeks into the new month. `data_as_of` shows the latest month included in each row.

**Q: Is "competition" the same as keyword difficulty?**
A: No. It is Google Ads competition (advertiser): how many advertisers bid on the keyword. A keyword can be HIGH competition for ads and easy to rank for organically, or the reverse.

**Q: Why are some keywords missing or showing no data?**
A: Google returns no data for very low-volume keywords, some restricted topics and some merged variants. These rows have `status: no_data` with an `empty_reason`, and they are never charged.

**Q: How fast is it?**
A: About a few seconds per 1,000 keywords. Very large runs (over ~12,000 keywords) take a minute or more per 12,000 because of the provider rate limit.

**Q: Is there a Google Keyword Planner API for keyword search volume?**
A: Google's own route is the Google Ads API, which needs a Google Ads account, an approved developer token and OAuth setup. This Actor returns the same kind of Google Ads keyword data through the Apify API or MCP, with no Google Ads account: see API and MCP Examples above.

**Q: How do I find the search volume of a keyword?**
A: Put the keyword (or a whole list) into `keywords` in metrics mode and run. `search_volume` is the average monthly searches, `monthly_searches` shows the last 12 months, and `data_as_of` tells you the latest month included.

**Q: What is a good keyword search volume?**
A: There is no single number. It depends on your niche and goal: a small, specific keyword can be worth more than a broad one if it matches what you sell. Use `minVolume` to drop keywords below your own floor, and read `search_volume` together with `cpc` and `trend`.

**Q: Is Google Keyword Planner free, and how is this different?**
A: Keyword Planner is free to use inside a Google Ads account, but accounts without active ad spend often see volume ranges instead of a single monthly figure. This Actor returns one monthly figure per keyword plus 12 months of history, CPC and bid ranges, in bulk, as JSON, CSV or Excel.

**Q: What does average monthly search volume mean?**
A: `search_volume` is the Google Ads estimate of how many times a keyword is searched per month on average. The month-by-month estimates behind it are in `monthly_searches`, newest first.

**Q: Is search volume monthly or daily?**
A: Monthly. `search_volume` is an average per month, and `monthly_searches` gives one estimate for each of the last 12 months. It counts searches, not unique people, so one person searching twice counts twice.

**Q: How many keywords can I check at once?**
A: Metrics mode accepts any number of keywords in one run. They are sent in batches of 1,000, and results land in the dataset after each batch, so a 10,000-keyword list is 10 batches in one run. On Apify's free plan a run returns up to 5 results (see Free Plan Limit).

**Q: How do I check the CPC of Google Ads keywords in bulk?**
A: Paste your keyword list in metrics mode and pick the country and language. Each row has `cpc` (average cost per click in USD), the `low_top_of_page_bid` and `high_top_of_page_bid` range, and Google Ads `competition`, so you can sort a whole list by cost before you build a campaign.

**Q: Can I check search volume for several countries or worldwide?**
A: Each run uses one location: a country, a region or a city. To compare countries, run once per country, for example with one saved task per market. There is no worldwide total in a single run.

**Q: How do I get all keyword ideas?**
A: Set `mode` to `ideas` and `maxIdeas` to `0`. The run then returns every keyword idea the data source gives for your seed keywords, which can be thousands. You pay per keyword idea with data, so set a Maximum cost per run in Apify's run options if you want a ceiling. On Apify's free plan a run still stops at 5 results, and very large runs can also stop at the per-run safety limit.

**Q: Does this work for YouTube, Amazon or Bing keywords?**
A: No. The data is Google Search keyword data from Google Ads, optionally including Google search partner sites (`searchPartners`). Bing volume and CPC are on the Roadmap.

### 🗺️ Roadmap (not in v1)

- **Competitor mode** - keywords a domain is associated with in Google Ads
- **SEO keyword difficulty and search intent**
- **Bing volume and CPC** - Bing Ads keyword data

### 🔧 Technical Details

- Data: Google Ads keyword data from a third-party data provider
- Output: streamed via Apify dataset
- Format: JSON, CSV, XLSX, or via Apify API
- Retries: up to 3 on rate limits and temporary provider errors; rate-limit errors wait 60 seconds, others back off 1s, 2s, 4s
- Rate limit: no more than 12 requests per minute to the provider's Google Ads endpoints
- Results pushed to the dataset after each batch; each keyword + location + language is delivered and charged at most once per run
- Batching: up to 1,000 keywords per metrics task, up to 20 seeds per ideas task, tasks sent one at a time
- Concurrency: 1 (sequential tasks)
- Per-run safety limit: a very large run can stop early at a fixed per-run limit; the run's status message says how many keywords were not processed. Split very large inputs across several runs.

## Apify Actor - Terms of Service

**Version:** 4.0
**Effective Date:** May 5, 2026

***

### 0. ACCEPTANCE BY USE - IMPORTANT

**Read this section first.**

These Terms of Service ("Terms") form a binding legal agreement between you ("User," "you," "your") and UnseenUser, the Publisher of this Apify actor ("UnseenUser," "the Publisher," "we," "us," "our").

#### 0.1 How You Accept These Terms

You accept these Terms by **any of the following actions**, each of which constitutes a clear, affirmative act of acceptance:

- (a) **Running the Actor** - Initiating any execution of the Actor on the Apify platform
- (b) **Using any output** returned by the Actor for any purpose
- (c) **Continuing to access** the Actor's listing or documentation after these Terms are visible

#### 0.2 Continuing Acceptance

Each time you run the Actor or use its outputs, you reaffirm your acceptance of the then-current Terms. If you do not agree to these Terms or any subsequent update, you must stop using the Actor immediately.

#### 0.3 No Anonymous Acceptance

You cannot disclaim acceptance by:

- Failing to read these Terms before running the Actor
- Running the Actor through automated systems
- Sharing your Apify account with others who may not have read these Terms

By the act of running the Actor on Apify, you bind yourself, your organization (if applicable), and any individuals or systems acting on your behalf or under your authority.

#### 0.4 If You Do Not Accept

**If you do not agree to these Terms, you must not run the Actor.** No use is authorized without acceptance.

***

### PREAMBLE - UNDERSTANDING THE ARCHITECTURE

Before using the Actor, please understand the technical architecture of the service:

#### The Data Flow

```
You (User) → Apify Platform → Actor (software) → Third-Party API → Source Platform
                                                       ↓
You (User) ← Apify Platform ← Actor (software) ← Third-Party API
```

#### What Each Party Does

- **You (the User):** Run the Actor on the Apify platform with input parameters you choose
- **Apify:** Operates the cloud infrastructure that hosts and executes Actors. Apify is a Czech-incorporated company (Apify Technologies s.r.o.) governed by its own Terms of Service.
- **The Publisher (us):** Publishes software code (the Actor) on Apify's platform. The Actor is a thin wrapper that translates your input into requests to a third-party API and returns the API's responses to you. **The Publisher does not operate scraping infrastructure. The Publisher does not store or retain data returned by the Actor. The Publisher does not see, log, or process the personal data of any individuals returned in the Actor's outputs beyond what is incidental to passing the data through.**
- **Third-Party API Provider:** DataForSEO (https://dataforseo.com). This is an independent third-party company that operates data infrastructure and databases that provide search-market estimates and returns them.
- **Source Platform:** Google (search and advertising data), via DataForSEO's own databases. This is the platform whose data is provided by the Third-Party API Provider.

#### Why This Matters

Your relationship with the Publisher is that of a **software user** to a **software vendor**. The Publisher has the responsibilities of a software vendor (functional code, accurate documentation) and the limits of one (the Publisher is not responsible for how you use the data you obtain).

***

These Terms operate alongside but do not replace:

- Apify's Terms of Service and Acceptable Use Policy (governing your relationship with Apify)
- DataForSEO Terms of Service (governing the underlying data infrastructure)
- Source Platform terms (Google, for search and advertising data) governing the data provided
- Applicable law in your jurisdiction and the jurisdictions of data subjects

These Terms incorporate the actor-specific addendum published in each Actor's individual listing ("Addendum"). In the event of a conflict, the more restrictive provision applies.

***

### 1. NATURE OF THE SERVICE

#### 1.1 What the Actor Is

The Actor is a software program published on the Apify platform. Each Actor:

- (a) Accepts structured input from you on the Apify platform
- (b) Translates that input into HTTP requests to a third-party API operated by DataForSEO
- (c) Receives HTTP responses from that third-party API
- (d) Returns the response data to you in a structured format on the Apify platform

The Actor's source code is hosted on Apify's infrastructure. The Actor runs in Apify's cloud, not on the Publisher's servers. The Publisher operates no servers running the Actor.

#### 1.2 What the Actor Is Not

The Actor is **not**:

- (a) A scraping tool - the Publisher does not operate scraping infrastructure, proxies, headless browsers, or fake accounts
- (b) A direct connection to any source platform - connections to the source platform are made by DataForSEO
- (c) A data storage or data retention service - the Publisher does not maintain a database of any data the Actor returns
- (d) A licensed access channel to Google (search and advertising data), via DataForSEO's own databases, or any other source platform
- (e) Affiliated with, endorsed by, sponsored by, or authorized by any source platform

#### 1.3 The Publisher's Limited Role

The Publisher's role is limited to:

- (a) Designing and writing the Actor's source code
- (b) Publishing the Actor on the Apify Store
- (c) Maintaining the Actor (updating it when API providers change schemas)
- (d) Providing documentation and customer support via Apify's contact mechanism

The Publisher is a software vendor, similar to a developer who publishes an app on the Apple App Store or Google Play Store. The Publisher is not a data provider, data broker, data processor, or data controller for purposes of GDPR, CCPA, Israel's Privacy Protection Law, or equivalent.

#### 1.4 The Third-Party API Provider's Role

DataForSEO (https://dataforseo.com) is an independent third-party company. It:

- (a) Operates the actual data infrastructure and databases
- (b) Maintains relationships with the Source Platform (or accepts the operational risk of accessing public data without such relationships)
- (c) Provides its own Terms of Service governing its operations
- (d) Is responsible for compliance obligations relating to the data collection itself

The Publisher is a customer of this provider. The Publisher is not its agent, partner, or representative.

***

### 2. WHO MAY USE THE ACTOR

#### 2.1 Eligibility

You may use the Actor only if:

- (a) You are at least 18 years old or the age of majority in your jurisdiction
- (b) You have legal capacity to enter into binding contracts
- (c) You are not located in or resident of a country subject to comprehensive sanctions by the United States, European Union, United Kingdom, or Israel
- (d) You are not on any prohibited persons list

#### 2.2 User Representations

By using any Actor, you represent and warrant that:

- (a) **Truthful identity:** Information you provide about your identity and intended use is accurate
- (b) **Lawful intent:** Your intended use complies with applicable law in your jurisdiction
- (c) **Source platform compliance:** You will independently comply with the Terms of Service of any source platform whose data you obtain through the Actor
- (d) **Data subject rights:** Where Actor outputs include personal data, you will respect data subject rights under applicable law
- (e) **No prohibited use:** You will not use the Actor for any of the purposes prohibited in Section 4

These representations are continuous - they must remain true throughout your use.

***

### 3. PERMITTED USES

The Actor may be used for any lawful purpose, including:

- Market research and competitive analysis
- Academic research
- Journalism and investigative reporting
- Internal business intelligence
- Brand monitoring
- Recruitment research where consistent with applicable employment law
- Building products that further process publicly available information lawfully

Specific permitted uses for each Actor are described in that Actor's individual listing and Addendum.

***

### 4. PROHIBITED USES

You may not use the Actor for any of the following:

#### 4.1 Illegal Activity

Activity illegal under the law of your jurisdiction, the User's jurisdiction, or the jurisdiction of any data subjects.

#### 4.2 Harassment, Stalking, and Personal Targeting

- Compiling profiles for harassment, stalking, or doxxing
- Tracking individuals' movements or activities without their knowledge
- Building profiles of journalists, activists, dissidents, or vulnerable populations for retaliatory purposes

#### 4.3 Discrimination

- Using outputs for discriminatory employment, lending, housing, or insurance decisions based on protected characteristics
- Building lists for discriminatory purposes

#### 4.4 Spam and Unsolicited Commercial Communication

- Sending unsolicited marketing in violation of CAN-SPAM, CASL, GDPR, PECR, Israeli Anti-Spam Law (סעיף 30א לחוק התקשורת), or equivalent laws
- Building "lead lists" from scraped contacts without proper consent infrastructure
- Reselling contact data for spam purposes

#### 4.5 Fraud and Deception

- Identity theft or impersonation
- Generation of fake reviews, testimonials, or coordinated inauthentic behavior
- Election interference or political disinformation
- Securities fraud

#### 4.6 Source Platform Abuse

- Using outputs to circumvent technical protection measures of source platforms
- Creating fake accounts on source platforms based on Actor outputs
- Vote manipulation, engagement manipulation, or platform algorithm gaming
- Building services that competitively substitute for source platforms

#### 4.7 Reselling the Actor's Service

- Reselling raw Actor outputs as your own data product or scraping-as-a-service
- Sharing your Apify credentials to provide third parties indirect access
- Building competing API services using Actor outputs

#### 4.8 AI Training Without Authorization

- Using Actor outputs as training data for commercial AI/ML models without separate licensing authority from the source platform

#### 4.9 Sensitive Targeting

- Specifically targeting or profiling based on health conditions, sexual orientation, religious beliefs, political opinions, or other sensitive characteristics
- Targeting children under 16 (or local age of consent for data processing)

#### 4.10 Privacy Law Violations

- Processing personal data of EU/UK/California/Israeli residents without complying with applicable privacy law
- Failing to honor data subject access, deletion, or objection requests
- Processing data for purposes incompatible with its publication context

***

### 5. SOURCE PLATFORM TERMS - YOUR RESPONSIBILITY

#### 5.1 Acknowledgment

The Actor accesses data from a third-party platform ("Source Platform") through the Third-Party API Provider (DataForSEO). The Source Platform is Google (search and advertising data), via DataForSEO's own databases.

#### 5.2 Your Sole Responsibility

You acknowledge:

- (a) **You are solely responsible for ensuring your downstream use of data obtained through the Actor complies with the Source Platform's Terms of Service**
- (b) The Publisher makes no representation that any specific use is permitted under any Source Platform's terms
- (c) The Third-Party API Provider, not the Publisher, bears responsibility for the lawfulness of the data collection itself
- (d) You should review Source Platform terms before commercial use:
  - Google Terms of Service: https://policies.google.com/terms
  - Google Ads Terms & Conditions (find the version for your country): https://support.google.com/adspolicy/answer/54818
  - DataForSEO Terms of Service: https://dataforseo.com/terms-of-service
  - DataForSEO Privacy Policy: https://dataforseo.com/privacy-policy

#### 5.3 Cease-and-Desist Compliance

If you receive a cease-and-desist letter or other legal demand from a Source Platform regarding your use of Actor outputs, you must:

- (a) Cease the contested use immediately
- (b) Notify UnseenUser within 48 hours via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser)
- (c) Cooperate with the Publisher as needed to mitigate
- (d) Not assert against the Publisher any claim arising from your inability to use the Actor for that Source Platform

***

### 6. DATA PROTECTION - REFLECTING ACTUAL ARCHITECTURE

#### 6.1 Roles Under Privacy Law

For purposes of GDPR, UK GDPR, CCPA, Israel's Privacy Protection Law (PPL) including Amendment 13, and equivalents:

- **You (the User) are the Data Controller** of any personal data you obtain through the Actor and subsequently process for your own purposes
- **DataForSEO** is the entity that collects and provides data from the Source Platform - it bears the responsibilities of a data processor or controller (depending on context) for the collection itself
- **The Publisher acts solely as a software vendor**, not as a data controller or processor, because the Publisher does not store, retain, or substantively process personal data - the Actor merely passes API responses through

#### 6.2 No Data Retention by the Publisher

The Publisher confirms:

- (a) The Publisher does not maintain a database of personal data obtained through the Actor
- (b) The Actor passes data from the Third-Party API directly to you on the Apify platform - data does not flow through the Publisher's infrastructure
- (c) Apify's standard execution and operational logging may include limited information about Actor runs (input parameters, run duration, data volume) - this is governed by Apify's own privacy practices
- (d) The Publisher does not access, view, or analyze your Actor outputs except as needed for technical support if you specifically share them with the Publisher

#### 6.3 Your Obligations as Data Controller

Where your use of the Actor involves processing personal data, you are responsible for:

- (a) Establishing a lawful basis for your processing (consent, legitimate interest with documented balancing test, contract, etc.)
- (b) Providing transparent notice to data subjects as required by applicable law
- (c) Honoring data subject access, rectification, erasure, restriction, and portability requests
- (d) Implementing appropriate security measures
- (e) Conducting Data Protection Impact Assessments where required
- (f) Appointing a Data Protection Officer if your operations require one
- (g) Registering databases with applicable supervisory authorities
- (h) Honoring opt-out requests for direct marketing
- (i) Cross-border transfer safeguards where data crosses borders

#### 6.4 Israel's Amendment 13 - User Compliance

If your use of the Actor involves Israeli residents' personal data, you must comply with the Privacy Protection Law as amended (Amendment 13, effective August 14, 2025). These obligations are yours as the data controller, not the Publisher's as the software vendor.

#### 6.5 Sensitive Data Targeting Restrictions

You will not use the Actor to specifically target, profile, or build datasets focused on:

- Health or medical conditions
- Religious beliefs
- Political opinions
- Sexual orientation or gender identity
- Genetic or biometric data
- Criminal history
- Children under 16

***

### 7. INTELLECTUAL PROPERTY

#### 7.1 Actor Code

The Actor's source code, schemas, documentation, and branding are owned by the Publisher. You receive a limited, non-exclusive, non-transferable, revocable license to use the Actor for permitted purposes during your active subscription/run with Apify.

#### 7.2 Output Data

The Publisher claims no ownership over the public data the Actor returns. Source Platforms may have copyright, database rights, or other rights in their data; data subjects may have copyright in user-generated content. Your use of output data must respect these rights independently.

#### 7.3 Restrictions

You may not reverse engineer, decompile, or reuse the Actor's code in a competing actor.

#### 7.4 Feedback

Feedback you provide may be used by the Publisher to improve products without compensation to you.

***

### 8. PRICING AND PAYMENT

#### 8.1 Apify Platform Billing

Pricing is administered through Apify's pricing models. Apify processes all payments. Apify's payment terms govern refunds and disputes.

#### 8.2 Pricing Changes

The Publisher may change Actor pricing with at least 14 days' notice via the Actor's Apify listing.

#### 8.3 No Refunds for Misuse

If your access is suspended or terminated for breach of these Terms, you forfeit any unused balance and are not entitled to refunds.

***

### 9. SERVICE AVAILABILITY AND CHANGES

#### 9.1 No Uptime Guarantee

The Actor depends on:

- (a) The Apify platform
- (b) Underlying API provider (DataForSEO)
- (c) The Source Platform's continued availability

Any of these may change behavior, restrict access, or become unavailable without notice. The Publisher makes no uptime guarantees.

#### 9.2 Service Discontinuation

The Publisher may discontinue any Actor at any time. Reasonable notice will be provided when feasible.

***

### 10. DISCLAIMERS

#### 10.1 "AS IS" Service

THE ACTOR IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR PURPOSE, NON-INFRINGEMENT, OR ACCURACY OF DATA.

#### 10.2 No Representation of Lawfulness

The Publisher makes no representation that your specific use of the Actor or the data it returns is lawful in your jurisdiction or under any Source Platform's terms. The burden of determining lawfulness for your use case is yours.

#### 10.3 No Endorsement of Source Content

Content returned by the Actor was created by third parties. The Publisher does not endorse, verify, or take responsibility for it.

***

### 11. LIMITATION OF LIABILITY

#### 11.1 Aggregate Liability Cap

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE AGGREGATE LIABILITY OF THE PUBLISHER FOR ALL CLAIMS RELATING TO THE ACTOR EXCEED THE GREATER OF:

- (a) ONE HUNDRED U.S. DOLLARS (US $100), OR
- (b) THE AMOUNTS YOU PAID THROUGH APIFY FOR USE OF THE ACTOR IN THE THREE (3) MONTHS IMMEDIATELY PRECEDING THE EVENT

#### 11.2 Excluded Damages

THE PUBLISHER IS NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF PROFITS, REVENUE, OR DATA, EVEN IF ADVISED OF THE POSSIBILITY.

#### 11.3 Time Limit

Any claim must be brought within one (1) year of the event.

***

### 12. INDEMNIFICATION

#### 12.1 Your Indemnification of the Publisher

You agree to defend, indemnify, and hold harmless the Publisher from any:

- Claims arising from your use of the Actor
- Claims arising from your violation of these Terms
- Claims arising from your violation of any law (including privacy law)
- Claims arising from your violation of any Source Platform's Terms of Service
- Claims arising from your processing of personal data obtained through the Actor
- Reasonable attorneys' fees and costs of defending such claims

#### 12.2 Defense

The Publisher may assume defense at your expense. You will cooperate with the Publisher's defense.

#### 12.3 Scope

The indemnification covers reasonable, foreseeable third-party claims arising from your use. It does not extend to:

- Claims arising from the Publisher's gross negligence or willful misconduct
- Claims regarding the Actor's source code itself (those are the Publisher's responsibility)
- Claims regarding the Third-Party API Provider's data collection (that is its responsibility)

***

### 13. SUSPENSION AND TERMINATION

#### 13.1 Termination by the Publisher

The Publisher may terminate your access for material breach, illegal use, breach of warranty, or upon credible legal demand.

#### 13.2 Effects of Termination

Your license ends, you must cease use, and applicable provisions survive.

#### 13.3 Termination by You

You may stop using the Actor at any time on Apify.

***

### 14. DISPUTE RESOLUTION

#### 14.1 Informal Resolution First

Send a detailed written description of the dispute via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) and wait 60 days for resolution attempt before any formal claim.

#### 14.2 Governing Law

These Terms are governed by the substantive laws of the State of Israel, without regard to conflict of law principles.

#### 14.3 Exclusive Jurisdiction

Any dispute shall be brought exclusively in the competent civil courts of Tel Aviv-Jaffa, Israel.

#### 14.4 No Class Actions

You agree to bring claims only in your individual capacity.

#### 14.5 Attorneys' Fees

The prevailing party recovers reasonable attorneys' fees.

***

### 15. MISCELLANEOUS

#### 15.1 Entire Agreement

These Terms (with Addendum and incorporated documents) are the entire agreement.

#### 15.2 Severability

Unenforceable provisions are reformed to the minimum extent or severed.

#### 15.3 Assignment

You may not assign without the Publisher's consent. The Publisher may assign to affiliates, successors, or acquirers.

#### 15.4 Force Majeure

Neither party is liable for failure due to events beyond reasonable control, including changes by the Source Platform or the Third-Party API Provider, or actions by Apify.

#### 15.5 Third-Party Beneficiaries

Apify and DataForSEO are intended third-party beneficiaries of Sections 4 (Prohibited Uses), 5 (Source Platform Compliance), and 12 (Indemnification).

#### 15.6 Survival

Sections 0 (Acceptance), 4, 5, 6, 7, 10, 11, 12, 14, and 15 survive termination.

#### 15.7 Language

English controls. Translations are for convenience only.

#### 15.8 Publisher Identification for Legal Process

The Publisher operates on the Apify platform under the username **UnseenUser** (apify.com/UnseenUser). The Publisher is a registered legal entity. Upon receipt of valid legal process (subpoena, court order, or equivalent) directed through Apify's official channels, the Publisher's full legal identity may be disclosed as required by law. This Section ensures that you have a valid path to legal recourse if needed.

***

### 16. ACKNOWLEDGMENT

By using any Actor, you acknowledge that:

- (a) You have read these Terms
- (b) You understand the architecture: you are using software (the Actor) on Apify's platform that calls third-party APIs
- (c) You accept responsibility for your use, including for compliance with Source Platform terms
- (d) Your indemnification obligations cover third-party claims arising from your use
- (e) Disputes are resolved in Israeli courts
- (f) The Publisher's identity, while not publicly disclosed in this listing, can be obtained through valid legal process via Apify

For questions, use UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) before running the Actor.

***

### APPENDIX - Document Version History

| Version | Date | Summary |
|---------|------|---------|
| 1.0 | May 5, 2026 | Initial publication |
| 2.0 | May 5, 2026 | Hardened (over-broad - treated User as data broker) |
| 3.0 | May 5, 2026 | Architecturally accurate - Publisher as software vendor |
| 4.0 | May 5, 2026 | **Anonymous Publisher.** All personally identifying information removed. Acceptance-by-Use mechanism formalized. |

***

## 🛡️ Part 4: Actor-Specific Terms of Service Addendum

### 🛡️ Actor-Specific ToS Addendum - 🔑 Keyword Search Volume, CPC & Competition

This addendum supplements the Master Terms of Service V4.0. By running this Actor, you accept both the Master ToS and this addendum.

#### A. Architectural Disclosure

This Actor is a software wrapper. It accepts your input parameters, calls one of two DataForSEO endpoints depending on the mode you choose (`/keywords_data/google_ads/search_volume/live` for metrics, `/keywords_data/google_ads/keywords_for_keywords/live` for ideas), computes trend and change fields from the returned monthly history, and returns the data to you on the Apify platform. UnseenUser does not store, log, or substantively process the data returned. The data flows from DataForSEO through Apify's runtime directly to you. No results are cached between runs.

#### B. Nature of Data Returned

This Actor returns aggregate keyword statistics from Google's advertising systems, as provided by DataForSEO: estimated average monthly search volume, 12 months of monthly search estimates, average cost per click in USD, Google Ads advertiser competition (LOW/MEDIUM/HIGH and a 0-100 index), and top-of-page bid range estimates. In ideas mode it also returns keyword suggestions generated by Google Ads for your seed keywords. The Actor adds computed fields (trend, month-over-month and year-over-year change) and status fields. It does not return names, profiles, contact details or any content authored by individuals.

Where the Actor's output includes individual people's names, photos, contact details, or content authored by them, that data constitutes **personal data** subject to GDPR, CCPA, Israeli Privacy Protection Law (including Amendment 13), and equivalent privacy laws in your downstream processing - but **only in your hands as the data controller**, not in UnseenUser's hands as the software vendor. For this Actor, such data is not expected in normal output; if a keyword itself contains a person's name (for example a search for a named individual), treat that keyword and its statistics with the same care.

#### C. Permitted Use Cases

You may use this Actor for the following purposes (non-exhaustive list):

- **SEO content planning** - Rank a topic list by real monthly demand before writing anything
- **PPC budget planning** - Use CPC and top-of-page bid ranges to estimate cost before launching campaigns
- **Keyword expansion** - Turn 5-20 seed topics into hundreds of related keywords with volumes
- **Seasonality checks** - Read the 12-month history and trend to time launches and content
- **Market sizing** - Compare demand for products or services across countries and languages
- **Client reporting** - Pull volumes for an agency client's keyword set without seat-based tools
- **Automation pipelines** - Feed volumes into Sheets, Make, n8n or an AI agent via API or MCP

#### D. Specifically Prohibited Uses

In addition to Master ToS Section 4 prohibitions, you may NOT:

- Resell raw output as a keyword database, keyword-volume dataset, or keyword-data API (Master ToS 4.7)
- Use the data to compete with or adversely affect Google's business interests, including building a substitute for Google Ads or Keyword Planner as a product (DataForSEO Terms of Service, Section 7.1)
- Present Google Ads advertiser competition as SEO keyword difficulty, ranking difficulty, or a guarantee of organic results in any product or client deliverable
- Present estimates as exact search counts, audited figures, or guaranteed traffic in contracts, investor materials, or regulatory filings
- Use keyword volumes on health, religion, sexual orientation, political or other sensitive topics to profile or target individuals (Master ToS 4.9, 6.5)
- Use the Actor to research keywords for scams, phishing, counterfeit goods, or other unlawful advertising
- Share your Apify credentials or run outputs as a service so third parties get indirect access to the Actor

#### E. Platform Terms of Service Considerations

The data originates from Google's advertising systems and is provided by DataForSEO from its own data infrastructure and databases. Google's Terms of Service and its advertising terms govern Google's services; DataForSEO's Terms of Service govern the data you receive through it, and Section 7.1 of DataForSEO's terms states that search engine data must not be used to compete with or adversely affect the search engine providers it comes from. DataForSEO bears responsibility for the lawfulness of its own data collection. Your downstream use must independently comply with Google's terms and DataForSEO's terms.

If Google or DataForSEO issues a cease-and-desist regarding data obtained via this Actor, notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser) and cease your use immediately.

#### F. Combined-Endpoint Data Sensitivity

This Actor combines two endpoints, selected by mode. Unlike combined actors that join profile data with behavioral data, this combination does not raise sensitivity:

- Search volume alone: low sensitivity (aggregate statistics about keywords you chose)
- Keyword ideas alone: low sensitivity (Google-generated suggestions with the same aggregate statistics)
- **Combined**: still aggregate keyword statistics. No dataset about individuals results from using both modes.

The risk that does grow with scale is commercial, not personal: very large outputs start to look like a keyword database. See Section K. Use the combined output for your own research, client work, and products, not as a resold dataset.

#### G. Estimates, Not Measurements - Accuracy and Grouping

Every number this Actor returns is an estimate from Google Ads, passed through by DataForSEO:

- **Volumes are estimates.** They are not exact counts of searches and can differ from Google Search Console, analytics data, or other tools.
- **Close variants are grouped.** Google Ads provides combined search volume for groups of similar keywords (plurals, misspellings, word order). Several of your keywords can show the same combined number.
- **Spelling corrections.** If a keyword looks misspelled, data may be returned for the corrected spelling; the `spell` field shows this.
- **Gaps.** Google returns no data for some keyword groups, very low-volume terms, and some restricted topics. These rows are marked `no_data` and never charged.
- **Monthly refresh lag.** The newest month appears only after Google updates its data; `data_as_of` shows the latest month in each row.
- **Computed fields.** `trend`, `mom_change_pct` and `yoy_change_pct` are calculated by the Actor from the monthly history using the rules in the README. They inherit every limitation above.

Do not use these estimates as the sole basis for financial commitments, contractual traffic guarantees, or legal claims.

#### H. NOT SEO Difficulty - Disambiguation

The `competition` and `competition_index` fields measure **Google Ads competition (advertiser)**: how many advertisers compete for ad placement on a keyword in paid results. They do **not** measure how hard it is to rank organically.

SEO keyword difficulty is on the roadmap as a separate feature.

#### I. Cost Disclosure and Charging Rules

This Actor charges a **$0.10 start fee per run** plus **$6 per 1,000 keywords with data**.

Never charged:

- Keywords with no data from Google (`status: no_data`)
- Invalid keywords (too long, too many words, disallowed symbols)
- Rows dropped by `minVolume`
- Ideas beyond `maxIdeas`
- Keywords that still fail after retries (`status: error`)
- Any keyword already delivered earlier in the same run (each keyword + location + language is pushed and charged at most once, even when a batch is retried)

**Ideas mode cost control:** ideas mode bills per output row (each idea returned), not per seed. One seed list can produce up to 20,000 ideas. The Actor stops pushing and charging once `maxIdeas` rows are delivered (default 1,000; `0` removes the cap). Keep `maxIdeas` at the number you need and set **Max cost per run** in Apify's run options before large runs. When the run reaches your cost limit, the Actor stops sending new requests and finishes cleanly.

#### J. Rate Limit and Large Runs

DataForSEO's documentation states that no more than 12 requests per minute per account may be sent to Google Ads Live endpoints. Each metrics request carries up to 1,000 keywords, so the ceiling is about 12,000 keywords per minute. The Actor sends one request at a time and waits out the rate window when the provider signals the limit. Very large runs (over ~12,000 keywords) take a minute or more per 12,000 keywords. Because the limit is per provider account, concurrent runs by different users share it; a busy period can slow your run but does not charge you more.

#### K. Redistribution and Competitive Use

What you may do with the output:

| Use | Status |
|---|---|
| Use volumes in your own content, SEO or PPC planning | ✅ Permitted |
| Include volumes in reports and deliverables for your clients | ✅ Permitted |
| Show volumes inside your own product as part of a larger feature (for example a content brief tool) | ✅ Generally permitted; check DataForSEO's terms for your specific product |
| Publish a few figures in an article or case study with attribution to Google Ads estimates | ✅ Permitted |
| Sell bulk exports of keyword volumes as a dataset | ❌ Prohibited - reselling raw output (Master ToS 4.7) |
| Offer a public "keyword volume API" or "Keyword Planner replacement" built on this output | ❌ Prohibited - competing service (Master ToS 4.6, 4.7; DataForSEO ToS 7.1) |
| Train a commercial AI model on large volumes of this output | ❌ Prohibited without separate licensing (Master ToS 4.8) |

#### L. Sensitive Keyword Categories

Keyword lists can reveal sensitive information even though the output is aggregate:

- **Health, legal, financial hardship, religion, sexuality, politics** - researching demand for these topics is lawful market research. Using the results to target or profile individuals is prohibited (Master ToS 4.9 and 6.5).
- **Client confidentiality** - your keyword list may reveal a client's launch plans or strategy. Keep run inputs and outputs confidential to the extent your client relationship requires. Apify stores run inputs and datasets in your account under Apify's own retention settings.
- **Adult keywords** - the Actor does not request adult keywords (the provider default excludes them). Google may still return no data for restricted topics.
- **Political advertising** - keyword research for political campaigns must comply with election and political advertising laws in the target country.

#### M. Cease-and-Desist Protocol

If Google, DataForSEO, or a regulator contacts UnseenUser regarding your use:

- UnseenUser will notify Apify
- UnseenUser may suspend access to this Actor pending investigation
- You agree to provide documentation of your use upon reasonable request

If you receive a demand from Google or DataForSEO regarding data obtained through this Actor:

- Cease the contested use immediately
- Notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser)
- Document the demand and your response

# Actor input Schema

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

metrics: one row per keyword you send. ideas: related keywords Google Ads suggests for your seed keywords (up to 20 seeds per request), each with full metrics.

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

Metrics mode: keywords to measure, any total (sent in batches of up to 1,000). Ideas mode: seed keywords (sent in batches of up to 20). Max 80 characters and 10 words per keyword; emojis and some symbols are not allowed. Provide this or 'Keywords (paste a list)'.

## `keywordsText` (type: `string`):

One keyword per line or comma-separated. Merged with 'Keywords'.

## `country` (type: `string`):

ISO code (US, GB, DE...), Google Ads location code (2840) or full location name in the Google Ads format (London,England,United Kingdom).

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

Language code (en, de, es...) or language name (Spanish).

## `searchPartners` (type: `boolean`):

Include searches on Google search partner sites in the volumes.

## `maxIdeas` (type: `integer`):

⚠️ COST CONTROL: Ideas mode bills per idea returned, not per seed. The run stops pushing and charging once this many ideas are delivered. 0 returns every idea the data source gives for your seeds; cost grows with the number of keyword results, so set a maximum cost per run in Apify if needed.

## `minVolume` (type: `integer`):

Drop rows below this average monthly search volume. Dropped rows are not charged.

## Actor input object example

```json
{
  "mode": "metrics",
  "keywords": [
    "buy laptop",
    "cheap laptops for sale"
  ],
  "country": "US",
  "language": "en",
  "searchPartners": false,
  "maxIdeas": 1000,
  "minVolume": 0
}
```

# Actor output Schema

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

No description

# 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": [
        "buy laptop",
        "cheap laptops for sale"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("unseenuser/keyword-search-volume").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": [
        "buy laptop",
        "cheap laptops for sale",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("unseenuser/keyword-search-volume").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": [
    "buy laptop",
    "cheap laptops for sale"
  ]
}' |
apify call unseenuser/keyword-search-volume --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unseenuser/keyword-search-volume"
        }
    }
}
```

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/gao60OL43dZLKnIWB/builds/LTuXMhHAljKgibNRX/openapi.json
