# Keyword Search Volume by Country - Find Your Best Markets (`wrenfield-data/keyword-demand-by-country`) Actor

Check one keyword list in up to 94 countries in a single run. Search volume, CPC, difficulty and trend per country, ranked by market, with a report and keyword x country matrix. LATAM, MENA, Europe, SEA, Africa presets.

- **URL**: https://apify.com/wrenfield-data/keyword-demand-by-country.md
- **Developed by:** [Wrenfield Data](https://apify.com/wrenfield-data) (community)
- **Categories:** SEO tools, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 keyword x country with search volumes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 by Country — Find Your Best Markets

**Check one keyword list in up to 94 countries in a single run, and get back a ranked answer: which markets have the demand, what clicks cost there, how hard it is to rank, and whether it is growing.** No Google Ads account, no country-by-country copy-paste.

Most keyword volume tools check **one country per run**. If you sell in Latin America, the Gulf, Europe or Southeast Asia, that means 10–30 runs and a spreadsheet to stitch them together. This Actor does the whole sweep at once and hands you:

- a **keyword × country table** (volume, CPC in USD, competition, keyword difficulty, search intent, year-over-year trend, peak month, 12-month history);
- **markets ranked** by total demand and search value;
- **the best market for every keyword** (biggest, easiest to win, highest CPC) with each market's share;
- a **keyword × country matrix CSV** and a **one-page HTML report** you can send to a client or a founder.

### Who uses it

- **Brands and online stores choosing where to expand**: "Is there demand for our product in Mexico, Brazil or Colombia, and where is it cheapest to advertise?"
- **SaaS and B2B teams going international**: check your category ("crm software", "e-invoicing", "pos system") and competitor brand names across the Gulf, Europe or LATAM before you localize.
- **Affiliate and media buyers**: see which countries search a product or brand most, and what the clicks cost, before you launch campaigns.
- **Agencies with clients in several countries**: one run per client instead of one per country.
- **AI agents and automations** (n8n, Make, Zapier, Apify API/MCP): one call returns the full market comparison as clean JSON.

### Market presets

`LATAM` (16 countries), `GCC`, `MENA`, `EUROPE` (20), `DACH`, `NORDICS`, `SEA`, `SOUTH_ASIA`, `AFRICA` (12), `ENGLISH` (11 English-speaking markets), `G20`, or `ALL` (all 94 covered markets). Add any extra country by name, 2-letter code or location code.

**Languages are handled for you.** Search volume is measured per country. Each country is searched in its main language first. Anything not found there is retried in the country's other covered languages, for example UAE English then Arabic, Canada English then French, or Switzerland German, French, then Italian. Each row says which language matched.

### Example output (real run, Nov 3, 2026)

Input: `odoo`, `zatca`, `shopify`, `برنامج محاسبي` ("accounting software" in Arabic) and `nomina` ("payroll" in Spanish), checked in Saudi Arabia, the UAE and Mexico.

| keyword | country | monthly searches | CPC (USD) | difficulty | intent | YoY | opportunity |
|---|---|---|---|---|---|---|---|
| odoo | Mexico | 74,000 | 2.15 | 8 | informational | 0% | 100 |
| odoo | Saudi Arabia | 22,200 | 3.55 | 79 | informational | 0% | 83 |
| odoo | United Arab Emirates | 14,800 | 3.24 | 46 | informational | −18.2% | 74 |
| zatca | Saudi Arabia | 22,200 | 4.23 | 26 | informational | −18.5% | 79 |
| zatca | United Arab Emirates | 880 | 4.74 | 0 | informational | −28.0% | 55 |

Markets ranked:

| # | country | keywords with demand | monthly searches | avg CPC | avg difficulty |
|---|---|---|---|---|---|
| 1 | Mexico | 3 of 5 | 205,000 | $1.72 | 21.3 |
| 2 | Saudi Arabia | 4 of 5 | 60,500 | $6.71 | 53.2 |
| 3 | United Arab Emirates | 4 of 5 | 48,810 | $3.01 | 41.7 |

What the run shows: Mexico has the most searches, and they are the easiest to rank for. Saudi Arabia's clicks cost about 4x as much as Mexico's, and its e-invoicing demand ("zatca") is almost entirely Saudi.

### Input

```json
{
  "keywords": ["crm software", "hubspot", "zoho crm", "salesforce"],
  "marketGroups": ["LATAM", "GCC"],
  "markets": ["Spain"],
  "minSearchVolume": 0
}
```

- `keywords`: up to 1,000 per run. Brand, product and software names work in every market. For generic phrases, also add the local-language versions (for example "running shoes", "zapatillas running", "tênis de corrida").
- `marketGroups` and/or `markets`: up to 94 countries.
- `language` (optional): the language to search first.
- `minSearchVolume`: rows below this are returned free with a note.
- `includeEmptyRows`: also list pairs with no demand (always free).

### Output fields (one row per keyword × country)

`keyword`, `country`, `country_code`, `language`, `search_volume`, `cpc_usd`, `competition`, `keyword_difficulty` (0–100), `search_intent`, `monthly_search_value_usd` (volume × CPC: an upper-bound index for comparing markets, not a forecast), `trend` (rising / steady / falling), `trend_yoy_pct`, `trend_3m_pct`, `peak_month`, `monthly_searches` (12 months), `opportunity_score` (0–100 within the run: volume weighted by difficulty, +10% when rising), `found`, `note`.

Key-value store: `REPORT.html` (ranked report), `MARKETS` (markets ranked), `KEYWORDS` (best market per keyword), `MATRIX.csv` (keyword × country volumes), `SUMMARY`.

### Pricing (pay per event)

- **$0.03 per country checked** (each block of up to 700 keywords).
- **$0.004 per keyword × country row with search volume.** Rows with no measurable demand are free.
- Example: 50 keywords × 16 LATAM countries is at most 16 × $0.03 + 800 × $0.004 = **$3.68**, and less when some pairs have no demand. Paid Apify plans get tier discounts.
- **Free Apify plan:** 5 keywords × 5 countries per run, 50 rows a day.
- Set "Maximum cost per run" and the Actor checks as many countries as fit, never more.

### Data and limits

- Volumes, CPC and competition come from a Google Ads-based keyword database. Values are monthly averages (latest 12 months), refreshed monthly, measured at country level. Use the sister Actor **Keyword Search Volume** (wrenfield-data/keyword-search-volume) for cities, regions and live Keyword Planner lookups.
- Google rounds volumes into steps (for example 14,800 then 18,100), so small differences between countries are not meaningful.
- Very rare or brand-new phrases may have no data in some countries. Those rows are free.
- 94 countries are covered. China (Google is not used there) and a few small markets are not.

### Related Wrenfield Data Actors

- **Keyword Search Volume** (wrenfield-data/keyword-search-volume): city- and region-level volumes, keyword ideas.
- **AI Search Volume Checker** (wrenfield-data/ai-search-volume-checker): how often topics are asked in AI tools.
- **AI Search Visibility Tracker** (wrenfield-data/ai-search-visibility-tracker): whether ChatGPT, Perplexity and Google AI mention your brand.

# Actor input Schema

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

Up to 1,000 keywords. Brand, product and software names work in every market; for other phrases, add the local-language versions too (e.g. 'running shoes', 'zapatillas running', 'tenis para correr').

## `marketGroups` (type: `array`):

Preset country groups: LATAM, GCC, MENA, EUROPE, DACH, NORDICS, SEA, SOUTH_ASIA, AFRICA, ENGLISH, G20, ALL (all 94 markets).

## `markets` (type: `array`):

Extra countries by name, 2-letter code or location code (e.g. 'Saudi Arabia', 'AE', 'BR', 2840). Combined with the groups above.

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

Optional. Search volume is measured per country (all languages together). The language only decides which keyword list is searched first: by default the country's main language, then its other covered languages (e.g. UAE English then Arabic, Canada English then French) for anything not found.

## `minSearchVolume` (type: `integer`):

Rows below this are returned free with a note (or dropped if 'Include empty rows' is off).

## `includeEmptyRows` (type: `boolean`):

Also list keyword x country pairs with no measurable demand (never charged).

## Actor input object example

```json
{
  "keywords": [
    "shopify",
    "dropshipping",
    "crm software",
    "e-invoicing"
  ],
  "marketGroups": [
    "LATAM"
  ],
  "markets": [
    "United States",
    "Spain"
  ],
  "minSearchVolume": 0,
  "includeEmptyRows": true
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

## `report` (type: `string`):

No description

## `markets` (type: `string`):

No description

## `keywordSummary` (type: `string`):

No description

## `matrix` (type: `string`):

No description

## `allFields` (type: `string`):

No description

## `summary` (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": [
        "shopify",
        "dropshipping",
        "crm software",
        "e-invoicing"
    ],
    "marketGroups": [
        "LATAM"
    ],
    "markets": [
        "United States",
        "Spain"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("wrenfield-data/keyword-demand-by-country").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": [
        "shopify",
        "dropshipping",
        "crm software",
        "e-invoicing",
    ],
    "marketGroups": ["LATAM"],
    "markets": [
        "United States",
        "Spain",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("wrenfield-data/keyword-demand-by-country").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": [
    "shopify",
    "dropshipping",
    "crm software",
    "e-invoicing"
  ],
  "marketGroups": [
    "LATAM"
  ],
  "markets": [
    "United States",
    "Spain"
  ]
}' |
apify call wrenfield-data/keyword-demand-by-country --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wrenfield-data/keyword-demand-by-country"
        }
    }
}
```

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/PqYK7JVqFrHiWoFCa/builds/JUzkNewgIgvhO2L10/openapi.json
