# SEO Content Plan (`uduzgun/seo-content-plan-generator`) Actor

Find keyword and topic opportunities from a customer website, niche, competitor pages, and live SERP sampling.

- **URL**: https://apify.com/uduzgun/seo-content-plan-generator.md
- **Developed by:** [Uygar Duzgun](https://apify.com/uduzgun) (community)
- **Categories:** SEO tools, E-commerce, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4,500.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## SEO Content Plan

Build a content plan from a customer website, niche, optional competitor pages, and sampled live search results.

This Actor calls the Uygar Content API at `/api/v1/content-plan`, reads the public website, samples Brave Search results through the backend, and writes one dataset item with topic opportunities and article briefs.

It is the first step in the funnel: plan topics, draft with `seo-article-draft-generator`, rewrite when needed, then score the finished article.

### Who it is for

- SEO consultants preparing topic plans for customers.
- Agencies that need a fast research handoff before writing.
- E-commerce and service businesses that want content ideas tied to their actual site.
- Teams using the Uygar article actors and needing better inputs before drafting.

### What it does

- Reads the customer website with SSRF-protected backend fetching.
- Accepts up to 3 competitor URLs for extra context.
- Generates seed queries from the website and niche.
- Samples live SERP results for those queries.
- Clusters the findings into prioritized article topics.
- Returns briefs that can be copied into the article draft generator.

### Use cases

- Plan the next 5-15 articles for a customer site.
- Find site gaps before paying for article generation.
- Turn a vague niche into concrete article briefs.
- Build a reviewable SEO plan for a sales call or onboarding session.

### Input

- `companyWebsite`: public website to analyze. Required.
- `niche`: business niche, market, or offer category. Required.
- `language`: `en` or `sv`. Defaults to `en`.
- `targetAudience`: optional reader or buyer segment.
- `competitorUrls`: optional competitor pages, one URL per line. Maximum 3.
- `planSize`: number of topics to return, from 5 to 15. Defaults to 10.
- `clientContext`: optional brand, offer, location, product, or editorial context.

Advanced/private inputs:

- `apiKey`: optional customer-scoped Uygar Content API key override. Leave it blank on public Store runs.

### Example inputs

```json
{
  "companyWebsite": "https://example.com",
  "niche": "AI automation consulting",
  "language": "en",
  "targetAudience": "Small e-commerce teams",
  "competitorUrls": "https://competitor.example/services\nhttps://other.example/blog",
  "planSize": 5,
  "clientContext": "Focus on support automation and product text workflows."
}
````

### Output

Each run returns one dataset item with:

- request ID
- company website
- niche and language
- site summary
- topic count
- prioritized topics
- focus keyword and secondary keywords
- search intent estimate
- competition estimate
- SERP snapshot
- site coverage flag
- article brief
- copy-paste generator input for `seo-article-draft-generator`

### Limits

This is not search-volume data. Search intent and competition are AI estimates from sampled live SERP results and website text.

The Actor does not guarantee rankings, traffic, conversions, or publishing quality. Review the plan before using it for customer work.

# Actor input Schema

## `apiKey` (type: `string`):

Optional advanced override. Leave blank on public Store runs; the Actor owner should configure UYGAR\_CONTENT\_API\_KEY as a secret environment variable.

## `companyWebsite` (type: `string`):

Public website to read before building the plan.

## `niche` (type: `string`):

Business niche, market, or offer category.

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

Plan language.

## `targetAudience` (type: `string`):

Optional buyer, reader, or segment context.

## `competitorUrls` (type: `string`):

Optional competitor pages, one URL per line. Maximum 3.

## `planSize` (type: `integer`):

Number of topics to return.

## `clientContext` (type: `string`):

Optional brand, offer, location, product, or editorial context.

## Actor input object example

```json
{
  "companyWebsite": "https://example.com",
  "niche": "AI automation consulting",
  "language": "en",
  "planSize": 10
}
```

# Actor output Schema

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

Default dataset items containing request ID, website, niche, topic count, site summary, and topic briefs.

# 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 = {
    "companyWebsite": "https://example.com",
    "niche": "AI automation consulting"
};

// Run the Actor and wait for it to finish
const run = await client.actor("uduzgun/seo-content-plan-generator").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 = {
    "companyWebsite": "https://example.com",
    "niche": "AI automation consulting",
}

# Run the Actor and wait for it to finish
run = client.actor("uduzgun/seo-content-plan-generator").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companyWebsite": "https://example.com",
  "niche": "AI automation consulting"
}' |
apify call uduzgun/seo-content-plan-generator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=uduzgun/seo-content-plan-generator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SEO Content Plan",
        "description": "Find keyword and topic opportunities from a customer website, niche, competitor pages, and live SERP sampling.",
        "version": "0.1",
        "x-build-id": "6HahB0bLTgxg94Rhf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/uduzgun~seo-content-plan-generator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-uduzgun-seo-content-plan-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/uduzgun~seo-content-plan-generator/runs": {
            "post": {
                "operationId": "runs-sync-uduzgun-seo-content-plan-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/uduzgun~seo-content-plan-generator/run-sync": {
            "post": {
                "operationId": "run-sync-uduzgun-seo-content-plan-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "companyWebsite",
                    "niche"
                ],
                "properties": {
                    "apiKey": {
                        "title": "Uygar Content API key",
                        "type": "string",
                        "description": "Optional advanced override. Leave blank on public Store runs; the Actor owner should configure UYGAR_CONTENT_API_KEY as a secret environment variable."
                    },
                    "companyWebsite": {
                        "title": "Company website",
                        "type": "string",
                        "description": "Public website to read before building the plan."
                    },
                    "niche": {
                        "title": "Niche",
                        "type": "string",
                        "description": "Business niche, market, or offer category.",
                        "default": "AI automation consulting"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "sv"
                        ],
                        "type": "string",
                        "description": "Plan language.",
                        "default": "en"
                    },
                    "targetAudience": {
                        "title": "Target audience",
                        "type": "string",
                        "description": "Optional buyer, reader, or segment context."
                    },
                    "competitorUrls": {
                        "title": "Competitor URLs",
                        "type": "string",
                        "description": "Optional competitor pages, one URL per line. Maximum 3."
                    },
                    "planSize": {
                        "title": "Plan size",
                        "minimum": 5,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Number of topics to return.",
                        "default": 10
                    },
                    "clientContext": {
                        "title": "Client context",
                        "type": "string",
                        "description": "Optional brand, offer, location, product, or editorial context."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
