🥳加入无抓取社区领取您的免费试用,访问我们强大的网页抓取工具包!
返回博客

如何使用 n8n 和 Scrapeless 构建智能 B2B 潜在客户生成工作流程

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

25-Jun-2025

将您的销售潜在客户开发转变为一个自动化工作流程,该工作流程通过谷歌搜索、抓取器和Claude AI分析来查找、筛选和丰富B2B潜在客户。本教程将向您展示如何使用n8n和Scrapeless创建一个强大的潜在客户生成系统。

我们将构建的内容


在本教程中,我们将创建一个智能的B2B潜在客户生成工作流程:

  1. 按照计划或手动自动触发
  2. 使用Scrapeless在谷歌中搜索目标市场的公司
  3. 单独处理每个公司URL,使用项目列表
  4. 抓取公司网站以提取详细信息
  5. 使用Claude AI来筛选和构建潜在客户数据
  6. 将合格的潜在客户存储在Google Sheets中
  7. 向Discord发送通知(可调整为Slack、电子邮件等)

前提条件


  • 一个n8n实例(云端或自托管)
  • 一个Scrapeless API密钥(在scrapeless.com获取)

您只需要登录到Scrapeless仪表板,并按照下面的图片获取您的API密钥。Scrapeless将为您提供免费试用配额

Scrapeless API密钥(在scrapeless.com获取)
  • 来自Anthropic的Claude API密钥
  • Google Sheets访问权限
  • Discord webhook URL(或您首选的通知服务)
  • 对n8n工作流程的基本理解

完整工作流程概述


您的最终n8n工作流程将如下所示:

手动触发 → Scrapeless谷歌搜索 → 项目列表 → Scrapeless抓取器 → 代码(数据处理)→ Claude AI → 代码(响应解析器)→ 过滤 → Google Sheets或/和Discord Webhook

完整工作流程概述

步骤1:设置手动触发

我们将从手动触发开始测试,然后稍后添加调度。

  1. 在n8n中创建一个新工作流程
  2. 添加一个手动触发节点作为起点
  3. 这允许您在自动化之前测试工作流程
手动触发设置

为什么要从手动开始?

  • 测试和调试每个步骤
  • 在自动化之前验证数据质量
  • 根据初步结果调整参数

步骤2:添加Scrapeless谷歌搜索

现在我们将添加Scrapeless谷歌搜索节点来查找目标公司。

  1. 单击 + 添加触发后新节点
  2. 在节点库中搜索Scrapeless
  3. 选择Scrapeless并选择搜索谷歌操作

1. 为什么将Scrapeless与n8n结合使用?


将Scrapeless与n8n集成可以让您创建先进、强大的网页爬虫,而无需编写代码。

好处包括:

  • 通过单个请求访问Deep SerpApi以获取和提取谷歌SERP数据。
  • 使用通用抓取API绕过限制并访问任何网站。
  • 使用抓取器抓取来详细抓取单个页面。
  • 使用抓取器爬取进行递归抓取并从所有链接的页面中检索数据。

这些功能允许您构建端到端的数据流,将Scrapeless与n8n支持的350多个服务链接在一起,包括Google Sheets、Airtable、Notion、Slack等。

Scrapeless谷歌搜索节点
Scrapeless谷歌搜索节点

2. 配置谷歌搜索节点

接下来,我们需要配置Scrapeless谷歌搜索节点

谷歌搜索配置

连接设置:

  1. 使用您的Scrapeless API密钥创建连接
  2. 单击“添加”,输入您的凭据
单击“添加”,输入您的凭据
输入Scrapeless API密钥

搜索参数:
搜索查询:使用B2B相关的搜索词:

Copy
"软件公司" "企业客户" 员工:50-200
"营销机构" "B2B服务" "数字化转型"
"SaaS初创企业" "A轮" "风险投资"
"制造公司" "数字解决方案" ISO

国家:美国(或您的目标市场)
语言:英语

专业B2B搜索策略:

  • 公司规模定位:员工:50-200,"中型市场"
  • 融资阶段: "A轮","风险投资","自筹资金"
  • 行业特定:"金融科技","健康科技","教育科技"
  • 地理位置: "纽约", "旧金山", "伦敦"

第3步: 处理结果与项目列表

谷歌搜索返回一系列结果。我们需要逐个处理每个公司。

  1. 在谷歌搜索之后添加一个项目列表节点
  2. 这将把搜索结果拆分成单独的项目

提示: 运行谷歌搜索节点

1. 项目列表配置:

  • 操作: "拆分项目"
  • 拆分字段: organic_results - Link
  • 包含二进制数据: false

这为每个搜索结果创建了一个单独的执行分支,允许并行处理。

第4步: 添加Scrapeless爬虫

现在我们将爬取每个公司的网站以提取详细信息。

  1. 添加另一个Scrapeless节点
  2. 选择爬取操作(而不是WebUnlocker)

使用爬虫爬取进行递归爬虫并从所有链接页面中检索数据。

  1. 配置用于公司数据提取

1. 爬虫配置

  • 连接: 使用相同的Scrapeless连接
  • URL: {{ $json.link }}
  • 爬取深度: 2(主页 + 一层深)
  • 最大页面: 5(加快处理速度的限制)
  • 包含模式: about|contact|team|company|services
  • 排除模式: blog|news|careers|privacy|terms
  • 格式: markdown(便于AI处理)

2. 为什么使用爬虫而不是Web Unlocker?

  • 爬虫获取多个页面和结构化数据
  • 更适合B2B, 因为联系信息可能在/about或/contact页面
  • 获取更全面的公司信息
  • 智能跟随网站结构

第5步: 使用代码节点处理数据

在将爬取的数据发送到Claude AI之前,我们需要正确清理和结构化它。Scrapeless爬虫返回特定格式的数据,需要仔细解析。

  1. 在Scrapeless爬虫之后添加一个代码节点
  2. 使用JavaScript解析和清理原始爬取数据
  3. 这确保数据在AI分析时的一致质量

1. 理解Scrapeless爬虫数据结构

Scrapeless爬虫返回的数据是一个对象数组,而不是单个对象:

Copy
[
  {
    "markdown": "# 公司主页\n\n欢迎访问我们公司...",
    "metadata": {
      "title": "公司名称 - 主页",
      "description": "公司描述",
      "sourceURL": "https://company.com"
    }
  }
]

2. 代码节点配置

Copy
console.log("=== 处理Scrapeless爬虫数据 ===");

try {
  // 数据以数组形式到达
  const crawlerDataArray = $json;
  
  console.log("数据类型:", typeof crawlerDataArray);
  console.log("是否为数组:", Array.isArray(crawlerDataArray));
  console.log("数组长度:", crawlerDataArray?.length || 0);
  
  // 检查数组是否为空
  if (!Array.isArray(crawlerDataArray) || crawlerDataArray.length === 0) {
    console.log("❌ 空或无效的爬虫数据");
    return {
      url: "未知",
      company_name: "无数据",
      content: "",
      error: "爬虫响应为空",
      processing_failed: true,
      skip_reason: "爬虫未返回数据"
    };
  }
  
  // 从数组中取第一个元素
  const crawlerResponse = crawlerDataArray[0];
  
  // Markdown内容提取
  const markdownContent = crawlerResponse?.markdown || "";
  
  // 元数据提取(如果可用)
  const metadata = crawlerResponse?.metadata || {};
  
  // 基本信息
  const sourceURL = metadata.sourceURL || metadata.url || extractURLFromContent(markdownContent);
  const companyName = metadata.title || metadata.ogTitle || extractCompanyFromContent(markdownContent);
  const description = metadata.description || metadata.ogDescription || "";
  
  console.log(`处理: ${companyName}`);
  console.log(`URL: ${sourceURL}`);
  console.log(`内容长度: ${markdownContent.length} 字符`);
  
  // 内容质量验证

if (!markdownContent || markdownContent.length < 100) {
return {
url: sourceURL,
company_name: companyName,
content: "",
error: "爬虫返回的内容不足",
processing_failed: true,
raw_content_length: markdownContent.length,
skip_reason: "内容太短或为空"
};
}

// 清理和构建 Markdown 内容
let cleanedContent = cleanMarkdownContent(markdownContent);

// 联系信息提取
const contactInfo = extractContactInformation(cleanedContent);

// 重要商业部分提取
const businessSections = extractBusinessSections(cleanedContent);

// 为 Claude AI 构建内容
const contentForAI = buildContentForAI({
companyName,
sourceURL,
description,
businessSections,
contactInfo,
cleanedContent
});

// 内容质量指标
const contentQuality = assessContentQuality(cleanedContent, contactInfo);

const result = {
url: sourceURL,
company_name: companyName,
content: contentForAI,
raw_content_length: markdownContent.length,
processed_content_length: contentForAI.length,
extracted_emails: contactInfo.emails,
extracted_phones: contactInfo.phones,
content_quality: contentQuality,
metadata_info: {
has_title: !!metadata.title,
has_description: !!metadata.description,
site_name: metadata.ogSiteName || "",
page_title: metadata.title || ""
},
processing_timestamp: new Date().toISOString(),
processing_status: "成功"
};

console.log(✅ 成功处理 ${companyName});
return result;

} catch (error) {
console.error("❌ 处理爬虫数据时出错:", error);
return {
url: "未知",
company_name: "处理错误",
content: "",
error: error.message,
processing_failed: true,
processing_timestamp: new Date().toISOString()
};
}

// ========== 工具函数 ==========

function extractURLFromContent(content) {
// 尝试从 Markdown 内容中提取 URL
const urlMatch = content.match(/https?://[^\s)]+/);
return urlMatch ? urlMatch[0] : "未知";
}

function extractCompanyFromContent(content) {
// 尝试从内容中提取公司名称
const titleMatch = content.match(/^#\s+(.+)$/m);
if (titleMatch) return titleMatch[1];

// 搜索电子邮件以提取域
const emailMatch = content.match(/@([a-zA-Z0-9.-]+.[a-zA-Z]{2,})/);
if (emailMatch) {
const domain = emailMatch[1].replace('www.', '');
return domain.split('.')[0].charAt(0).toUpperCase() + domain.split('.')[0].slice(1);
}

return "未知公司";
}

function cleanMarkdownContent(markdown) {
return markdown
// 移除导航元素
.replace(/^[跳至内容].$/gmi, '')
.replace(/^[.
](#.)$/gmi, '')
// 删除 Markdown 链接但保留文本
.replace(/[([]]+)]([)]+)/g, '$1')
// 删除图片和 base64
.replace(/![([]]*)]([)]
)/g, '')
.replace(/<Base64-Image-Removed>/g, '')
// 删除 cookie/隐私声明
.replace(/.?(cookie|隐私政策|服务条款).?\n/gi, '')
// 清理多余空格
.replace(/\s+/g, ' ')
// 删除多余空行
.replace(/\n\s*\n\s*\n/g, '\n\n')
.trim();
}

function extractContactInformation(content) {
// 电子邮件的正则表达式
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}/g;

// 电话号码的正则表达式(支持国际)
const phoneRegex = /(?:+\d{1,3}\s?)?\d{3}\s?\d{3}\s?\d{3,4}|(\d{3})\s?\d{3}-?\d{4}/g;

const emails = [...new Set((content.match(emailRegex) || [])
.filter(email => !email.includes('example.com'))
.slice(0, 3))];

const phones = [...new Set((content.match(phoneRegex) || [])
.filter(phone => phone.replace(/\D/g, '').length >= 9)
.slice(0, 2))];

return { emails, phones };
}

function extractBusinessSections(content) {
const sections = {};

// 搜索重要部分
const lines = content.split('\n');
let currentSection = '';
let currentContent = '';

for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim();

Copy
// 标题检测
if (line.startsWith('#')) {
  // 保存前一个部分
  if (currentSection && currentContent) {
    sections[currentSection] = currentContent.trim().substring(0, 500);
  }
  
  // 新部分
  const title = line.replace(/^#+\s*/, '').toLowerCase();
  if (title.includes('关于') || title.includes('服务') || 
      title.includes('联系') || title.includes('公司')) {
    currentSection = title.includes('关于') ? '关于' :
                    title.includes('服务') ? '服务' :
                    title.includes('联系') ? '联系' : '公司';
    currentContent = '';
  } else {
    currentSection = '';
  }
} else if (currentSection && line) {
  currentContent += line + '\n';
}
json Copy
}
  
  // 保存最后一部分
  if (currentSection && currentContent) {
    sections[currentSection] = currentContent.trim().substring(0, 500);
  }
  
  return sections;
}

function buildContentForAI({ companyName, sourceURL, description, businessSections, contactInfo, cleanedContent }) {
  let aiContent = `公司分析请求\n\n`;
  aiContent += `公司:${companyName}\n`;
  aiContent += `网站:${sourceURL}\n`;
  
  if (description) {
    aiContent += `描述:${description}\n`;
  }
  
  aiContent += `\n联系信息:\n`;
  if (contactInfo.emails.length > 0) {
    aiContent += `邮箱:${contactInfo.emails.join(', ')}\n`;
  }
  if (contactInfo.phones.length > 0) {
    aiContent += `电话:${contactInfo.phones.join(', ')}\n`;
  }
  
  aiContent += `\n业务部分:\n`;
  for (const [section, content] of Object.entries(businessSections)) {
    if (content) {
      aiContent += `\n${section.toUpperCase()}:\n${content}\n`;
    }
  }
  
  // 添加主要内容(限制)
  aiContent += `\n完整内容预览:\n`;
  aiContent += cleanedContent.substring(0, 2000);
  
  // Claude API的最终限制
  return aiContent.substring(0, 6000);
}

function assessContentQuality(content, contactInfo) {
  const wordCount = content.split(/\s+/).length;
  
  return {
    word_count: wordCount,
    has_contact_info: contactInfo.emails.length > 0 || contactInfo.phones.length > 0,
    has_about_section: /about|company|who we are/gi.test(content),
    has_services_section: /services|products|solutions/gi.test(content),
    has_team_section: /team|leadership|staff/gi.test(content),
    content_richness_score: Math.min(10, Math.floor(wordCount / 50)),
    email_count: contactInfo.emails.length,
    phone_count: contactInfo.phones.length,
    estimated_quality: wordCount > 200 && contactInfo.emails.length > 0 ? "高" : 
                      wordCount > 100 ? "中" : "低"
  };
}

3. 为什么要添加代码处理步骤?

  • 数据结构适配:将Scrapeless数组格式转换为Claude友好的结构
  • 内容优化:提取并优先处理与业务相关的部分
  • 联系人发现:自动识别邮箱和电话号码
  • 质量评估:评估内容的丰富性和完整性
  • 令牌效率:减少内容大小,同时保留重要信息
  • 错误处理:优雅地处理失败的爬虫和不足的内容
  • 调试支持:全面的日志记录以便故障排除

4. 预期输出结构

经过处理后,每个线索将具有以下结构化格式:

Copy
{
  "url": "https://company.com",
  "company_name": "公司名称",
  "content": "公司分析请求\n\n公司:...",
  "raw_content_length": 50000,
  "processed_content_length": 2500,
  "extracted_emails": ["contact@company.com"],
  "extracted_phones": ["+1-555-123-4567"],
  "content_quality": {
    "word_count": 5000,
    "has_contact_info": true,
    "estimated_quality": "高",
    "content_richness_score": 10
  },
  "processing_status": "成功"
}
代码节点配置

这有助于验证数据格式并排除任何处理问题。

5. 代码节点的好处

  • 成本节约:更小、更干净的内容 = 更少的Claude API令牌
  • 更好的结果:聚焦内容改善AI分析的准确性
  • 错误恢复:处理空响应和失败的爬虫
  • 灵活性:根据结果轻松调整解析逻辑
  • 质量指标:内置的线索数据完整性评估

第6步:使用Claude进行AI驱动的线索资格审核

使用Claude AI从经过处理和结构化的爬虫内容中提取和评估线索信息。

  1. 在代码节点后添加一个AI代理节点
Claude AI配置
  1. 添加一个Anthropic Claude节点并配置用于线索分析
Claude AI配置
  1. 配置提示以提取结构化的B2B线索数据
    点击AI代理 -> 添加选项 -> 系统消息并复制粘贴以下消息
Claude AI配置

系统线索提取提示:

Copy
分析此处理过的公司网站内容并提取B2B线索信息。仅返回有效的JSON:
公司网址:{{ $json.url }}
公司名称:{{ $json.company_name }}
处理过的网站内容:{{ $json.content }}
内容质量评估:{{ $json.content_quality }}
预提取的联系信息: 
邮箱:{{ $json.extracted_emails }}
电话:{{ $json.extracted_phones }}
元数据信息:{{ $json.metadata_info }}

处理细节:
原始内容长度:{{ $json.raw_content_length }} 个字符
处理后内容长度:{{ $json.processed_content_length }} 个字符
处理状态:{{ $json.processing_status }}

基于这些结构化数据,提取并确认该B2B潜在客户。仅返回有效的JSON:

{
"公司名称": "来自内容的官方公司名称",
"行业": "识别出的主要行业/部门",
"公司规模": "员工数量或规模类别(初创公司/中小企业/中型市场/大型企业)",
"位置": "总部位置或主要市场",
"联系邮件": "提取邮箱中最好的通用或销售邮箱",
"电话": "提取的电话号码中主要的电话号码",
"主要服务": ["基于内容提供的主要服务/产品"],
"目标市场": "他们服务的对象(B2B/B2C,中小企业/大型企业,特定行业)",
"技术": ["提到的技术堆栈、平台或工具"],
"融资阶段": "如果提到融资阶段(种子/系列A/B/C/公开/私有)",
"商业模式": "收入模型(SaaS/咨询/产品/市场)",
"社交媒体存在": {
"领英": "如果在内容中找到,LinkedIn公司网址",
"推特": "如果找到的推特账号"
},
"潜在客户评分": 8.5,
"资格理由": ["具体说明该潜在客户合格或不合格的理由"],
"决策者": ["找到的关键联系人姓名和职务"],
"下一步行动": ["基于公司简介的推荐后续策略"],
"内容洞察": {
"网站质量": "根据内容丰富度评估为专业/基本/差",
"最近活动": "提到的任何最近新闻、融资或更新",
"竞争定位": "他们与竞争对手的定位方式"
}
}

增强评分标准(1-10):
9-10:完美的理想客户匹配 + 完整的联系信息 + 高增长信号 + 专业内容
7-8:良好的理想客户匹配 + 部分联系信息 + 稳定公司 + 高质量内容
5-6:适度匹配 + 有限联系信息 + 基本内容 + 需要研究
3-4:匹配差 + 最少信息 + 低质量内容 + 错误目标市场
1-2:不合格 + 无联系信息 + 处理失败 + 不相关

评分考虑因素:
内容质量评分:{{ $json.content_quality.content_richness_score }}/10
联系信息:{{ $json.content_quality.email_count }}封邮件,{{ $json.content_quality.phone_count }}个电话
内容完整性:{{ $json.content_quality.has_about_section }},{{ $json.content_quality.has_services_section }}
处理成功:{{ $json.processing_status }}
内容量:{{ $json.content_quality.word_count }}个单词

指令:
仅使用提取的联系信息来自extracted_emails和extracted_phones
基于处理后的company_name字段来确定公司名称,而不是原始内容
在决定lead_score时考虑内容质量指标
如果处理状态不是“成功”,则显著降低评分
对任何缺失的信息使用null - 不要虚构数据
评分要保守 - 低估总比高估好
根据提供的结构化内容关注B2B相关性和理想客户匹配

Copy
提示结构使过滤更可靠,因为Claude现在接收一致的、结构化的输入。这导致更准确的潜在客户评分和更好的资格决策,适用于您的工作流程的下一步。

## 第7步:解析Claude AI响应
在过滤潜在客户之前,我们需要正确解析Claude的JSON响应,该响应可能以markdown格式包裹。

1. 在AI Agent (Claude)之后添加一个代码节点
2. 配置以解析和清理Claude的JSON响应


![Claude响应解析配置](https://assets.scrapeless.com/prod/posts/build-b2b-lead-generation-workflow-with-n8n/aae4593790f5f1c5d34d43ecaf354e85.png)

### 1. 代码节点配置

// 解析Claude AI JSON响应的代码
console.log("=== 解析Claude AI响应 ===");

try {
// Claude的响应以“output”字段到达
const claudeOutput = $json.output || "";

console.log("Claude输出长度:", claudeOutput.length);
console.log("Claude输出预览:", claudeOutput.substring(0, 200));

// 从Claude的markdown响应中提取JSON
let jsonString = claudeOutput;

// 如果存在,移除markdown反引号
if (jsonString.includes('json')) {
const jsonMatch = jsonString.match(/json\s*([\s\S]?)\s/);
if (jsonMatch && jsonMatch[1]) {
jsonString = jsonMatch[1].trim();
}
} else if (jsonString.includes('')) {
// 仅包含时的后备
const jsonMatch = jsonString.match(/\s*([\s\S]?)\s```/);
if (jsonMatch && jsonMatch[1]) {
jsonString = jsonMatch[1].trim();
}
}

// 额外清理
jsonString = jsonString.trim();

console.log("提取的JSON字符串:", jsonString.substring(0, 300));

// 解析JSON
const leadData = JSON.parse(jsonString);

console.log("成功解析潜在客户数据:", leadData.company_name);
console.log("潜在客户评分:", leadData.lead_score);

javascript Copy
console.log("联系邮箱:", leadData.contact_email);

// 验证和数据清理
const cleanedLead = {
    company_name: leadData.company_name || "未知",
    industry: leadData.industry || null,
    company_size: leadData.company_size || null,
    location: leadData.location || null,
    contact_email: leadData.contact_email || null,
    phone: leadData.phone || null,
    key_services: Array.isArray(leadData.key_services) ? leadData.key_services : [],
    target_market: leadData.target_market || null,
    technologies: Array.isArray(leadData.technologies) ? leadData.technologies : [],
    funding_stage: leadData.funding_stage || null,
    business_model: leadData.business_model || null,
    social_presence: leadData.social_presence || { linkedin: null, twitter: null },
    lead_score: typeof leadData.lead_score === 'number' ? leadData.lead_score : 0,
    qualification_reasons: Array.isArray(leadData.qualification_reasons) ? leadData.qualification_reasons : [],
    decision_makers: Array.isArray(leadData.decision_makers) ? leadData.decision_makers : [],
    next_actions: Array.isArray(leadData.next_actions) ? leadData.next_actions : [],
    content_insights: leadData.content_insights || {},

    // 过滤的元信息
    is_qualified: leadData.lead_score >= 6 && leadData.contact_email !== null,
    has_contact_info: !!(leadData.contact_email || leadData.phone),
    processing_timestamp: new Date().toISOString(),
    claude_processing_status: "成功"
};

console.log(✅ 线索已处理: ${cleanedLead.company_name} (得分: ${cleanedLead.lead_score}, 合格: ${cleanedLead.is_qualified}));

return cleanedLead;

} catch (error) {
console.error("❌ 解析Claude响应时出错:", error);
console.error("原始输出:", $json.output);

// 结构化错误响应
return {
    company_name: "Claude解析错误",
    industry: null,
    company_size: null,
    location: null,
    contact_email: null,
    phone: null,
    key_services: [],
    target_market: null,
    technologies: [],
    funding_stage: null,
    business_model: null,
    social_presence: { linkedin: null, twitter: null },
    lead_score: 0,
    qualification_reasons: [`Claude解析失败: ${error.message}`],
    decision_makers: [],
    next_actions: ["修复Claude响应解析", "检查JSON格式"],
    content_insights: {},
    is_qualified: false,
    has_contact_info: false,
    processing_timestamp: new Date().toISOString(),
    claude_processing_status: "失败",
    parsing_error: error.message,
    raw_claude_output: $json.output || "未收到输出"
};
}

2. 为什么添加Claude响应解析?

  • Markdown处理:去除Claude响应中的JSON格式
  • 数据验证:确保所有字段具有正确的类型和默认值
  • 错误恢复:优雅处理JSON解析失败
  • 过滤准备:添加计算字段以便于过滤
  • 调试支持:综合日志记录以方便故障排除
Claude解析结果

第8步:线索过滤和质量控制

根据资格得分和数据完整性使用解析和验证的数据来过滤线索。

  1. 在Claude响应解析器后添加IF节点
  2. 设置增强的资格标准
线索过滤配置

1. 新的IF节点配置

现在数据已正确解析,在IF节点中使用以下条件:

1:添加多个条件

条件1:

  • 字段: {{ $json.lead_score }}
  • 操作符: 等于或大于
  • 值: 6

条件2:

  • 字段: {{ $json.claude_processing_status }}
  • 操作符: 等于
  • 值: 成功

选项:在必要时转换类型

  • TRUE
线索过滤配置

2. 过滤的好处

  • 质量保证:只有合格的线索才能存储
  • 成本优化:防止处理低质量线索
  • 数据完整性:确保解析的数据有效后再存储
  • 调试能力:捕获并记录解析失败

第9步:将线索存储到Google表格

将合格的线索存储到Google表格数据库中,以便于访问和管理。

  1. 在过滤后添加Google表格节点
  2. 配置为追加新线索
    但是,您可以根据需要管理数据。
Google表格配置
Google表格配置

Google表格设置:

  1. 创建一个名为“B2B潜在客户数据库”的电子表格
  2. 设置列:
  • 公司名称
  • 行业
  • 公司规模
  • 位置
  • 联系邮箱
  • 电话
  • 网站
  • 潜在客户评分
  • 添加日期
  • 资质备注
  • 下一步行动

就我而言,我选择直接使用Discord Webhook

步骤9-2:Discord通知(可适用于其他服务)

发送新合格潜在客户的实时通知。

  1. 添加一个HTTP请求节点以便于Discord Webhook
Discord webhook配置
  1. 配置Discord特定的有效负载格式
Discord webhook配置

Discord Webhook配置:

  • 方法:POST
  • URL:你的Discord webhook URL
  • 头部:内容类型:application/json

Discord消息有效负载:

Copy
{
  "embeds": [
    {
      "title": "🎯 新的合格潜在客户已找到!",
      "description": "**{{ $json.company_name || '未知公司' }}** (评分:{{ $json.lead_score || 0 }}/10)",
      "color": 3066993,
      "fields": [
        {
          "name": "行业",
          "value": "{{ $json.industry || '未指定' }}",
          "inline": true
        },
        {
          "name": "规模",
          "value": "{{ $json.company_size || '未指定' }}",
          "inline": true
        },
        {
          "name": "位置",
          "value": "{{ $json.location || '未指定' }}",
          "inline": true
        },
        {
          "name": "联系人",
          "value": "{{ $json.contact_email || '未找到邮箱' }}",
          "inline": false
        },
        {
          "name": "电话",
          "value": "{{ $json.phone || '未找到电话' }}",
          "inline": false
        },
        {
          "name": "服务",
          "value": "{{ $json.key_services && $json.key_services.length > 0 ? $json.key_services.slice(0, 3).join(', ') : '未指定' }}",
          "inline": false
        },
        {
          "name": "网站",
          "value": "[访问网站]({{ $node['Code2'].json.url || '#' }})",
          "inline": false
        },
        {
          "name": "合格原因",
          "value": "{{ $json.qualification_reasons && $json.qualification_reasons.length > 0 ? $json.qualification_reasons.slice(0, 2).join(' • ') : '满足标准的资格标准' }}",
          "inline": false
        }
      ],
      "footer": {
        "text": "由n8n潜在客户生成工作流生成"
      },
      "timestamp": ""
    }
  ]
}

结果

Discord webhook配置

行业特定配置

SaaS/软件公司

搜索查询:

Copy
"SaaS公司" "B2B软件" "企业软件"
"云软件" "API" "开发者" "订阅模式"
"软件即服务" "平台" "集成"

资格标准:

  • 员工数量:20-500
  • 使用现代技术栈
  • 拥有API文档
  • 在GitHub上活跃/提供技术内容

营销机构

搜索查询:

Copy
"数字营销机构" "B2B营销" "企业客户"
"营销自动化" "需求生成" "潜在客户生成"
"内容营销机构" "增长营销" "绩效营销"

资格标准:

  • 提供客户案例研究
  • 团队规模:10-100
  • 专注于B2B
  • 有活跃的内容营销

电子商务/零售

搜索查询:

Copy
"电子商务公司" "在线零售" "D2C品牌"
"Shopify商店" "WooCommerce" "电子商务平台"
"在线市场" "数字商务" "零售技术"

资格标准:

  • 收入指标
  • 多渠道存在
  • 提到技术平台
  • 增长轨迹信号

数据管理和分析

潜在客户数据库架构

将你的Google Sheets构建为最大效用:

核心潜在客户信息:

  • 公司名称、行业、规模、位置
  • 联系邮箱、电话、网站
  • 潜在客户评分、添加日期、来源查询

资格数据:

  • 资格原因、决策者
  • 下一步行动、跟进日期
  • 分配的销售代表、潜在客户状态

丰富字段:

  • LinkedIn URL、社交媒体存在
  • 使用的技术、融资阶段
  • 竞争对手、最新新闻

分析与报告

通过附加表格跟踪工作流性能:

每日汇总表:

  • 每日生成的潜在客户
  • 平均潜在客户评分
  • 找到的主要行业
  • 转化率

搜索性能:

  • 表现最佳的查询
  • 地理分布
  • 公司规模细分
  • 按行业的成功率

投资回报率跟踪:

  • 每个潜在客户的成本(API成本)
  • 联系时间
  • 转化为机会
  • 收入归属

结论

这个智能B2B潜在客户生成工作流程通过自动化发现、资格认证和潜在客户的组织,改变了您的销售前景。通过将谷歌搜索与智能爬虫和人工智能分析相结合,您可以建立一个系统化的方法来构建您的销售管道。

该工作流程适应您的特定行业、公司规模目标和资格标准,同时通过人工智能驱动的分析保持高数据质量。通过适当的设置和监控,该系统成为您销售团队合格线索的稳定来源。

与谷歌表格的集成为销售团队提供了一个可访问的数据库,而Discord通知确保对高价值潜在客户的即时关注。模块化设计允许轻松适应不同的通知服务、客户关系管理系统和数据存储解决方案。


Scrapeless严格遵守适用法律法规,仅根据网站服务条款和隐私政策访问公开可用数据。该解决方案旨在用于合法的商业情报和营销优化目的。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录