Overview
Weekly automated snapshot of trend signals for target keywords using SERP data. Captures related searches, People Also Ask, and AI Overview trend context as a pytrends alternative that does not break.
Trigger
Weekly cron every Monday at 08:00 UTC
Schedule
Weekly on Monday at 08:00 UTC
Workflow Steps
Load keyword watchlist
Read the list of keywords to track trends for. Organized by category: industry terms, competitor brands, product categories, emerging topics.
Query SERP for trend signals
Search Google for each keyword appended with 'trend 2026'. Extract related searches, People Also Ask, AI Overview text, and result freshness indicators.
Extract directional signals
Parse related searches for rising terms. Check if AI Overview mentions growth, decline, or trend language. Count fresh results (dated within last 7 days).
Compare with previous week
Diff the current week's related searches and PAA against last week's snapshot. New terms indicate emerging trends. Missing terms indicate fading interest.
Generate weekly trend report
Compile a markdown report with trending up, trending down, and stable keywords. Include new related searches as content ideas. Send to the content team.
Python Implementation
import requests, os, json
from datetime import date
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def trend_snapshot(keyword):
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{keyword} trend 2026',
'ai_overview': True}, timeout=10).json()
return {
'keyword': keyword,
'date': str(date.today()),
'related_searches': [s.get('query', '') for s in r.get('related_searches', [])[:8]],
'paa': [q.get('question', '') for q in r.get('people_also_ask', [])[:5]],
'has_ai_overview': bool(r.get('ai_overview')),
'ai_summary': ((r.get('ai_overview') or {}).get('text', ''))[:200],
'top_result_titles': [o.get('title', '') for o in r.get('organic', [])[:3]],
}
keywords = ['ai agents', 'mcp protocol', 'vibe coding', 'rag pipeline', 'agentic ai']
snapshots = []
for kw in keywords:
snap = trend_snapshot(kw)
snapshots.append(snap)
print(f"\n{kw}:")
print(f" Related: {', '.join(snap['related_searches'][:4])}")
if snap['paa']:
print(f" PAA: {snap['paa'][0]}")
if snap['ai_summary']:
print(f" AIO: {snap['ai_summary'][:100]}")
# Save snapshot for weekly comparison
with open(f'trend_snapshot_{date.today()}.json', 'w') as f:
json.dump(snapshots, f, indent=2)
print(f"\nSaved {len(snapshots)} keyword snapshots")JavaScript Implementation
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
const fs = await import("fs");
async function trendSnapshot(keyword) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: `${keyword} trend 2026`, ai_overview: true})
}).then(r => r.json());
return {
keyword,
date: new Date().toISOString().split("T")[0],
relatedSearches: (r.related_searches || []).slice(0, 8).map(s => s.query || ""),
paa: (r.people_also_ask || []).slice(0, 5).map(q => q.question || ""),
hasAiOverview: Boolean(r.ai_overview),
aiSummary: ((r.ai_overview || {}).text || "").slice(0, 200),
topResultTitles: (r.organic || []).slice(0, 3).map(o => o.title || ""),
};
}
(async () => {
const keywords = ["ai agents", "mcp protocol", "vibe coding", "rag pipeline", "agentic ai"];
const snapshots = [];
for (const kw of keywords) {
const snap = await trendSnapshot(kw);
snapshots.push(snap);
console.log(`\n${kw}:`);
console.log(` Related: ${snap.relatedSearches.slice(0, 4).join(", ")}`);
if (snap.paa.length) console.log(` PAA: ${snap.paa[0]}`);
if (snap.aiSummary) console.log(` AIO: ${snap.aiSummary.slice(0, 100)}`);
}
const today = new Date().toISOString().split("T")[0];
fs.writeFileSync(`trend_snapshot_${today}.json`, JSON.stringify(snapshots, null, 2));
console.log(`\nSaved ${snapshots.length} keyword snapshots`);
})();Platforms Used
Web search with knowledge graph, PAA, and AI overviews