The Problem
Competitive intelligence teams spend most of their time gathering data and almost no time analyzing it. They watch competitor websites, compare pricing across marketplaces, track who ranks for shared keywords, monitor YouTube mentions, and stitch all of this into a weekly deck nobody opens. The manual work is enormous, the freshness lags by days, and important shifts, a competitor dropping a price, a new brand ranking for your top keyword, a viral video about your category, tend to land on the dashboard long after they mattered.
The Scavio Solution
Scavio automates the collection layer so the competitive intelligence team can focus on analysis. Schedule searches across Google for keywords, Amazon and Walmart for competitor SKUs, and YouTube for brand mentions. Diff the results over time and push meaningful changes into Slack, a BI tool, or a briefing doc. Because a single API covers all four platforms, the entire pipeline lives in one script instead of four integrations. The weekly deck becomes a live dashboard, and the team moves upstream into strategy.
Before
Before Scavio, competitive intelligence was a four-person manual operation with a weekly cadence. Important shifts were caught days late, and the weekly deck became a chore nobody trusted.
After
After Scavio, the collection runs hourly in a cron job. The team sees changes the moment they happen and spends its hours building narrative, not copy-pasting screenshots.
Who It Is For
Competitive intelligence teams, growth analysts, and strategy leads at product companies. If your Monday mornings still start with manually copy-pasting SERP screenshots into a deck, automate the collection layer and reclaim the week.
Key Benefits
- One automation script covers every relevant platform
- Schedulable, diffable output for change detection and alerting
- Structured fields let you push into Slack, BigQuery, or Notion
- Captures SERP shifts, price drops, and video mentions in one run
- Replaces a patchwork of manual monitoring tools across teams
Python Example
import requests, json, os
API_KEY = "your_scavio_api_key"
STATE = "state.json"
def search(platform: str, query: str):
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query},
timeout=10,
)
return [item["link"] for item in r.json().get("organic", [])[:10]]
old = json.load(open(STATE)) if os.path.exists(STATE) else {}
new = {
"google:ai crm": search("google", "ai crm"),
"amazon:standing desk": search("amazon", "standing desk"),
}
for key, links in new.items():
diff = set(links) - set(old.get(key, []))
if diff:
print(f"NEW in {key}: {diff}")
json.dump(new, open(STATE, "w"))JavaScript Example
import fs from "node:fs";
const API_KEY = "your_scavio_api_key";
const STATE = "state.json";
async function search(platform, query) {
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({ platform, query }),
});
const data = await r.json();
return (data.organic ?? []).slice(0, 10).map((i) => i.link);
}
const old = fs.existsSync(STATE) ? JSON.parse(fs.readFileSync(STATE, "utf8")) : {};
const next = {
"google:ai crm": await search("google", "ai crm"),
"amazon:standing desk": await search("amazon", "standing desk"),
};
for (const [key, links] of Object.entries(next)) {
const diff = links.filter((l) => !(old[key] ?? []).includes(l));
if (diff.length) console.log(`NEW in ${key}:`, diff);
}
fs.writeFileSync(STATE, JSON.stringify(next));Platforms Used
Web search with knowledge graph, PAA, and AI overviews
Amazon
Product search with prices, ratings, and reviews
YouTube
Video search with transcripts and metadata
Walmart
Product search with pricing and fulfillment data
Community, posts & threaded comments from any subreddit