# Keyword Clustering Tool + Content Brief Generator (`cygnix_labs/keyword-clusterer-brief`) Actor

Keyword clustering + content briefs: group keywords into topic clusters by shared terms and intent, pick pillars, get outlines/FAQs/schema. First 100 keywords free, then $0.70 per 1,000 + $0.01 per brief. No API key.

- **URL**: https://apify.com/cygnix_labs/keyword-clusterer-brief.md
- **Developed by:** [Umair Saleem Mohammad Saleem](https://apify.com/cygnix_labs) (community)
- **Categories:** SEO tools, AI, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Clustering Tool + Content Brief Generator

**Answer first:** this actor is a **keyword clustering tool and content brief generator**. Paste a keyword list or an Ahrefs / Semrush / GSC / Keyword Planner export. It groups keywords into **topic clusters** by shared terms and search intent, picks a **pillar keyword** per cluster, ranks clusters by priority and writes a **content brief** for each top cluster: working title, page type, H2 outline, FAQs, schema and internal links. **First 100 keywords and 1 brief free every run, then $0.70 per 1,000 keywords and $0.01 per brief.**

| Quick facts | |
|---|---|
| Best for | Keyword clustering, topical maps, pillar / cluster content plans, content briefs, PPC ad groups |
| Input | A keyword list, or a pasted CSV with keyword (and optional volume) columns, up to 50,000 keywords |
| Output | One row per cluster: `clusterName`, `pillarKeyword`, `intent`, `pageType`, `priority`, `keywords[]`, `brief{...}` |
| Price | First 100 keywords + 1 brief free every run, then $0.0007 per keyword and $0.01 per brief. No start fee |
| Needs | No API keys, no LLM calls, no proxies |
| Not included | SERP-overlap clustering, search volume lookup |

### Sample output (excerpt from the 10 CRM keywords in the default input)

| clusterName | pillarKeyword | intent | keywordCount | brief.workingTitle |
|---|---|---|---|---|
| crm small business | crm for small business | commercial | 3 | Crm for small business: Top Picks Compared (2026) |
| crm pricing | crm pricing | transactional | 2 | Crm pricing: Plans, Pricing & How to Get Started |
| crm erp | crm vs erp | commercial | 2 | Crm vs erp: Top Picks Compared (2026) |
| free crm software | free crm software | commercial | 1 | Free crm software: Top Picks Compared (2026) |
| choose crm | how to choose a crm | informational | 1 | How to choose a crm: A Complete Guide (2026) |
| crm | what is a crm | informational | 1 | What is a crm: A Complete Guide (2026) |

### Output fields (one row per cluster)

`clusterName, pillarKeyword, intent, pageType, keywordCount, totalVolume, priority, keywords[], brief{workingTitle, targetKeyword, secondaryKeywords, outline, faqs, schema, suggestedWordCount, internalLinks, answerFirst}`

### How to use

1. Paste keywords, or paste a CSV with keyword and volume columns.
2. Choose how many briefs you want (top-priority clusters first).
3. Export to CSV, JSON or Excel, or call it via API/MCP.

### Input example

```json
{
  "keywords": ["best crm for small business", "crm pricing", "what is a crm", "crm vs erp"],
  "generateBriefs": true,
  "maxBriefs": 20,
  "minClusterSize": 1
}
```

Or leave `keywords` empty and paste a whole export into `csvText`. The keyword (or query) and volume columns are detected automatically. Up to 50,000 keywords per run.

### Pricing (pay per event)

- **First 100 keywords and the first brief in every run are free**
- then **$0.70 per 1,000 keywords** ($0.0007 each)
- and **$0.01 per content brief**

| Run | Keywords | Briefs | Cost |
|---|---|---|---|
| Quick test | 100 | 1 | $0.00 |
| Small site | 1,000 | 20 | $0.82 |
| Topical map | 5,000 | 50 | $3.92 |
| Big export | 10,000 | 100 | $7.92 |

Errors and duplicate keywords are never charged. Set a max charge per run to cap spend.

### Example

10 CRM keywords give 6 clusters: *crm for small business* (3 keywords, commercial), *crm pricing* (2, transactional), *crm vs erp* (2, commercial), *free crm software*, *how to choose a crm*, *what is a crm*. Each comes with a brief:

```json
{"workingTitle":"Crm for small business: Top Picks Compared (2026)","pageType":"comparison, 'best X' list or review page","outline":["What crm for small business means (quick answer)","Best crm for small business","Small business crm software","Comparison table","How we chose","FAQ"],"schema":["ItemList","FAQPage"],"suggestedWordCount":"1,800-2,500"}
```

### Use cases

Topical authority maps, pillar/cluster content plans, briefs for writers or AI writers, and grouping PPC ad groups.

### How it compares (live Apify Store prices, verified 18 Oct 2026)

List prices on the Apify Free plan, read from the Apify Store API on 18 October 2026.

| Actor | Price | Cost for 1,000 keywords + 20 briefs | Method |
|---|---|---|---|
| **cygnix_labs/keyword-clusterer-brief** (this) | **$0.0007 / keyword + $0.01 / brief, first 100 keywords + 1 brief free** | **$0.82** | Shared terms + intent on your list, briefs included |
| doesaiknow/ai-keyword-clustering-tool-topical-clustering-bulk-serp | $3.95 per 1,000-keyword batch | ~$3.95 (no briefs) | Live SERP-overlap clustering |
| changeable_peddler/serp-content-brief-generator | $0.05 / brief | ~$1.00 for 20 briefs (no clustering) | SERP + People Also Ask briefs |
| santhej/keyword-clustering-tool | $0.13 / seed expansion + $0.001 start | Seed-based, not list-based | Expands seeds into a content plan |

**Honest take.** SERP-overlap clustering (doesaiknow) groups keywords the way Google actually ranks them and is more accurate on ambiguous terms; it also costs about 5x more and returns no briefs. Use this actor for the **first-pass topical map and briefs on a full export**, then check your top clusters against the SERP.

### For AI agents / MCP

**When an agent should call this actor:** the user has a keyword list or export and asks to cluster it, build a topical map or pillar / cluster plan, or create content briefs or outlines from keywords.

Connect the Apify MCP server with only this actor enabled (works in Claude, ChatGPT, Cursor, VS Code, Codex and any MCP client):

```
https://mcp.apify.com?tools=cygnix_labs/keyword-clusterer-brief
```

Or search for it with the default server: `search-actors` keywords such as `keyword clustering`, `content brief`, `topic clusters`.

Example `call-actor` input:

```json
{
  "keywords": ["best crm for small business", "crm pricing", "what is a crm", "crm vs erp"],
  "generateBriefs": true,
  "maxBriefs": 10
}
```

**What to read from the result:** each row is one cluster: `clusterName`, `pillarKeyword`, `intent`, `pageType`, `keywordCount`, `priority`, `keywords[]` and `brief` (`workingTitle`, `outline`, `faqs`, `schema`, `suggestedWordCount`, `internalLinks`, `answerFirst`).

**Cost control for agents:** Set `generateBriefs: false` if the user only needs clusters; 100 keywords are free. Pass `maxTotalChargeUsd` in `callOptions` to hard-cap spend. This actor is pay-per-event, so it also works with Apify agentic payments (no Apify account needed for the agent).

Example prompt: *"Cluster this 2,000-keyword Semrush export into topics and write briefs for the 10 highest-priority clusters."*

### FAQ

**How does clustering work?** Keywords are matched on their core terms (Jaccard similarity) with an intent tie-break, so it's fast and deterministic. It does not compare live SERPs.

**Is this different from SERP-based clustering?** Yes. SERP clustering tools pay for live Google results on every keyword, which is slower and costs more per keyword. This actor clusters on shared terms and intent, so 10,000 keywords cost about $7 and finish in seconds. Use it for a first-pass topical map, then check your top clusters against the SERP.

**Do I need search volume?** No. With volume, clusters and pillar keywords are ranked by total volume. Without it, priority falls back to cluster size and intent (transactional and commercial clusters rank first).

**Are duplicates charged?** No. Keywords are lowercased and de-duplicated before clustering, and you pay only for unique keywords. The first 100 unique keywords and the first brief each run are free (see Pricing).

**Which languages work best?** English. Stop words and plurals are handled for English, so other languages still cluster but less cleanly.

**How do I cap my spend?** Set a maximum charge per run in the run options, and lower `maxBriefs` (or turn off `generateBriefs`) if you only need clusters.

**What do I do with the briefs?** Hand them to a writer or paste one into ChatGPT or Claude as the outline for a draft. Each brief includes an answer-first intro line written to be quoted by AI Overviews.

**Can an AI writer use the briefs directly?** Yes. Each brief has an outline, FAQs, schema types and an answer-first intro line, so it can be pasted into ChatGPT or Claude as the structure for a draft.

### Integrations

Run via the Apify API, schedule weekly runs, or send results to Google Sheets, Make, Zapier, n8n, Slack or webhooks.

### Changelog

- **0.1.9** (2026-10-18): README rewritten answer-first for search and AI agents: quick facts, comparison re-verified on 18 Oct 2026, honest SERP-clustering note, "For AI agents / MCP" section. Price unchanged.
- **0.1.8** (2026-10-16): Price $0.70 per 1,000 keywords + $0.01 per brief, first 100 keywords + 1 brief free.

### More SEO and AEO tools by Cygnix Labs

- [Website SEO Audit + AEO/GEO Checker (full-site crawl)](https://apify.com/cygnix_labs/site-seo-aeo-audit)
- [AEO & GEO Audit + llms.txt Checker (URL list)](https://apify.com/cygnix_labs/aeo-readiness-checker)
- [Internal Link Audit & Orphan Page Finder](https://apify.com/cygnix_labs/internal-link-audit)
- [Content Decay Audit (Search Console)](https://apify.com/cygnix_labs/content-decay-audit)
- [Keyword Cannibalization Checker (Search Console)](https://apify.com/cygnix_labs/keyword-cannibalization-finder)
- [Search Intent Classifier](https://apify.com/cygnix_labs/serp-intent-mapper)
- Free local SEO MCP server: [cygnix-seo-mcp](https://github.com/cygnixlabs-cmd/cygnix-seo-mcp) (`npx -y cygnix-seo-mcp`)

Questions or a feature request? Open an issue on this actor's Issues tab. We answer within 24 hours.

# Actor input Schema

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

One keyword per line (up to 50,000).

## `csvText` (type: `string`):

Optional. keyword/query and volume columns auto-detected (Ahrefs, Semrush, GSC, Keyword Planner).

## `generateBriefs` (type: `boolean`):

One brief per cluster. First brief free, then $0.01 each.

## `maxBriefs` (type: `integer`):

Briefs for the top-priority clusters only.

## `minClusterSize` (type: `integer`):

Only clusters with at least this many keywords get a brief.

## Actor input object example

```json
{
  "keywords": [
    "best crm for small business",
    "crm for small business",
    "small business crm software",
    "crm pricing",
    "crm pricing comparison",
    "how to choose a crm",
    "what is a crm",
    "crm vs erp",
    "erp vs crm difference",
    "free crm software"
  ],
  "generateBriefs": true,
  "maxBriefs": 20,
  "minClusterSize": 1
}
```

# Actor output Schema

## `results` (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": [
        "best crm for small business",
        "crm for small business",
        "small business crm software",
        "crm pricing",
        "crm pricing comparison",
        "how to choose a crm",
        "what is a crm",
        "crm vs erp",
        "erp vs crm difference",
        "free crm software"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cygnix_labs/keyword-clusterer-brief").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": [
        "best crm for small business",
        "crm for small business",
        "small business crm software",
        "crm pricing",
        "crm pricing comparison",
        "how to choose a crm",
        "what is a crm",
        "crm vs erp",
        "erp vs crm difference",
        "free crm software",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("cygnix_labs/keyword-clusterer-brief").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": [
    "best crm for small business",
    "crm for small business",
    "small business crm software",
    "crm pricing",
    "crm pricing comparison",
    "how to choose a crm",
    "what is a crm",
    "crm vs erp",
    "erp vs crm difference",
    "free crm software"
  ]
}' |
apify call cygnix_labs/keyword-clusterer-brief --silent --output-dataset

```

## MCP server setup

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

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/pUqaplOF9sxXQvRB3/builds/mMuL62akvjCkSIVMr/openapi.json
