# AI Keyword Volume Checker - LLM Search Demand (`winningsolutions/ai-keyword-volume-exporter`) Actor

Look up AI and LLM search volume for a keyword list. One dataset row per keyword with AI volume and monthly series. No Google metrics. Input list only.

- **URL**: https://apify.com/winningsolutions/ai-keyword-volume-exporter.md
- **Developed by:** [Winning Solutions](https://apify.com/winningsolutions) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.25 / 1,000 ai volume rows

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AI Keyword Volume Checker - LLM Search Demand

A **research Actor** that looks up **AI and LLM search volume** for your keyword list at scale. Enter **keywords**, **location**, and **language**. The Actor turns that input into structured results automatically.

It returns **structured JSON** with **keyword**, **ai\_search\_volume**, **ai\_monthly\_searches**, **location**, and **language**.

Designed for **SEO teams, agencies, and developers** who need AI keyword demand without a Google research suite, the Actor returns only AI volume fields in every row. Structured JSON. One row per keyword. No Google metrics in the output.

> ## AI-Volume-only Batch
>
> **Google metrics? Not here.**
>
> Pass a keyword array with location and language. Each result row carries only `ai_search_volume` and `ai_monthly_searches`, plus echo fields and `_metadata`. No Google volume, no intent flags, no expand modes. **Pure AI demand data in the first run.**

### Use Cases

- Check **AI search volume** for a keyword list without Google metrics
- Export **monthly AI volume series** as a YYYY-MM object for your own tools
- Batch **LLM keyword demand** lookups for content and SEO planning
- Feed **data pipelines** with one JSON row per keyword
- Run **small keyword lists** on a linear per-row price model

### Index

- [Release Notes](#release-notes)
- [Features](#features)
- [Use Cases](#use-cases)
- [Pricing](#pricing)
- [Input](#input)
- [Input Example](#input-example-keywords)
- [API and MCP usage](#api-and-mcp-usage)
- [Output Structure](#output-structure)
- [Output Example](#output-example)

### Release Notes

#### v0.0 - Initial public release

- **AI-volume-only output:** One dataset row per keyword with `ai_search_volume` and `ai_monthly_searches` only
- **Batch lookup:** Up to 1,000 keywords per run with location and language validation
- **Linear per-row pricing:** Pay per keyword row written, including null-volume rows

### Features

📊 **AI volume only:** Output columns are keyword, AI volume, monthly series, location echo, and language echo. No Google fields.

📄 **One row per keyword:** Input order is preserved. Duplicates stay as separate rows.

📅 **Monthly series object:** `ai_monthly_searches` uses YYYY-MM keys mapped to numeric values, not a nested array.

🌍 **Location and language validation:** Values are checked against the AI Keyword Data location list before the volume call.

🔢 **Optional maxResults cap:** Keep the first N keywords of your cleaned list before the API call.

⚡ **Null-volume rows stay visible:** Keywords without upstream volume return null fields and still count as charged rows.

📈 **Metadata on every row:** `_metadata.resultCharged` shows billing status. Error fields appear on diagnostic rows.

🛑 **Up to 1,000 keywords:** Runs above 1,000 cleaned keywords fail before any API call. No silent chunking.

### Pricing

#### Regular pricing

| Cost item | Rate |
| --------- | ---- |
| AI volume row (1 keyword) | $0.00425 |
| Per 1,000 AI volume rows | $4.25 / 1,000 keywords |
| Actor start | $0.00005 (infrequent) |
| Apify platform compute (RAM/time) | Billed by Apify platform pricing |

> **Cost per keyword: ~$0.00425** - Default run with 100 keywords costs about $0.42505 including actor start.

You pay only for keyword rows written with `resultCharged` true. There are no optional paid extras in v1.

#### Free plan limit

Runs from Apify free plan accounts are limited to 100 keywords per run.
The run finishes normally at that point and keeps every result already written.

#### Cost Examples

Based on the regular prices above.

**Scenario A: Small run (1 keyword)**

- Actor start: $0.00005
- 1 keyword: $0.00425
- **Total: ~$0.0043**

**Scenario B: Medium run (100 keywords)**

- Actor start: $0.00005
- 100 keywords: $0.425
- **Total: ~$0.42505**

**Scenario C: Full run (1,000 keywords)**

- Actor start: $0.00005
- 1,000 keywords: $4.25
- **Total: ~$4.25005**

### Input

The Actor accepts the following input parameters (see the **Input** tab in the Apify Console for the full, interactive schema):

| Parameter | Type | Required | Default | Description |
| --------- | ---- | -------- | ------- | ----------- |
| `keywords` | array of string | yes | none | Keywords to look up. One array entry equals one keyword. Empty entries after trim are dropped. No comma or newline split inside an entry. |
| `location` | string | yes | none | Market location name from the AI Keyword Data location list (example: United States). Not a location code. |
| `language` | string | yes | none | Language code for the estimate (example: en). Must be valid for the chosen location. |
| `maxResults` | integer | no | none | Optional cap. Keeps the first N keywords of the cleaned list before the API call. On Apify Free plan the Actor also caps at 100 keywords per run after this field (paid plans: up to 1000). |

#### Input Example (Keywords)

```json
{
  "keywords": ["ai keyword research", "llm search volume"],
  "location": "United States",
  "language": "en"
}
```

### API and MCP usage

Runs write **one dataset row per keyword**.
Fetch rows from the default dataset after the run succeeds (or use the synchronous endpoint below).

**REST (sync, returns dataset items):** replace `YOUR_USERNAME`, `YOUR_API_TOKEN`, and use the same JSON body as in [Input Example](#input-example-keywords).

```bash
curl "https://api.apify.com/v2/acts/YOUR_USERNAME~ai-keyword-volume-exporter/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"keywords":["ai keyword research"],"location":"United States","language":"en"}'
```

**JavaScript (`apify-client`):**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
  keywords: ['ai keyword research'],
  location: 'United States',
  language: 'en',
};
const run = await client.actor('YOUR_USERNAME~ai-keyword-volume-exporter').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Apify MCP server (AI agents):** configure your MCP client with URL `https://mcp.apify.com?tools=YOUR_USERNAME~ai-keyword-volume-exporter` (you can combine multiple tools per [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp)). Pass the API token via your client (for example an `Authorization: Bearer ...` header), not inside the Actor input JSON.

### Output Structure

The Actor returns structured data for each keyword. The table below lists the main fields. Optional dataset views in the Apify Console may show a subset.

| Field | Type | Description | Example Value |
| ----- | ---- | ----------- | ------------- |
| `keyword` | string | Input keyword after list cleaning | `"seo"` |
| `ai_search_volume` | number | null | Estimated AI search volume, or null when upstream has no value | `77880` |
| `ai_monthly_searches` | object | null | Monthly volumes keyed by YYYY-MM, or null when upstream has no series | `{"2026-08": 77880, "2025-09": 72000}` |
| `location` | string | Echo of the input location | `"United States"` |
| `language` | string | Echo of the input language after trim and lowercase | `"en"` |
| `_metadata.resultCharged` | boolean | Whether this row was charged | `true` |
| `_metadata.error` | string | null | Present on failure or empty diagnostic rows | *(varies)* |
| `_metadata.errorContext` | string | null | Extra error context when `error` is set | *(varies)* |

#### Output Example

```json
{
  "keyword": "seo",
  "ai_search_volume": 77880,
  "ai_monthly_searches": {
    "2026-08": 77880,
    "2025-09": 72000
  },
  "location": "United States",
  "language": "en",
  "_metadata": {
    "resultCharged": true,
    "error": null,
    "errorContext": null
  }
}
```

# Actor input Schema

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

Keywords to look up. One array entry equals one keyword. Empty entries after trim are dropped. No comma or newline split inside an entry.

## `location` (type: `string`):

Market location name from the AI Keyword Data location list (example: United States). Not a location code.

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

Language code for the estimate (example: en). Must be valid for the chosen location.

## `maxResults` (type: `integer`):

Optional cap. Keeps the first N keywords of the cleaned list before the API call. On Apify Free plan the Actor also caps at 100 keywords per run after this field (paid plans: up to 1000).

## Actor input object example

```json
{
  "keywords": [
    "ai keyword research",
    "llm search volume"
  ],
  "location": "United States",
  "language": "en"
}
```

# 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": [
        "ai keyword research"
    ],
    "location": "United States",
    "language": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("winningsolutions/ai-keyword-volume-exporter").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": ["ai keyword research"],
    "location": "United States",
    "language": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("winningsolutions/ai-keyword-volume-exporter").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": [
    "ai keyword research"
  ],
  "location": "United States",
  "language": "en"
}' |
apify call winningsolutions/ai-keyword-volume-exporter --silent --output-dataset

```

## MCP server setup

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

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/GXkwYDAOamHOW4TKh/builds/Hoe6tfYM2K8txf6ab/openapi.json
