在发送之前通过实时搜索数据丰富每个潜在客户,诊断并降低 Apollo.io 跳出率。高跳出率通常源于陈旧的数据:人们换工作、公司重塑品牌和域名过期。通过在外展之前对每个潜在客户的姓名和公司运行搜索查询,您可以验证此人是否仍在该公司工作、确认域名解析并查找更新的联系信息。这种丰富步骤通常需要不到一秒钟的时间,并且可以显着降低跳出率。
前置条件
- 已安装 Python 3.8+
- 请求已安装库
- 来自 scavio.dev 的 Scavio API 密钥
- Apollo.io 潜在客户导出 (CSV)
操作指南
步骤 1: 从 CSV 加载 Apollo 潜在客户
读取导出的 Apollo 线索并提取浓缩所需的字段。
Python
import os, csv, requests, json
API_KEY = os.environ['SCAVIO_API_KEY']
def load_leads(csv_path: str) -> list:
leads = []
with open(csv_path) as f:
reader = csv.DictReader(f)
for row in reader:
leads.append({
'name': row.get('First Name', '') + ' ' + row.get('Last Name', ''),
'company': row.get('Company', ''),
'email': row.get('Email', ''),
'title': row.get('Title', ''),
'domain': row.get('Website', ''),
})
return leads
leads = load_leads('apollo_export.csv')
print(f'Loaded {len(leads)} leads')步骤 2: 通过搜索丰富每条线索
按姓名和公司搜索每个潜在客户以验证其当前职位。
Python
def enrich_lead(lead: dict) -> dict:
query = f"{lead['name']} {lead['company']} LinkedIn"
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=15)
results = resp.json().get('organic_results', [])
enriched = {**lead, 'verified': False, 'search_results': []}
for r in results[:3]:
title = r.get('title', '').lower()
snippet = r.get('snippet', '').lower()
enriched['search_results'].append(r.get('title', ''))
if lead['company'].lower() in title or lead['company'].lower() in snippet:
enriched['verified'] = True
break
return enriched
sample = enrich_lead(leads[0]) if leads else {}
print(f"Verified: {sample.get('verified')}")步骤 3: 验证域是否处于活动状态
通过直接搜索来检查公司域是否仍然可以解析。
Python
def check_domain(domain: str) -> bool:
if not domain:
return False
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': f'site:{domain}'}, timeout=15)
results = resp.json().get('organic_results', [])
return len(results) > 0
def enrich_with_domain(lead: dict) -> dict:
lead['domain_active'] = check_domain(lead.get('domain', ''))
return lead
for lead in leads[:3]:
lead = enrich_with_domain(lead)
print(f"{lead['company']}: domain active = {lead['domain_active']}")步骤 4: 分数反弹风险
根据富集信号为每个潜在客户分配风险评分。
Python
def bounce_risk(lead: dict) -> str:
score = 0
if not lead.get('verified'):
score += 2
if not lead.get('domain_active'):
score += 3
if not lead.get('email'):
score += 3
if score >= 5:
return 'high'
elif score >= 2:
return 'medium'
return 'low'
def score_leads(leads: list) -> list:
for lead in leads:
enriched = enrich_lead(lead)
enriched = enrich_with_domain(enriched)
enriched['bounce_risk'] = bounce_risk(enriched)
lead.update(enriched)
return leads
scored = score_leads(leads[:5])
for lead in scored:
print(f"{lead['name']} ({lead['company']}): {lead['bounce_risk']} risk")步骤 5: 导出干净的潜在客户
将经过验证的低风险潜在客户写入新的 CSV 以进行外展。
Python
def export_clean(leads: list, output_path: str):
clean = [l for l in leads if l.get('bounce_risk') != 'high']
if not clean:
print('No clean leads found')
return
keys = ['name', 'company', 'email', 'title', 'domain', 'verified', 'domain_active', 'bounce_risk']
with open(output_path, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=keys, extrasaction='ignore')
writer.writeheader()
writer.writerows(clean)
print(f'Exported {len(clean)} clean leads (removed {len(leads) - len(clean)} high-risk)')
export_clean(scored, 'apollo_clean.csv')Python 示例
Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def verify_lead(name, company):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{name} {company} LinkedIn'}).json()
for r in data.get('organic_results', [])[:3]:
if company.lower() in (r.get('title', '') + r.get('snippet', '')).lower():
return True
return False
print(verify_lead('Jane Doe', 'Acme Corp'))JavaScript 示例
JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function verifyLead(name, company) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${name} ${company} LinkedIn`})
});
const results = (await r.json()).organic_results || [];
return results.slice(0, 3).some(r =>
((r.title || '') + (r.snippet || '')).toLowerCase().includes(company.toLowerCase()));
}
verifyLead('Jane Doe', 'Acme Corp').then(console.log);预期输出
JSON
A lead enrichment pipeline that verifies Apollo contacts via live search, scores bounce risk, and exports clean leads for outreach with reduced bounce rates.