# SEO Competitor Gap Analyzer - AI Content Gap Finder (`fetchcraft/seo-competitor-gap`) Actor

Find SEO content gaps versus competitors using AI. Crawls your sitemap and up to 5 competitor sitemaps, diffs topic coverage, returns target keywords with search-volume bands, word counts, and rationale per gap. Bring your own LLM key. Pay per competitor analyzed.

- **URL**: https://apify.com/fetchcraft/seo-competitor-gap.md
- **Developed by:** [Emily Ward](https://apify.com/fetchcraft) (community)
- **Categories:** SEO tools, AI, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 competitor seo gap analyzeds

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

## SEO Competitor Content Gap (AI)

![SEO Competitor Gap Analyzer - AI Content Gap Finder](https://ai-sales-personalizer.vercel.app/og/seo-competitor-gap.png)

**Drop in your site URL + up to 5 competitor URLs. Get back the exact topical gaps with suggested post titles, target keywords, and word counts. Powered by Claude Sonnet 4.6.**

### Why this exists

Ahrefs charges $99 to $999 per month to do this. SEMrush charges $129 to $499. You use the feature once a quarter.

This actor charges $0.50 per competitor analysed. No subscription. No annual contract.

### What you get back per competitor

| Field | Description |
| --- | --- |
| `competitor_url` | URL analysed |
| `your_topic_count` | Topic slugs found on your site (from sitemap) |
| `competitor_topic_count` | Topic slugs found on competitor (from sitemap) |
| `overlap_count` | Slugs you both cover |
| `gaps_count` | Slugs only the competitor covers, after AI filtering |
| `top_gap_title` | The single highest-priority post title to write |
| `gaps[]` | Full ranked list of gaps |

Each gap object includes:

- `source_slug` (the exact competitor URL slug)
- `suggested_post_title` (sharper than the competitor's, often as a question or contrarian angle)
- `target_keyword`
- `estimated_search_volume_band` (low / medium / high)
- `recommended_word_count` (800 to 3000)
- `primary_intent` (informational / transactional / navigational / commercial)
- `rationale` (one sentence on why this gap matters)

### Pricing

**$0.50 USD per competitor analysed.** You only pay for successful analyses. Failed sites (no sitemap, blocked, error) are not charged.

| Use case | Competitors | Cost |
| --- | --- | --- |
| Single competitor check | 1 | $0.50 |
| Quarterly competitive review | 5 | $2.50 |
| Annual industry scan | 20 | $10.00 |

Compare to Ahrefs Standard at $179/mo or SEMrush Guru at $229/mo.

### How it works

1. Sitemap-first extraction: fetches `/sitemap.xml`, follows nested sitemap indexes, falls back to homepage link crawl if no sitemap.
2. Slug-based topic comparison: extracts the meaningful slug from each URL (last path segment, cleaned).
3. Set diff: identifies slugs unique to the competitor.
4. AI ranking: Claude Sonnet 4.6 filters out low-value slugs (login, terms, tags), prioritises matches with your target audience, and suggests sharper post titles than the competitor uses.

### Inputs

- **your\_url**: your homepage URL
- **competitor\_urls**: array of up to 5 competitor homepage URLs
- **your\_target\_audience**: one paragraph describing who you write for. The AI uses this to prioritise gaps that matter for your audience.
- **max\_pages\_per\_site**: default 60. Higher = more coverage but slower and more compute.
- **max\_concurrency**: default 2. Number of competitors processed in parallel.

### Use cases

- Quarterly content strategy: pick your top 5 competitors, get a 50-gap ranked backlog.
- New-site launch: see what the category leader covers that you do not.
- Agency client onboarding: ship the gap report as a $500 deliverable, spend $2.50 to make it.
- Programmatic SEO planning: pull 100s of competitor slugs and prioritise which to write first.

### What this actor does NOT do

- It does not check search volume against Google. Use Ahrefs or Keyword Planner for hard volume numbers. The `estimated_search_volume_band` is an AI estimate, not a measured value.
- It does not write the posts. Pair this with your existing AI writing workflow.
- It does not crawl behind authentication. Public sitemaps only.
- It does not check current rankings. Use a rank tracker for that.

### Tags

`seo` `content-marketing` `competitor-analysis` `ai` `claude` `keyword-research` `content-strategy` `b2b` `saas`

### Companion actors

- **[AI Sales Personalizer](https://apify.com/fetchcraft/ai-sales-personalizer)** ($0.15/result). Use the gaps surfaced here to drive personalized outbound to the prospect's competitive set.
- **[Cold Email Rewriter](https://apify.com/fetchcraft/cold-email-rewriter)** ($0.10/rewrite). Reference a gap-filled blog post in the cold-email outreach.
- **[LinkedIn Post Personalizer](https://apify.com/fetchcraft/linkedin-post-personalizer)** ($0.10/opener). Use the gap insights as a hook in LinkedIn DMs to the competitor's customer base.

***

Made with Claude Sonnet 4.6 by Emily Ward, Cancel Costs.

### Pairs well with

- **[ai-sales-personalizer](https://apify.com/fetchcraft/ai-sales-personalizer)**: Convert content gaps into outbound pitches for that prospect's content team. $0.10 to $0.20 per lead.
- **[saas-spend-scanner](https://apify.com/fetchcraft/saas-spend-scanner)**: Cross-reference competitor SEO stack (Yoast/Rank Math/Ahrefs/SEMrush) with content gap. $0.01 to $0.03 per site.
- **[cold-email-rewriter](https://apify.com/fetchcraft/cold-email-rewriter)**: Turn gap analysis into A/B-tested cold email variants. $0.05 per variant.

### Integrations

This actor works out of the box with every Apify-supported integration:

- **API**: call via Apify API or any official SDK (Python, JavaScript, PHP, .NET). Returns a clean dataset URL.
- **Schedule**: set a daily, weekly, or custom cron cadence in Apify Console. Combine with `notification` for fresh feeds.
- **Webhooks**: wire `ACTOR.RUN.SUCCEEDED` to Slack, Discord, Zapier, Make, n8n, Pipedream, or any HTTPS endpoint.
- **MCP**: this actor is discoverable through Apify's hosted MCP server at `mcp.apify.com` for Claude, Cursor, Cline, Windsurf, and other MCP clients.
- **n8n / Make / Zapier**: native HTTP-Request integration. Trigger the actor on schedule, pipe results to Google Sheets, Airtable, your CRM, or any database.

### Try it free

Every Apify user gets **$5/month in free platform credits** (around 250 events at this actor's per-event price). Run preview mode first to confirm output shape before scaling.

New to Apify? [Sign up here](https://apify.com/sign-up?fpr=fetchcraft) to get free credits on signup.

### What's New

- 2026-06-03: Metadata, categories, and SEO refreshed. Latest version live on Apify Store.

### Last Updated

2026-06-03

# Actor input Schema

## `your_url` (type: `string`):

Your homepage URL. We crawl its sitemap to extract your topic coverage.

## `competitor_urls` (type: `array`):

Up to 5 competitor homepage URLs. We crawl each one's sitemap and diff against yours.

## `your_target_audience` (type: `string`):

Who do you write content for? Role, company size, what they search for. The AI prioritises gaps relevant to this audience.

## `max_pages_per_site` (type: `integer`):

Maximum sitemap URLs to ingest per site. Higher = more coverage but slower.

## `max_concurrency` (type: `integer`):

How many competitors to analyse in parallel.

## `llm_provider` (type: `string`):

Pick which LLM you want. Gemini is recommended (1500 free requests/day at https://aistudio.google.com/apikey). Groq also good (14400 free/day at https://console.groq.com/keys). Leave blank to use the actor owner's configured key (if any).

## `llm_api_key` (type: `string`):

Paste the API key for the provider you selected. Never leaves the Apify run, never logged. Free tier providers (Gemini, Groq) give thousands of free results per day.

## Actor input object example

```json
{
  "your_url": "https://www.cancelcosts.com/",
  "competitor_urls": [
    "https://www.smartlead.ai/",
    "https://www.lemlist.com/"
  ],
  "your_target_audience": "B2B SaaS founders and SDR teams looking to cut cold-outreach tooling spend.",
  "max_pages_per_site": 60,
  "max_concurrency": 2,
  "llm_provider": ""
}
```

# 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 = {
    "your_url": "https://www.cancelcosts.com/",
    "competitor_urls": [
        "https://www.smartlead.ai/",
        "https://www.lemlist.com/"
    ],
    "your_target_audience": "B2B SaaS founders and SDR teams looking to cut cold-outreach tooling spend."
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchcraft/seo-competitor-gap").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 = {
    "your_url": "https://www.cancelcosts.com/",
    "competitor_urls": [
        "https://www.smartlead.ai/",
        "https://www.lemlist.com/",
    ],
    "your_target_audience": "B2B SaaS founders and SDR teams looking to cut cold-outreach tooling spend.",
}

# Run the Actor and wait for it to finish
run = client.actor("fetchcraft/seo-competitor-gap").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 '{
  "your_url": "https://www.cancelcosts.com/",
  "competitor_urls": [
    "https://www.smartlead.ai/",
    "https://www.lemlist.com/"
  ],
  "your_target_audience": "B2B SaaS founders and SDR teams looking to cut cold-outreach tooling spend."
}' |
apify call fetchcraft/seo-competitor-gap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fetchcraft/seo-competitor-gap"
        }
    }
}

```

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/GhamrIrEsFujGhSZO/builds/25pC9IBfaa2mVT5oR/openapi.json
