Overview
Runs your list of money keywords through Google daily, captures the top sponsored listings, and diffs the headlines and descriptions against yesterday. When a competitor changes their copy you get a Slack alert. Indispensable for PPC managers who need to know when rivals test new angles.
Trigger
Cron schedule (daily at 9 AM UTC)
Schedule
Runs daily at 9 AM UTC
Workflow Steps
Load keyword list
Read money keywords from a CSV or Google Sheet.
Search Google per keyword
Capture sponsored and organic top positions.
Parse ad copy
Extract headline, description, URL, and advertiser name from sponsored slots.
Diff vs yesterday
Compare today's ad copy to yesterday's snapshot.
Slack alert on change
Post a summary of new ad copy to a Slack channel.
Python Implementation
import requests, os, json
from pathlib import Path
API_KEY = os.environ["SCAVIO_API_KEY"]
def ads_for(keyword):
r = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": keyword, "include_ads": True})
return r.json().get("ads", [])
snapshot = {}
for kw in ["best crm", "project management software"]:
snapshot[kw] = [(a["advertiser"], a["headline"]) for a in ads_for(kw)]
Path("ads.json").write_text(json.dumps(snapshot, indent=2))JavaScript Implementation
const API_KEY = process.env.SCAVIO_API_KEY;
async function ads(keyword) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ query: keyword, include_ads: true }),
});
return (await r.json()).ads ?? [];
}
console.log(await ads("best crm"));Platforms Used
Web search with knowledge graph, PAA, and AI overviews