本页内容
你的销售团队每周会收到 200 条新线索。每条线索只有一个姓名、一个邮箱,或许还有一个公司名。在销售代表能进行有意义的触达之前,他们需要研究这家公司的规模、技术栈、近期新闻和潜在契合度。这项研究每条线索要花 10 到 15 分钟——每周超过 30 个小时耗在 Google 和 LinkedIn 上,而不是用来销售。
lead enrichment 让这项研究自动化。CrawlForge 从公司官网、社交资料和新闻来源抓取公开的商业数据,在几秒内构建出完整的线索画像。本指南将向你展示如何构建一个每小时处理 200 多条线索的 lead enrichment 引擎。
目录
- 什么是 lead enrichment
- 架构总览
- 步骤 1:公司网站分析
- 步骤 2:技术栈检测
- 步骤 3:公司情报采集
- 步骤 4:构建增强 pipeline
- credits 成本分析
- 结果与收益
- 常见问题
什么是 lead enrichment
lead enrichment 是指在基础线索数据(姓名、邮箱、公司)之上补充额外信息的过程,帮助销售团队甄别并优先排序潜在客户。增强后的数据通常包括:
| 数据项 | 来源 | 销售价值 |
|---|---|---|
| 公司规模 | 关于我们/团队页 | 资格甄别 |
| 行业 | 网站内容 | 客户细分 |
| 技术栈 | 页面源码分析 | 产品契合度 |
| 近期新闻 | 搜索结果 | 开场话题 |
| 融资状态 | 新闻稿 | 预算信号 |
| 内容主题 | 博客分析 | 痛点映射 |
什么是 lead enrichment?它是把商业情报数据追加到原始线索记录上的自动化过程,把一个简单的邮箱地址转化为销售团队可以立即据以行动的完整潜客画像。
CrawlForge 最适合需要从公司官网获取实时数据的 lead enrichment 团队,因为不同于可能滞后数周的数据库提供商(ZoomInfo、Clearbit),CrawlForge 抓取实时页面以获取最新信息。
架构总览
该增强引擎使用五个 CrawlForge 工具:
| 组件 | 工具 | Credits | 用途 |
|---|---|---|---|
| 网站内容 | extract_content | 2 | 公司描述与定位 |
| 元数据 | extract_metadata | 1 | 标题、描述、社交资料 |
| 页面源码 | fetch_url | 1 | 从 HTML 检测技术 |
| 公司调研 | search_web | 5 | 近期新闻、融资、社交 |
| 分析 | analyze_content | 3 | 行业分类与主题 |
步骤 1:公司网站分析
先从公司官网提取核心公司信息。
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const client = new Client({
name: 'lead-enrichment',
version: '1.0.0',
});
interface CompanyProfile {
domain: string;
name: string;
description: string;
industry: string;
topics: string[];
socialLinks: {
twitter?: string;
linkedin?: string;
github?: string;
};
estimatedSize: string;
}
async function analyzeCompanyWebsite(
domain: string
): Promise<CompanyProfile> {
// Extract main page content
const contentResult = await client.callTool({
name: 'extract_content',
arguments: { url: `https://${domain}` },
});
const content = JSON.parse(contentResult.content[0].text);
// Get metadata including social links
const metaResult = await client.callTool({
name: 'extract_metadata',
arguments: { url: `https://${domain}` },
});
const meta = JSON.parse(metaResult.content[0].text);
// Analyze content for industry and topics
const analysis = await client.callTool({
name: 'analyze_content',
arguments: { text: content.content },
});
const analyzed = JSON.parse(analysis.content[0].text);
// Try to get team page for company size estimation
let estimatedSize = 'Unknown';
try {
const teamPage = await client.callTool({
name: 'extract_content',
arguments: { url: `https://${domain}/about` },
});
const teamContent = JSON.parse(teamPage.content[0].text);
// Simple heuristic: count mentions of team-related terms
const teamMentions = (teamContent.content.match(/team|employee|people|staff/gi) || []).length;
if (teamMentions > 20) estimatedSize = '100+';
else if (teamMentions > 10) estimatedSize = '50-100';
else if (teamMentions > 5) estimatedSize = '10-50';
else estimatedSize = '1-10';
} catch {
// About page might not exist; that is fine
}
return {
domain,
name: meta.title?.split(/[|\-]/)[0]?.trim() || domain,
description: meta.description || analyzed.summary || '',
industry: analyzed.topics?.[0] || 'Unknown',
topics: analyzed.topics || [],
socialLinks: {
twitter: meta.twitterHandle,
linkedin: meta.linkedinUrl,
github: meta.githubUrl,
},
estimatedSize,
};
}步骤 2:技术栈检测
通过分析公司网站的 HTML 源码和响应头来检测它所使用的技术。
interface TechStack {
frontend: string[];
analytics: string[];
marketing: string[];
infrastructure: string[];
cms: string[];
}
async function detectTechStack(domain: string): Promise<TechStack> {
const result = await client.callTool({
name: 'fetch_url',
arguments: {
url: `https://${domain}`,
timeout: 10000,
},
});
const page = JSON.parse(result.content[0].text);
const html = page.body || '';
const headers = page.headers || {};
const stack: TechStack = {
frontend: [],
analytics: [],
marketing: [],
infrastructure: [],
cms: [],
};
// Frontend framework detection
if (html.includes('__next') || html.includes('_next/static')) {
stack.frontend.push('Next.js');
}
if (html.includes('__nuxt')) stack.frontend.push('Nuxt.js');
if (html.includes('react')) stack.frontend.push('React');
if (html.includes('vue')) stack.frontend.push('Vue.js');
if (html.includes('tailwindcss') || html.includes('tailwind')) {
stack.frontend.push('Tailwind CSS');
}
// Analytics detection
if (html.includes('gtag') || html.includes('google-analytics')) {
stack.analytics.push('Google Analytics');
}
if (html.includes('segment.com') || html.includes('analytics.js')) {
stack.analytics.push('Segment');
}
if (html.includes('mixpanel')) stack.analytics.push('Mixpanel');
if (html.includes('hotjar')) stack.analytics.push('Hotjar');
// Marketing tools
if (html.includes('hubspot')) stack.marketing.push('HubSpot');
if (html.includes('intercom')) stack.marketing.push('Intercom');
if (html.includes('drift')) stack.marketing.push('Drift');
if (html.includes('mailchimp')) stack.marketing.push('Mailchimp');
// Infrastructure
const server = headers['server'] || headers['x-powered-by'] || '';
if (server.includes('Vercel') || html.includes('vercel')) {
stack.infrastructure.push('Vercel');
}
if (server.includes('cloudflare') || headers['cf-ray']) {
stack.infrastructure.push('Cloudflare');
}
if (html.includes('amazonaws')) stack.infrastructure.push('AWS');
// CMS
if (html.includes('wp-content')) stack.cms.push('WordPress');
if (html.includes('shopify')) stack.cms.push('Shopify');
if (html.includes('webflow')) stack.cms.push('Webflow');
return stack;
}这项检测只需一次 fetch_url 调用(1 credit)——使其在批量 lead enrichment 中极具成本效益。
步骤 3:公司情报采集
使用 search_web 查找近期新闻、融资公告和市场背景。
interface CompanyIntel {
recentNews: Array<{ title: string; url: string; snippet: string }>;
fundingInfo: string;
competitorMentions: string[];
}
async function gatherIntelligence(
companyName: string,
domain: string
): Promise<CompanyIntel> {
// Search for recent company news
const newsResult = await client.callTool({
name: 'search_web',
arguments: {
query: `"${companyName}" OR "${domain}" news funding`,
limit: 10,
time_range: 'month',
},
});
const news = JSON.parse(newsResult.content[0].text);
return {
recentNews: (news.results || []).slice(0, 5).map(
(r: { title: string; url: string; snippet: string }) => ({
title: r.title,
url: r.url,
snippet: r.snippet,
})
),
fundingInfo: news.results?.find(
(r: { title: string }) =>
r.title.toLowerCase().includes('funding') ||
r.title.toLowerCase().includes('raises') ||
r.title.toLowerCase().includes('series')
)?.snippet || 'No recent funding news found',
competitorMentions: news.results
?.filter((r: { title: string }) =>
r.title.toLowerCase().includes('vs') ||
r.title.toLowerCase().includes('alternative')
)
.map((r: { title: string }) => r.title) || [],
};
}步骤 4:构建增强 pipeline
把所有增强步骤组合进一个能批量处理线索的 pipeline。
interface Lead {
email: string;
name: string;
company?: string;
}
interface EnrichedLead extends Lead {
companyProfile: CompanyProfile;
techStack: TechStack;
intelligence: CompanyIntel;
enrichedAt: string;
qualityScore: number;
}
function extractDomain(email: string): string {
return email.split('@')[1];
}
function calculateLeadScore(enriched: Omit<EnrichedLead, 'qualityScore'>): number {
let score = 0;
// Company has a real website with content
if (enriched.companyProfile.description.length > 50) score += 20;
// Company uses modern tech stack (potential product fit)
if (enriched.techStack.frontend.length > 0) score += 15;
// Company uses analytics/marketing tools (signals budget)
if (enriched.techStack.analytics.length > 0) score += 10;
if (enriched.techStack.marketing.length > 0) score += 15;
// Recent news/activity
if (enriched.intelligence.recentNews.length > 0) score += 10;
// Funding signals
if (!enriched.intelligence.fundingInfo.includes('No recent')) score += 20;
// Company size signals
const size = enriched.companyProfile.estimatedSize;
if (size === '50-100' || size === '100+') score += 10;
return Math.min(score, 100);
}
async function enrichLeads(leads: Lead[]): Promise<EnrichedLead[]> {
const enriched: EnrichedLead[] = [];
for (const lead of leads) {
const domain = lead.company
? lead.company.toLowerCase().replace(/\s+/g, '') + '.com'
: extractDomain(lead.email);
// Skip free email providers
if (['gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com'].includes(domain)) {
continue;
}
try {
console.log(`Enriching ${lead.email} (${domain})...`);
const companyProfile = await analyzeCompanyWebsite(domain);
const techStack = await detectTechStack(domain);
const intelligence = await gatherIntelligence(
companyProfile.name,
domain
);
const partial = {
...lead,
companyProfile,
techStack,
intelligence,
enrichedAt: new Date().toISOString(),
};
enriched.push({
...partial,
qualityScore: calculateLeadScore(partial),
});
} catch (error) {
console.error(`Failed to enrich ${lead.email}:`, error);
}
}
// Sort by quality score (highest first)
return enriched.sort((a, b) => b.qualityScore - a.qualityScore);
}credits 成本分析
每条线索的增强成本:
| 操作 | 工具 | Credits |
|---|---|---|
| 网站内容 | extract_content | 2 |
| 关于我们页 | extract_content | 2 |
| 元数据 | extract_metadata | 1 |
| 技术检测 | fetch_url | 1 |
| 内容分析 | analyze_content | 3 |
| 新闻搜索 | search_web | 5 |
| 每条线索 | 14 credits |
规模化下的月度成本:
| 数量 | Credits/月 | 推荐方案 |
|---|---|---|
| 50 条线索/月 | 700 | Free 套餐(1,000 credits) |
| 200 条线索/月 | 2,800 | Hobby($19/mo,5,000 credits) |
| 1,000 条线索/月 | 14,000 | Professional($99/mo,50,000 credits) |
| 5,000+ 条线索/月 | 70,000 | Business($399/mo,定制 credits) |
结果与收益
用 CrawlForge 构建的 lead enrichment 引擎能带来:
- 速度:15-30 秒增强一条线索,而非 10-15 分钟
- 一致性:每条线索都获得同等深度的研究
- 优先排序:质量评分让销售代表先聚焦价值最高的线索
- 成本效益:每条线索 $0.07-0.13,而数据库提供商为 $0.50-2.00
与 Clearbit($99/mo 提供 1,000 次查询)或 ZoomInfo($15,000+/年)等增强数据库提供商相比,CrawlForge 以极低的成本提供最新数据。代价是 CrawlForge 抓取实时数据(始终最新),而数据库提供预结构化字段(所需处理更少)。
常见问题
从 HTML 检测技术栈的准确度如何?
基于 HTML 的检测对客户端技术能以高准确度(90%+)捕获最常见的工具。服务端技术更难检测。要做全面检测,可将 CrawlForge 与 BuiltWith 或 Wappalyzer 的数据结合使用。
我能增强来自个人邮箱域名的线索吗?
来自 gmail.com 或 outlook.com 的线索没有可供分析的公司域名。对于这些线索,可使用 search_web 按姓名查找他们的职业资料。这种方式每次查询花费 5 credits,而非完整的 14-credit pipeline。
批量增强时我该如何处理速率限制?
CrawlForge 的 batch_scrape 工具会自动处理速率限制。对于单次调用,可在对同一域名的请求之间加入 500ms 延迟。并行处理不同域名以获得最大吞吐量。
免费增强你的前 50 条线索。 从 1,000 credits 开始——足以完整增强 70 多条线索,无需信用卡。
相关资源:
亲自试一试——无需注册
在 Playground 中运行 CrawlForge 的 27 个抓取与提取工具中的任意一个,然后免费开始,获取 1,000 credits。
1,000 免费 credits • 每月补充 • 无需信用卡
标签
及时获取最新洞察
将教程、产品更新与 Web 抓取技巧直接发送到你的收件箱。
拒绝垃圾邮件,随时可取消订阅。