Reddit 帖子包含未经过滤的产品反馈、功能请求和竞争投诉,任何调查都无法复制。该扫描仪搜索多个子版块以获取市场信号,按类型(痛点、功能请求、竞争对手提及、购买意图)对它们进行分类,并输出优先排序的研究报告。通过 Scavio Reddit 端点进行的每次搜索费用为 0.005 美元。
前置条件
- Python 3.8+
- 请求库
- 来自 scavio.dev 的 Scavio API 密钥
- 研究的目标产品类别或市场
操作指南
步骤 1: 配置市场研究扫描仪
设置针对不同市场信号类型的搜索查询。
Python
import os, requests
from collections import defaultdict
API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
def market_queries(product):
return [
f'{product} alternative to',
f'{product} looking for recommendation',
f'{product} vs',
f'{product} problem with',
f'{product} wish feature',
f'{product} switched from',
]
PRODUCT = 'serp api'
queries = market_queries(PRODUCT)
print(f'Market research for "{PRODUCT}": {len(queries)} signal queries')
print(f'Estimated cost: ${len(queries) * 0.005:.3f}')步骤 2: 扫描 Reddit 获取市场信号
执行搜索并从结果中提取结构化市场信号。
Python
SIGNAL_TYPES = {
'alternative to': 'switching_intent',
'looking for': 'purchase_intent',
'recommendation': 'purchase_intent',
'vs': 'comparison',
'problem with': 'pain_point',
'wish feature': 'feature_request',
'switched from': 'churn_signal'
}
def scan_signals(product):
signals = defaultdict(list)
for query in market_queries(product):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'platform': 'reddit', 'country_code': 'us'}).json()
signal_type = next((v for k, v in SIGNAL_TYPES.items() if k in query), 'other')
for r in data.get('organic_results', [])[:5]:
signals[signal_type].append({
'title': r.get('title', '')[:80],
'snippet': r.get('snippet', '')[:150],
'link': r.get('link', '')
})
return dict(signals)
signals = scan_signals(PRODUCT)
for stype, items in signals.items():
print(f'\n{stype}: {len(items)} signals')
for item in items[:2]:
print(f' - {item["title"][:60]}')步骤 3: 提取竞争对手和痛点
解析信号以识别提到的竞争对手和反复出现的痛点。
Python
def extract_competitors(signals):
competitors = defaultdict(int)
for items in signals.values():
for item in items:
text = f"{item['title']} {item['snippet']}".lower()
known = ['serpapi', 'dataforseo', 'serper', 'scrapingbee', 'brightdata', 'apify', 'tavily', 'exa']
for comp in known:
if comp in text:
competitors[comp] += 1
return dict(sorted(competitors.items(), key=lambda x: -x[1]))
def extract_pain_points(signals):
pain_keywords = ['slow', 'expensive', 'unreliable', 'broken', 'complex', 'limited',
'missing', 'annoying', 'frustrating', 'confusing']
pains = defaultdict(int)
for items in signals.get('pain_point', []) + signals.get('churn_signal', []):
text = f"{items['title']} {items['snippet']}".lower()
for kw in pain_keywords:
if kw in text:
pains[kw] += 1
return dict(sorted(pains.items(), key=lambda x: -x[1]))
comps = extract_competitors(signals)
pains = extract_pain_points(signals)
print(f'\nCompetitors mentioned: {comps}')
print(f'Pain points: {pains}')步骤 4: 生成市场研究报告
将所有信号合并到结构化的市场研究报告中。
Python
def market_report(product):
signals = scan_signals(product)
competitors = extract_competitors(signals)
pains = extract_pain_points(signals)
cost = len(market_queries(product)) * 0.005
print(f'\n=== Market Research Report: {product} ===')
print(f'\nSignal summary:')
for stype, items in signals.items():
print(f' {stype:20}: {len(items)} signals')
print(f'\nTop competitors mentioned:')
for comp, count in list(competitors.items())[:5]:
print(f' {comp:20}: {count} mentions')
print(f'\nTop pain points:')
for pain, count in list(pains.items())[:5]:
print(f' {pain:20}: {count} mentions')
# High-intent signals
purchase = signals.get('purchase_intent', [])
print(f'\nHigh-intent threads ({len(purchase)}):')
for p in purchase[:3]:
print(f' - {p["title"][:60]}')
print(f'\nCost: ${cost:.3f}')
market_report('serp api')Python 示例
Python
import os, requests
from collections import defaultdict
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
def scan(product):
signals = defaultdict(list)
for q in [f'{product} alternative', f'{product} vs', f'{product} problem']:
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': q, 'platform': 'reddit', 'country_code': 'us'}).json()
for r in data.get('organic_results', [])[:3]:
signals[q.split()[-1]].append(r.get('title', '')[:60])
for stype, items in signals.items():
print(f'{stype}: {len(items)} signals')
for i in items[:2]: print(f' - {i}')
scan('serp api')JavaScript 示例
JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function scan(product) {
for (const suffix of ['alternative', 'vs', 'problem']) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query: `${product} ${suffix}`, platform: 'reddit', country_code: 'us' })
}).then(r => r.json());
console.log(`${suffix}: ${(data.organic_results || []).length} results`);
(data.organic_results || []).slice(0, 2).forEach(r => console.log(` - ${r.title.slice(0, 60)}`));
}
}
scan('serp api').catch(console.error);预期输出
JSON
Market research for "serp api": 6 signal queries
Estimated cost: $0.030
switching_intent: 8 signals
- Looking for SerpAPI alternative, too expensive for startup
- Switched from SerpAPI to something cheaper
purchase_intent: 6 signals
comparison: 7 signals
pain_point: 5 signals
Top competitors mentioned:
serpapi : 8 mentions
dataforseo : 5 mentions
serper : 3 mentions
Cost: $0.030