Overview
Before any new article goes into the writing queue, this workflow checks where your domain already ranks for the target keyword, whether an existing page covers the angle, and whether the SERP is AI-Overview-dominated. Outputs a Go/No-Go decision with the rationale to save wasted content spend.
Trigger
On new keyword added to the content brief pipeline
Schedule
On demand per keyword brief
Workflow Steps
Ingest target keyword
Writer adds a new keyword to the content brief queue.
Scavio rank check
Search the keyword and inspect where your domain currently ranks (if at all).
Existing page match
If your domain already ranks top 10, pull that URL and its title.
AI Overview presence check
Detect if Google's AI Overview takes top real estate for this query.
Competitor density score
Count how many of top 10 are well-established domains (>DR 50).
Emit decision
Output {decision: 'go'|'update-existing'|'skip', rationale, suggested_url}.
Python Implementation
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
DOMAIN = "scavio.dev"
H = {"x-api-key": API_KEY}
def precheck(keyword):
r = requests.post("https://api.scavio.dev/api/v1/search",
headers=H, json={"query": keyword, "ai_overview": True}).json()
results = r.get("organic_results", [])
own = next((i for i, x in enumerate(results, 1) if DOMAIN in x.get("link", "")), None)
has_aio = bool(r.get("ai_overview"))
if own and own <= 10:
return {"decision": "update-existing", "url": results[own-1]["link"]}
if has_aio:
return {"decision": "skip", "reason": "ai overview dominates"}
return {"decision": "go"}
print(precheck("best serp api for python"))JavaScript Implementation
const API_KEY = process.env.SCAVIO_API_KEY;
const DOMAIN = "scavio.dev";
const H = { "x-api-key": API_KEY, "content-type": "application/json" };
async function precheck(keyword) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({ query: keyword, ai_overview: true })
}).then(r => r.json());
const results = r.organic_results || [];
const ownIdx = results.findIndex(x => (x.link || "").includes(DOMAIN));
if (ownIdx >= 0 && ownIdx < 10) return { decision: "update-existing", url: results[ownIdx].link };
if (r.ai_overview) return { decision: "skip", reason: "ai overview dominates" };
return { decision: "go" };
}
console.log(await precheck("best serp api for python"));Platforms Used
Web search with knowledge graph, PAA, and AI overviews