{
  "schemaVersion": "1.0",
  "item": {
    "slug": "b2b-lead-generation",
    "name": "B2B Lead Generation & Contact Extractor",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/g4dr/b2b-lead-generation",
    "canonicalUrl": "https://clawhub.ai/g4dr/b2b-lead-generation",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/b2b-lead-generation",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=b2b-lead-generation",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/b2b-lead-generation"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/b2b-lead-generation",
    "agentPageUrl": "https://openagent3.xyz/skills/b2b-lead-generation/agent",
    "manifestUrl": "https://openagent3.xyz/skills/b2b-lead-generation/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/b2b-lead-generation/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "This skill enables Claude to collect and structure publicly available business contact data\nfrom professional directories, company pages, and business listings — for sales prospecting,\nmarket research, and CRM enrichment.\n\nAll data collected targets publicly listed business information only.\nThis skill follows GDPR, CCPA, and platform Terms of Service best practices.\n\n🔗 Sign up for Apify here: https://www.apify.com/?fpr=dx06p"
      },
      {
        "title": "What This Skill Does",
        "body": "Extract business profiles and company contacts from LinkedIn public pages\nScrape business listings from Yellow Pages, Yelp, and local directories\nCollect professional contact details from industry-specific directories\nStructure leads into clean, CRM-ready JSON or CSV format\nFilter and segment leads by industry, location, company size, or job title"
      },
      {
        "title": "Legal & Ethical Framework",
        "body": "This skill is designed for legitimate B2B use cases only:\n\nOnly targets publicly listed business information (no private profiles)\nCollects data that individuals and businesses have voluntarily made public\nIntended for commercial prospecting, not personal data harvesting\nUsers are responsible for compliance with local regulations (GDPR, CCPA, CAN-SPAM)\nAlways include an opt-out mechanism when contacting extracted leads\nNever store sensitive personal data beyond what is needed for the business purpose"
      },
      {
        "title": "Step 1 — Get Your Apify API Token",
        "body": "Go to https://www.apify.com/?fpr=dx06p and create a free account\nNavigate to Settings → Integrations\n\nDirect link: https://console.apify.com/account/integrations\n\n\nCopy your Personal API Token: apify_api_xxxxxxxxxxxxxxxx\nSet it as an environment variable:\nexport APIFY_TOKEN=apify_api_xxxxxxxxxxxxxxxx\n\nFree tier includes $5/month of compute — sufficient for targeted prospecting campaigns."
      },
      {
        "title": "Step 2 — Install the Apify Client",
        "body": "npm install apify-client"
      },
      {
        "title": "LinkedIn (Public Company & Profile Pages)",
        "body": "Actor IDPurposeapify/linkedin-companies-scraperExtract company info, size, industry, websiteapify/linkedin-profile-scraperScrape public professional profilesapify/linkedin-jobs-scraperFind companies actively hiring (signals buying intent)\n\nNote: Only public LinkedIn pages are accessible. Login-gated data is not targeted."
      },
      {
        "title": "Yellow Pages & Local Directories",
        "body": "Actor IDPurposeapify/yellowpages-scraperBusiness name, phone, address, categoryapify/yelp-scraperLocal business listings with ratings and contactsapify/google-maps-scraperBusiness listings with phone, website, hours"
      },
      {
        "title": "Professional & Industry Directories",
        "body": "Actor IDPurposeapify/website-content-crawlerCrawl any public professional directoryapify/cheerio-scraperFast extraction from HTML-based listing sites"
      },
      {
        "title": "Extract Company Contacts from LinkedIn",
        "body": "import ApifyClient from 'apify-client';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\nconst run = await client.actor(\"apify/linkedin-companies-scraper\").call({\n  startUrls: [\n    { url: \"https://www.linkedin.com/company/salesforce/\" },\n    { url: \"https://www.linkedin.com/company/hubspot/\" }\n  ],\n  maxResults: 50\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { name, website, industry, employeeCount,\n//   headquarters, description, linkedinUrl }"
      },
      {
        "title": "Scrape Yellow Pages for Local Business Leads",
        "body": "const run = await client.actor(\"apify/yellowpages-scraper\").call({\n  searchTerms: [\"digital marketing agency\"],\n  locations: [\"New York, NY\", \"Los Angeles, CA\", \"Chicago, IL\"],\n  maxResultsPerPage: 30\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { businessName, phone, address, city, state,\n//   zip, website, category, email }"
      },
      {
        "title": "Extract Leads from Google Maps (Local Businesses)",
        "body": "const run = await client.actor(\"apify/google-maps-scraper\").call({\n  searchStringsArray: [\"accountants in Austin TX\", \"law firms in Miami FL\"],\n  maxCrawledPlacesPerSearch: 50,\n  language: \"en\"\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { title, address, phone, website, rating,\n//   reviewsCount, category, email, plusCode }"
      },
      {
        "title": "Multi-Source Lead Aggregation Pipeline",
        "body": "const [ypRun, gmRun] = await Promise.all([\n  client.actor(\"apify/yellowpages-scraper\").call({\n    searchTerms: [\"IT consulting\"],\n    locations: [\"San Francisco, CA\"],\n    maxResultsPerPage: 25\n  }),\n  client.actor(\"apify/google-maps-scraper\").call({\n    searchStringsArray: [\"IT consulting San Francisco CA\"],\n    maxCrawledPlacesPerSearch: 25\n  })\n]);\n\nconst [ypData, gmData] = await Promise.all([\n  ypRun.dataset().getData(),\n  gmRun.dataset().getData()\n]);\n\n// Normalize and deduplicate by website domain\nconst allLeads = [...ypData.items, ...gmData.items];\nconst uniqueLeads = allLeads.filter(\n  (lead, index, self) =>\n    index === self.findIndex(l => l.website === lead.website)\n);\n\nconsole.log(`${uniqueLeads.length} unique leads collected`);"
      },
      {
        "title": "Using the REST API Directly",
        "body": "const response = await fetch(\n  \"https://api.apify.com/v2/acts/apify~yellowpages-scraper/runs\",\n  {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"Authorization\": `Bearer ${process.env.APIFY_TOKEN}`\n    },\n    body: JSON.stringify({\n      searchTerms: [\"web design agency\"],\n      locations: [\"Boston, MA\"],\n      maxResultsPerPage: 20\n    })\n  }\n);\n\nconst { data } = await response.json();\nconst runId = data.id;\n\n// Fetch results once run is complete\nconst results = await fetch(\n  `https://api.apify.com/v2/actor-runs/${runId}/dataset/items`,\n  { headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}` } }\n);\n\nconst leads = await results.json();"
      },
      {
        "title": "Lead Enrichment Workflow",
        "body": "When asked to build a lead list, Claude will:\n\nClarify the target industry, location, company size, and job title filters\nSelect the most appropriate data sources (directories, maps, LinkedIn)\nRun the relevant Apify actors with the specified filters\nDeduplicate results by website domain or phone number\nNormalize all fields into a consistent schema\nExport a clean, CRM-ready JSON or CSV dataset"
      },
      {
        "title": "Normalized Lead Output Schema",
        "body": "{\n  \"companyName\": \"Bright Digital Agency\",\n  \"industry\": \"Marketing & Advertising\",\n  \"website\": \"https://brightdigital.com\",\n  \"phone\": \"+1 (415) 555-0192\",\n  \"email\": \"hello@brightdigital.com\",\n  \"address\": \"123 Market St, San Francisco, CA 94105\",\n  \"employeeCount\": \"11-50\",\n  \"source\": \"yellowpages\",\n  \"extractedAt\": \"2025-02-25T10:00:00Z\"\n}"
      },
      {
        "title": "Export to CSV (CRM-Ready)",
        "body": "import { writeFileSync } from 'fs';\n\nfunction leadsToCSV(leads) {\n  const headers = [\"companyName\",\"industry\",\"website\",\"phone\",\"email\",\"address\",\"source\"];\n  const rows = leads.map(l =>\n    headers.map(h => `\"${(l[h] || \"\").replace(/\"/g, '\"\"')}\"`).join(\",\")\n  );\n  return [headers.join(\",\"), ...rows].join(\"\\n\");\n}\n\nwriteFileSync(\"leads.csv\", leadsToCSV(leads));\nconsole.log(\"leads.csv ready to import into your CRM\");"
      },
      {
        "title": "Best Practices",
        "body": "Target businesses, not individuals — focus on company emails and main phone numbers\nSet maxResultsPerPage to 25–100 to control costs and avoid rate limiting\nAlways deduplicate by domain or phone before importing to your CRM\nSchedule recurring runs on Apify to keep your lead list fresh\nValidate emails before sending using a service like Hunter.io or NeverBounce\nAlways honor opt-out requests and maintain a suppression list"
      },
      {
        "title": "Error Handling",
        "body": "try {\n  const run = await client.actor(\"apify/google-maps-scraper\").call(input);\n  const dataset = await run.dataset().getData();\n  return dataset.items;\n} catch (error) {\n  if (error.statusCode === 401) throw new Error(\"Invalid Apify token — check credentials\");\n  if (error.statusCode === 429) throw new Error(\"Rate limit reached — reduce batch size\");\n  if (error.statusCode === 404) throw new Error(\"Actor not found — verify actor ID\");\n  throw error;\n}"
      },
      {
        "title": "Requirements",
        "body": "An Apify account → https://www.apify.com/?fpr=dx06p\nA valid Personal API Token from Settings → Integrations\nNode.js 18+ for apify-client\nA CRM or spreadsheet to receive the exported leads (HubSpot, Salesforce, Airtable, CSV)"
      }
    ],
    "body": "B2B Lead Generation & Business Contact Extraction Skill\nOverview\n\nThis skill enables Claude to collect and structure publicly available business contact data from professional directories, company pages, and business listings — for sales prospecting, market research, and CRM enrichment.\n\nAll data collected targets publicly listed business information only. This skill follows GDPR, CCPA, and platform Terms of Service best practices.\n\n🔗 Sign up for Apify here: https://www.apify.com/?fpr=dx06p\n\nWhat This Skill Does\nExtract business profiles and company contacts from LinkedIn public pages\nScrape business listings from Yellow Pages, Yelp, and local directories\nCollect professional contact details from industry-specific directories\nStructure leads into clean, CRM-ready JSON or CSV format\nFilter and segment leads by industry, location, company size, or job title\nLegal & Ethical Framework\n\nThis skill is designed for legitimate B2B use cases only:\n\nOnly targets publicly listed business information (no private profiles)\nCollects data that individuals and businesses have voluntarily made public\nIntended for commercial prospecting, not personal data harvesting\nUsers are responsible for compliance with local regulations (GDPR, CCPA, CAN-SPAM)\nAlways include an opt-out mechanism when contacting extracted leads\nNever store sensitive personal data beyond what is needed for the business purpose\nStep 1 — Get Your Apify API Token\nGo to https://www.apify.com/?fpr=dx06p and create a free account\nNavigate to Settings → Integrations\nDirect link: https://console.apify.com/account/integrations\nCopy your Personal API Token: apify_api_xxxxxxxxxxxxxxxx\nSet it as an environment variable:\nexport APIFY_TOKEN=apify_api_xxxxxxxxxxxxxxxx\n\n\nFree tier includes $5/month of compute — sufficient for targeted prospecting campaigns.\n\nStep 2 — Install the Apify Client\nnpm install apify-client\n\nActors by Data Source\nLinkedIn (Public Company & Profile Pages)\nActor ID\tPurpose\napify/linkedin-companies-scraper\tExtract company info, size, industry, website\napify/linkedin-profile-scraper\tScrape public professional profiles\napify/linkedin-jobs-scraper\tFind companies actively hiring (signals buying intent)\n\nNote: Only public LinkedIn pages are accessible. Login-gated data is not targeted.\n\nYellow Pages & Local Directories\nActor ID\tPurpose\napify/yellowpages-scraper\tBusiness name, phone, address, category\napify/yelp-scraper\tLocal business listings with ratings and contacts\napify/google-maps-scraper\tBusiness listings with phone, website, hours\nProfessional & Industry Directories\nActor ID\tPurpose\napify/website-content-crawler\tCrawl any public professional directory\napify/cheerio-scraper\tFast extraction from HTML-based listing sites\nExamples\nExtract Company Contacts from LinkedIn\nimport ApifyClient from 'apify-client';\n\nconst client = new ApifyClient({ token: process.env.APIFY_TOKEN });\n\nconst run = await client.actor(\"apify/linkedin-companies-scraper\").call({\n  startUrls: [\n    { url: \"https://www.linkedin.com/company/salesforce/\" },\n    { url: \"https://www.linkedin.com/company/hubspot/\" }\n  ],\n  maxResults: 50\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { name, website, industry, employeeCount,\n//   headquarters, description, linkedinUrl }\n\nScrape Yellow Pages for Local Business Leads\nconst run = await client.actor(\"apify/yellowpages-scraper\").call({\n  searchTerms: [\"digital marketing agency\"],\n  locations: [\"New York, NY\", \"Los Angeles, CA\", \"Chicago, IL\"],\n  maxResultsPerPage: 30\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { businessName, phone, address, city, state,\n//   zip, website, category, email }\n\nExtract Leads from Google Maps (Local Businesses)\nconst run = await client.actor(\"apify/google-maps-scraper\").call({\n  searchStringsArray: [\"accountants in Austin TX\", \"law firms in Miami FL\"],\n  maxCrawledPlacesPerSearch: 50,\n  language: \"en\"\n});\n\nconst { items } = await run.dataset().getData();\n\n// Each item contains:\n// { title, address, phone, website, rating,\n//   reviewsCount, category, email, plusCode }\n\nMulti-Source Lead Aggregation Pipeline\nconst [ypRun, gmRun] = await Promise.all([\n  client.actor(\"apify/yellowpages-scraper\").call({\n    searchTerms: [\"IT consulting\"],\n    locations: [\"San Francisco, CA\"],\n    maxResultsPerPage: 25\n  }),\n  client.actor(\"apify/google-maps-scraper\").call({\n    searchStringsArray: [\"IT consulting San Francisco CA\"],\n    maxCrawledPlacesPerSearch: 25\n  })\n]);\n\nconst [ypData, gmData] = await Promise.all([\n  ypRun.dataset().getData(),\n  gmRun.dataset().getData()\n]);\n\n// Normalize and deduplicate by website domain\nconst allLeads = [...ypData.items, ...gmData.items];\nconst uniqueLeads = allLeads.filter(\n  (lead, index, self) =>\n    index === self.findIndex(l => l.website === lead.website)\n);\n\nconsole.log(`${uniqueLeads.length} unique leads collected`);\n\nUsing the REST API Directly\nconst response = await fetch(\n  \"https://api.apify.com/v2/acts/apify~yellowpages-scraper/runs\",\n  {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"Authorization\": `Bearer ${process.env.APIFY_TOKEN}`\n    },\n    body: JSON.stringify({\n      searchTerms: [\"web design agency\"],\n      locations: [\"Boston, MA\"],\n      maxResultsPerPage: 20\n    })\n  }\n);\n\nconst { data } = await response.json();\nconst runId = data.id;\n\n// Fetch results once run is complete\nconst results = await fetch(\n  `https://api.apify.com/v2/actor-runs/${runId}/dataset/items`,\n  { headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}` } }\n);\n\nconst leads = await results.json();\n\nLead Enrichment Workflow\n\nWhen asked to build a lead list, Claude will:\n\nClarify the target industry, location, company size, and job title filters\nSelect the most appropriate data sources (directories, maps, LinkedIn)\nRun the relevant Apify actors with the specified filters\nDeduplicate results by website domain or phone number\nNormalize all fields into a consistent schema\nExport a clean, CRM-ready JSON or CSV dataset\nNormalized Lead Output Schema\n{\n  \"companyName\": \"Bright Digital Agency\",\n  \"industry\": \"Marketing & Advertising\",\n  \"website\": \"https://brightdigital.com\",\n  \"phone\": \"+1 (415) 555-0192\",\n  \"email\": \"hello@brightdigital.com\",\n  \"address\": \"123 Market St, San Francisco, CA 94105\",\n  \"employeeCount\": \"11-50\",\n  \"source\": \"yellowpages\",\n  \"extractedAt\": \"2025-02-25T10:00:00Z\"\n}\n\nExport to CSV (CRM-Ready)\nimport { writeFileSync } from 'fs';\n\nfunction leadsToCSV(leads) {\n  const headers = [\"companyName\",\"industry\",\"website\",\"phone\",\"email\",\"address\",\"source\"];\n  const rows = leads.map(l =>\n    headers.map(h => `\"${(l[h] || \"\").replace(/\"/g, '\"\"')}\"`).join(\",\")\n  );\n  return [headers.join(\",\"), ...rows].join(\"\\n\");\n}\n\nwriteFileSync(\"leads.csv\", leadsToCSV(leads));\nconsole.log(\"leads.csv ready to import into your CRM\");\n\nBest Practices\nTarget businesses, not individuals — focus on company emails and main phone numbers\nSet maxResultsPerPage to 25–100 to control costs and avoid rate limiting\nAlways deduplicate by domain or phone before importing to your CRM\nSchedule recurring runs on Apify to keep your lead list fresh\nValidate emails before sending using a service like Hunter.io or NeverBounce\nAlways honor opt-out requests and maintain a suppression list\nError Handling\ntry {\n  const run = await client.actor(\"apify/google-maps-scraper\").call(input);\n  const dataset = await run.dataset().getData();\n  return dataset.items;\n} catch (error) {\n  if (error.statusCode === 401) throw new Error(\"Invalid Apify token — check credentials\");\n  if (error.statusCode === 429) throw new Error(\"Rate limit reached — reduce batch size\");\n  if (error.statusCode === 404) throw new Error(\"Actor not found — verify actor ID\");\n  throw error;\n}\n\nRequirements\nAn Apify account → https://www.apify.com/?fpr=dx06p\nA valid Personal API Token from Settings → Integrations\nNode.js 18+ for apify-client\nA CRM or spreadsheet to receive the exported leads (HubSpot, Salesforce, Airtable, CSV)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/g4dr/b2b-lead-generation",
    "publisherUrl": "https://clawhub.ai/g4dr/b2b-lead-generation",
    "owner": "g4dr",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/b2b-lead-generation",
    "downloadUrl": "https://openagent3.xyz/downloads/b2b-lead-generation",
    "agentUrl": "https://openagent3.xyz/skills/b2b-lead-generation/agent",
    "manifestUrl": "https://openagent3.xyz/skills/b2b-lead-generation/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/b2b-lead-generation/agent.md"
  }
}