竞争对手分析是产品经理、营销人员和创始人的一项经常性任务。手动检查竞争对手的关键术语排名、他们生成的新闻以及他们的产品列表如何演变非常耗时。本教程使用 Scavio API 构建自动化竞争对手情报管道。给定竞争对手域的列表,它会跟踪一组关键字的有机 SERP 位置,获取最近的新闻提及,并编写每周摘要报告。
前置条件
- Python 3.10 或更高版本
- 请求已安装库
- Scavio API 密钥
- 竞争对手域和目标关键字列表
操作指南
步骤 1: 定义竞争对手和关键词
设置将竞争对手名称映射到其域的字典,以及要跟踪的关键字列表。
Python
COMPETITORS = {
"Acme Corp": "acmecorp.com",
"Beta Tools": "betatools.io",
}
KEYWORDS = ["project management software", "task tracking tool", "team collaboration app"]步骤 2: 跟踪每个竞争对手的 SERP 排名
对于每个关键字,获取 SERP 结果并扫描有机结果以查找每个竞争对手的域。
Python
def track_positions(keyword: str) -> dict:
data = search_google(keyword)
positions = {}
for name, domain in COMPETITORS.items():
for r in data.get("organic_results", []):
if domain in r.get("link", ""):
positions[name] = r["position"]
break
return positions步骤 3: 获取新闻提及
在 Google 新闻中搜索每个竞争对手的名称,以查找最近的文章、产品公告和新闻报道。
Python
def get_news(competitor_name: str) -> list[dict]:
data = search_google(f"{competitor_name} news 2026")
return data.get("news_results", data.get("organic_results", []))[:5]步骤 4: 生成每周报告
将 SERP 排名和新闻提及合并到结构化报告中,并将其保存为 Markdown 文件。
Python
from datetime import date
def generate_report() -> str:
lines = [f"# Competitor Intelligence Report — {date.today()}\n"]
for kw in KEYWORDS:
lines.append(f"## {kw}")
positions = track_positions(kw)
for name, pos in positions.items():
lines.append(f" - {name}: #{pos}")
return "\n".join(lines)Python 示例
Python
import os
import requests
from datetime import date
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
COMPETITORS = {"Acme": "acmecorp.com", "Beta": "betatools.io"}
KEYWORDS = ["project management software", "task tracking tool"]
def search_google(q: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": q, "country_code": "us"})
r.raise_for_status()
return r.json()
def track(kw: str) -> dict:
data = search_google(kw)
out = {}
for name, domain in COMPETITORS.items():
for r in data.get("organic_results", []):
if domain in r.get("link", ""):
out[name] = r["position"]
break
return out
if __name__ == "__main__":
for kw in KEYWORDS:
pos = track(kw)
print(f"\n{kw}:")
for name, p in pos.items():
print(f" {name}: #{p}")JavaScript 示例
JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const COMPETITORS = { "Acme": "acmecorp.com", "Beta": "betatools.io" };
const KEYWORDS = ["project management software", "task tracking tool"];
async function searchGoogle(q) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: q, country_code: "us" })
});
return res.json();
}
async function trackPositions(kw) {
const data = await searchGoogle(kw);
const out = {};
for (const [name, domain] of Object.entries(COMPETITORS)) {
const match = (data.organic_results || []).find(r => r.link.includes(domain));
if (match) out[name] = match.position;
}
return out;
}
async function main() {
for (const kw of KEYWORDS) {
const pos = await trackPositions(kw);
console.log(`\n${kw}:`);
Object.entries(pos).forEach(([n, p]) => console.log(` ${n}: #${p}`));
}
}
main().catch(console.error);预期输出
JSON
project management software:
Acme: #3
Beta: #7
task tracking tool:
Acme: #5
Beta: not ranked