Overview
Weekly, search your target keywords, compare top-ranking content against your existing pages, identify topics you have not covered, and output a prioritized gap list for content planning.
Trigger
Weekly Friday at 3 PM UTC
Schedule
Weekly Friday at 3 PM UTC
Workflow Steps
Search target keywords
Query Google SERP for each keyword in your content strategy.
Extract competitor topics
Collect titles and headings from top 10 results.
Compare to existing content
Match competitor topics against your published content library.
Identify gaps
Topics competitors cover that you do not.
Prioritize by search intent
Rank gaps by keyword volume proxy (PAA count, result depth).
Python Implementation
import requests, os
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
MY_PAGES = ["crm comparison", "crm for startups", "crm pricing"] # your existing slugs/topics
def find_gaps(keyword):
data = requests.post("https://api.scavio.dev/api/v1/search",
headers=H, json={"platform": "google", "query": keyword}).json()
competitor_topics = set()
for r in data.get("organic_results", [])[:10]:
competitor_topics.add(r.get("title", "").lower())
paa = [q.get("question", "").lower() for q in data.get("people_also_ask", [])]
competitor_topics.update(paa)
gaps = [t for t in competitor_topics if not any(p in t for p in MY_PAGES)]
return gaps
all_gaps = []
for kw in ["best crm tools 2026", "crm software comparison"]:
all_gaps.extend(find_gaps(kw))
print(f"Found {len(all_gaps)} content gaps:")
for gap in all_gaps[:10]:
print(f" - {gap}")JavaScript Implementation
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
const myPages = ["crm comparison", "crm pricing"];
const gaps = [];
for (const kw of ["best crm 2026"]) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H, body: JSON.stringify({platform: "google", query: kw})
});
const data = await r.json();
const topics = (data.organic_results || []).map(r => r.title?.toLowerCase());
const paa = (data.people_also_ask || []).map(p => p.question?.toLowerCase());
[...topics, ...paa].forEach(t => {
if (t && !myPages.some(p => t.includes(p))) gaps.push(t);
});
}
console.log(`${gaps.length} content gaps found`);Platforms Used
Web search with knowledge graph, PAA, and AI overviews