当每封邮件都使用有关收件人公司的具体详细信息进行个性化时,冷电子邮件效果最佳。手动研究每一条线索无法扩展。本教程构建了一个自动化潜在客户丰富管道,该管道采用包含公司名称的 CSV,通过 Scavio API 在 Google 中搜索每个公司名称,从有机片段中提取知识图描述、最新新闻和关键详细信息,然后编写丰富的 CSV,以供邮件合并或 CRM 导入使用。
前置条件
- Python 3.8 或更高版本
- 请求已安装库
- Scavio API 密钥
- 包含公司名称的 CSV 文件以丰富内容
操作指南
步骤 1: 加载潜在客户列表
从 CSV 文件中读取公司名称。该脚本需要一个名为company_name 的列。
import csv
def load_leads(path: str) -> list[dict]:
with open(path) as f:
return list(csv.DictReader(f))
leads = load_leads("leads.csv")
print(f"Loaded {len(leads)} leads")步骤 2: 在 Google 中搜索每个公司
向 Google 查询公司名称并提取知识图、有机片段和任何新闻结果。
import requests
def search_company(name: str) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": name, "country_code": "us"}
)
r.raise_for_status()
data = r.json()
return {
"description": data.get("knowledge_graph", {}).get("description", ""),
"website": data.get("knowledge_graph", {}).get("website", ""),
"snippet": data.get("organic_results", [{}])[0].get("snippet", ""),
}步骤 3: 丰富每条线索
循环浏览销售线索,搜索每家公司,并将丰富数据合并回销售线索字典中。
import time
def enrich_leads(leads: list[dict]) -> list[dict]:
for lead in leads:
enrichment = search_company(lead["company_name"])
lead.update(enrichment)
time.sleep(0.5)
return leads步骤 4: 导出丰富的数据
将丰富的潜在客户写入新的 CSV,其中包含描述、网站和摘要的附加列。
def export_enriched(leads: list[dict], path: str = "leads_enriched.csv") -> None:
if not leads:
return
with open(path, "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=leads[0].keys())
writer.writeheader()
writer.writerows(leads)
print(f"Exported {len(leads)} enriched leads to {path}")Python 示例
import os
import csv
import time
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def search_company(name: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": name, "country_code": "us"})
r.raise_for_status()
data = r.json()
kg = data.get("knowledge_graph", {})
return {
"description": kg.get("description", ""),
"website": kg.get("website", ""),
"snippet": data.get("organic_results", [{}])[0].get("snippet", ""),
}
def enrich(input_csv: str, output_csv: str) -> None:
with open(input_csv) as f:
leads = list(csv.DictReader(f))
for lead in leads:
lead.update(search_company(lead["company_name"]))
time.sleep(0.5)
with open(output_csv, "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=leads[0].keys())
w.writeheader()
w.writerows(leads)
print(f"Enriched {len(leads)} leads")
if __name__ == "__main__":
enrich("leads.csv", "leads_enriched.csv")JavaScript 示例
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const fs = require("fs");
async function searchCompany(name) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: name, country_code: "us" })
});
const data = await res.json();
const kg = data.knowledge_graph || {};
return {
description: kg.description || "",
website: kg.website || "",
snippet: (data.organic_results || [{}])[0]?.snippet || ""
};
}
async function main() {
const companies = ["Stripe", "Vercel", "Supabase"];
for (const name of companies) {
const info = await searchCompany(name);
console.log(`${name}: ${info.description.slice(0, 80)}`);
console.log(` Website: ${info.website}`);
}
}
main().catch(console.error);预期输出
Enriched 50 leads
leads_enriched.csv:
company_name,email,description,website,snippet
Stripe,contact@stripe.com,"Online payment processing for internet businesses",https://stripe.com,"Stripe is a technology company that builds economic infrastructure..."
Vercel,[email protected],"Cloud platform for frontend frameworks",https://vercel.com,"Vercel enables developers to build and deploy web applications..."