Content Gap Analyzer
Pricing
Pay per usage
Content Gap Analyzer
Identifies topics, insights, and questions that top-ranking competitors cover but your blog post misses. Runs a Google search, classifies each competitor page, extracts key insights via LLM, and reports what's missing from your own article.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Fabian Maume
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
You had a great blog post which suddently stop bringing traffic? That might be a matter of content gap. Check in Google Search Console for which keyword your blog post was ranking and run the Contnent Gap Analyzer to identify what insights are missing from your blog post.
What does Content Gap Analyzer do?
Content Gap Analyzer identifies the topics, insights, and questions that competitors cover but your blog post misses.
Point it at one of your articles and a target keyword - the Actor pulls the top-ranking pages from Google, classifies each one by content type, extracts the key insights, and reports back which insights are absent from your own page.
Like any Apify Actor, you can run it on a schedule, integrate via the Apify API, or hook into Make, Zapier, and other automation tools.
Why use Content Gap Analysis?
Search engines rank pages on topical depth. If a competitor covers an angle, statistic, or question that your article doesn't, you lose ground in the SERP - even when your writing is stronger. Doing this audit manually means opening ten tabs, extracting the bullet points by hand, and cross-referencing them against your own draft. This Actor automates the entire loop.
Key features:
- Runs a Google search for each keyword and pulls the top organic results
- Classifies every competitor page as one of 13 content types (Guide, Listicle, Landing page, Comparison, Alternatives, Pricing page, Case study, …)
- Extracts up to 20 key insights per page using LLM analysis
- Short list missing insights : what competitors cover but your article doesn't
- Surfaces question-style headings from competitor articles, ready to add into your FAQ
- Reports where your article ranks for each target keyword
What data can Content Gap Analyzer extract?
The main dataset contains one row per competitor page:
| Field | Type | Description |
|---|---|---|
url | string | Competitor page URL |
ownArticle | boolean | true if the row is your own blog post |
contentType | string | LLM classification (Guide, Listicle, Landing page, …) |
confidence | number | Classification confidence (0–1) |
contentInsight | array | Up to 20 key insights extracted from the page |
contentLength | number | Length of the page markdown (characters) |
OrganicAppearance | array | Keywords and Google rank where the page appeared |
Three auxiliary records are produced in the default key-value store:
MISSING_INSIGHTS- insights present in competitors but absent from your articleQuestion- question-style headings (H1–H6) from competitor articlesSUB_DATASETS- links to the raw datasets produced by Google Search Scraper and Website Content Crawler, so you can drill down into the upstream data
How to run a content gap analysis
- Open the Actor in Apify Console.
- Paste the URL of the blog post you want to analyze into Blog post URL.
- Enter your target Keyword - one query, or several separated by line breaks.
- Set Number of organic results per keyword (default: 10).
- Click Save & Start.
- When the run finishes, open the Output tab to see the competitor landscape table, missing insights, questions, and links to the sub-Actor datasets.
How much will it cost to run Content Gap Analyzer?
The Actor is billed on compute usage and passes through the cost of the sub-Actors it calls - Google Search Scraper, Website Content Crawler - plus LLM tokens consumed via the OpenRouter integration. The actual run cost depends on:
- Number of organic results - drives Google Search Scraper and Website Content Crawler cost
- Total length of competitor markdown - drives LLM token cost
- Memory allocated to Website Content Crawler - the Actor auto-requests the maximum power-of-2 RAM available on your account, so larger plans crawl faster
You can cap the total spend per run with the maxTotalChargeUsd option when starting the Actor. The orchestrator checks the remaining budget before each sub-Actor call and refuses to overspend.
Input
See the Input tab for the full schema. Three fields drive the run:
BlogUrls: the article you want to analyze. Only the first URL is used.keywords: the target search query. Separate multiple queries with line breaks.organicResultCount: number of organic Google results to analyze per keyword. Defaults to 10. Rounded up to the nearest page of 10.
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. A simplified output row looks like:
{"url": "https://competitor.com/guide-to-x","ownArticle": false,"contentType": "Guide","confidence": 0.92,"contentInsigth": ["Cheerio is up to 8x faster than jsdom for HTML parsing.","Cheerio does not execute JavaScript - use Playwright for SPAs."],"contentLenght": 18342,"OrganicAppearance": [{ "keyword": "web scraping cheerio", "rank": 2 }]}
Auxiliary outputs in the key-value store:
// MISSING_INSIGHTS["Cheerio's selector engine supports a subset of CSS4.","Most modern scraping stacks now pair Cheerio with a queue-based crawler."]// SUB_DATASETS[{ "name": "Google Search Scraper", "resultUrl": "https://console.apify.com/storage/datasets/abc123" },{ "name": "Website Content Crawler", "resultUrl": "https://console.apify.com/storage/datasets/def456" }]
Tips
- Use one focused long tail keyword. Content gaps are keyword-specific so broad keyword sets dilute the analysis.
- Lower
organicResultCountfor faster, cheaper runs. Ten results capture the dominant topics for most queries. - Cap your run cost. Set
maxTotalChargeUsdwhen starting the Actor - the orchestrator allocates the remaining budget across sub-Actors and stops when the cap is reached. - Inspect upstream data via
SUB_DATASETS. If a result looks wrong, the linked Google Search Scraper and Website Content Crawler datasets show exactly what was fed into the LLM.
FAQ
Why does my own URL appear in the competitor landscape?
That's by design : including your own page lets the LLM compare it against competitors on equal footing. The ownArticle field flags which row is yours.
The "missing insights" list is empty.
Either your article already covers the competitor topics (good!) or the competitors didn't yield enough usable text. Check the Sub-Actor datasets tab to see what Website Content Crawler returned.
Can I use this without an LLM?
No, classification and insight extraction both rely on the OpenRouter integration. LLM cost is part of the run cost. However this Actor is open source so you can remove LLM logic and build your own custom Actor.
What is the content gap analysis tool?
A tool to compare your content with your competitors'. It typically has two step:
- Data extracting
- Content analysis with LLM
What is content gap analysis?
A content gap analysis is the process of identifying missing topics, keywords, or formats that your audience is searching for, but that your website currently fails to cover. It usually relies on mapping out what your competitors rank for, to discover content opportunities.