Systems Lab

Agent skill

lead-enricher

Enriches inbound leads with firmographic and technographic data.

dormantNeeds a keyActs undeclared1,277 words

Filed under Prospecting and list building.

From ekatasingh1107/b2b-gtm-skills · 99 skills · 2 · pushed 2026-04-11

What it does when it runs

Enriches inbound leads with firmographic and technographic data. Takes minimal lead info and enriches via WebSearch, Apollo, or ZoomInfo to produce a complete lead record with company size, revenue, tech stack, social profiles, and decision-maker details.

Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
  • APOLLO_API_KEY
  • ZEROBOUNCE_API_KEY
Hosts it reaches
  • linkedin.com
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
network

Ask about lead-enricher

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/ekatasingh1107/b2b-gtm-skills.git /tmp/b2b-gtm-skills
git -C /tmp/b2b-gtm-skills sparse-checkout set "skills/composites/lead-enricher"
mkdir -p ~/.claude/skills/lead-enricher
cp -R "/tmp/b2b-gtm-skills/skills/composites/lead-enricher/." ~/.claude/skills/lead-enricher/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Before you install: this skill will not complete its job on a bare agent. It needs APOLLO_API_KEY, ZEROBOUNCE_API_KEY, which you have to obtain separately.

Reproduced in full from ekatasingh1107/b2b-gtm-skills/blob/eae8dd0bb98da1c8e84abd297066a87015dd860f/skills/composites/lead-enricher/SKILL.md, which is licensed MIT (repository). 1,277 words, 20 headings.

Lead Enricher

Takes raw inbound lead data (often just a name and email) and enriches it into a complete lead record. Uses WebSearch for public data, checks tools.lead_enrichment config for Apollo or ZoomInfo API paths, and outputs a fully populated lead record ready for qualification and routing.

Prerequisites

  • agency.config.json populated (ICP, tools config)
  • WebSearch tool available
  • Inbound lead data: at minimum, email address or company name
  • Optional: Apollo.io API access (configured in tools.lead_enrichment)
  • Optional: ZoomInfo access (configured in tools.lead_enrichment)

Capabilities Used

  1. company-researcher -- deep company data extraction
  2. person-researcher -- contact-level enrichment
  3. linkedin-researcher -- LinkedIn profile data
  4. email-validator -- verify email deliverability
  5. crm-writer -- write enriched record back to CRM

Phase 0: Intake

Read agency.config.json:

  • icp.segments[] -- for ICP fit tagging during enrichment
  • tools.lead_enrichment -- check which enrichment tools are available:
    {
      "tools": {
        "lead_enrichment": {
          "primary": "apollo",
          "apollo_api_key": "env:APOLLO_API_KEY",
          "zerobounce_api_key": "env:ZEROBOUNCE_API_KEY",
          "fallback": "websearch"
        }
      }
    }
    
  • crm.tabs -- where to write enriched records
  • services[] -- for service-need matching during enrichment

Accept parameters:

  • lead -- (required) lead object with available fields
  • mode -- single | batch. Default: single
  • leads -- (required if mode = batch) array of lead objects
  • enrichment_depth -- basic | standard | deep. Default: standard
  • validate_email -- boolean, run email validation. Default: true
  • write_to_crm -- boolean, write enriched record to CRM. Default: true

Minimum lead input:

{
  "email": "[email protected]"
}

Or:

{
  "contact_name": "Priya Mehta",
  "company_name": "FreshSkin Co"
}

Phase 1: Email Domain Extraction

If only email provided:

  • Extract domain: freshskin.co
  • Derive company domain: check if freshskin.co resolves to a website
  • Flag freemail domains (gmail.com, yahoo.com, outlook.com) -- lower quality lead signal

If company name provided but no domain:

  • WebSearch: "{{company_name}}" website
  • Extract the primary domain

Phase 2: Contact Enrichment

Apollo Path (if tools.lead_enrichment.primary = "apollo")

Use Apollo People Match or People Search:

  • Input: email or name + company
  • Extract: full name, title, phone, LinkedIn URL, company details
  • Apollo returns: person match confidence, verified email, company firmographics

WebSearch Path (if Apollo unavailable or as supplement)

Run person-researcher with available data:

Name + Company search:

  • WebSearch: "{{contact_name}}" "{{company_name}}"
  • WebSearch: "{{contact_name}}" linkedin
  • WebSearch: "{{contact_name}}" {{company_domain}}

Extract:

  • Full name (verify spelling)
  • Current title and role
  • LinkedIn profile URL
  • Twitter/X handle
  • Other social profiles
  • Professional background summary
  • Recent activity (posts, interviews, conference appearances)

LinkedIn Enrichment

Run linkedin-researcher for:

  • Profile headline and summary
  • Current role details (start date, description)
  • Previous roles (career trajectory)
  • Education
  • Skills and endorsements
  • Connections count (proxy for network size)
  • Recent posts (content they care about)
  • Groups (interests and focus areas)

Compile:

CONTACT RECORD
---
Full name: [verified name]
Email: [email]
Email status: [valid/invalid/catch-all/unknown]
Title: [current title]
Phone: [if found]
LinkedIn: [URL]
Twitter: [handle]
Location: [city, country]
Seniority: [C-level/VP/Director/Manager/Individual]
Department: [Marketing/Ecommerce/Engineering/Operations/Executive]

Phase 3: Company Enrichment

Apollo Path (if available)

Use Apollo Organization Enrich:

  • Input: domain
  • Extract: company name, industry, employee count, revenue range, tech stack, social profiles

WebSearch Path

Run company-researcher with the company domain:

Firmographic data:

  • Company legal name
  • Industry and sub-industry (SIC/NAICS if available)
  • Employee count (exact or range)
  • Revenue estimate (range)
  • Founded year
  • Headquarters location
  • Funding status (bootstrapped, seed, Series A/B/C, public)
  • Total funding raised

Digital presence:

  • Website URL and platform (Shopify, WooCommerce, custom, etc.)
  • Technology stack (via BuiltWith signals in search results)
  • Social profiles: LinkedIn company page, Instagram, Twitter, Facebook, YouTube
  • App store presence (if applicable)
  • Review sites (G2, Capterra, Trustpilot, Google Reviews)

Business signals:

  • Recent funding rounds
  • Job postings (roles, departments expanding)
  • Press mentions (last 6 months)
  • Partnership announcements
  • Product launches
  • Awards or recognition
  • Competitor landscape (who else is in their space)

Compile:

COMPANY RECORD
---
Company name: [legal name]
Domain: [primary domain]
Industry: [vertical]
Sub-industry: [niche]
Employee count: [range]
Revenue estimate: [range]
Founded: [year]
HQ: [city, country]
Funding: [status + total raised]
Platform: [ecommerce platform]
Tech stack: [key technologies detected]

Social profiles:
  LinkedIn: [URL]
  Instagram: [handle]
  Twitter: [handle]
  Facebook: [URL]
  YouTube: [URL]

Recent signals:
  Hiring: [roles if any]
  Funding: [recent round if any]
  Press: [notable mentions]
  Product: [recent launches]

Phase 4: Email Validation

If validate_email = true:

ZeroBounce Path (if configured)

  • Submit email to ZeroBounce API
  • Get: status (valid/invalid/catch-all/spamtrap/abuse/unknown), sub-status, domain info

Heuristic Path (if no API)

  • Check MX records for domain
  • Check if domain is active
  • Flag disposable email domains
  • Flag role-based emails (info@, hello@, support@)

Validation result:

Email validation:
  Address: [email]
  Status: [valid/invalid/risky/unknown]
  Type: [personal/role-based/freemail]
  Deliverability: [HIGH/MEDIUM/LOW]
  Risk flags: [catch-all, new domain, etc.]

Phase 5: ICP Tagging

Match enriched data against icp.segments[]:

For each segment, check:

  • Industry match
  • Company size match (employee range)
  • Revenue range match
  • Geography match
  • Platform match
  • Stage match (post-PMF, mid-market, enterprise)

Tag the lead:

ICP Assessment:
  Best segment match: [segment name]
  Fit score: [1-5]
  Matching criteria: [list of matches]
  Non-matching criteria: [list of misses]
  Fit verdict: STRONG_FIT / MODERATE_FIT / WEAK_FIT / NO_FIT

Phase 6: Service Need Detection

Based on enriched data, flag potential service needs:

  • Store development: Outdated store, non-Shopify platform, poor mobile experience
  • CRO: High traffic + low conversion signals, basic product pages
  • Catalog management: Large SKU count, poor product imagery
  • Performance marketing: Low traffic, no paid ads visible, competitor ads running
  • SEO: Low organic visibility, thin content, no blog
  • Email marketing: No email capture visible, no post-purchase flow
Detected needs:
  1. [Service] -- [signal that indicates this need] -- Confidence: [HIGH/MEDIUM/LOW]
  2. [Service] -- [signal] -- Confidence: [level]

Phase 7: Output

Return structured JSON:

{
  "enrichment_date": "2026-03-07",
  "enrichment_depth": "standard",
  "contact": {
    "full_name": "Priya Mehta",
    "email": "[email protected]",
    "email_valid": true,
    "email_type": "personal",
    "title": "Founder & CEO",
    "phone": "+91-98XXXXXXXX",
    "linkedin": "https://linkedin.com/in/priyamehta",
    "twitter": "@priyamehta",
    "location": "Mumbai, India",
    "seniority": "C-level",
    "department": "Executive"
  },
  "company": {
    "name": "FreshSkin Co",
    "domain": "freshskin.co",
    "industry": "Beauty & Skincare",
    "sub_industry": "D2C Skincare",
    "employee_count": "25-50",
    "revenue_estimate": "INR 5-10 Cr/year",
    "founded": 2022,
    "hq": "Mumbai, India",
    "funding": {"status": "Series A", "total_raised": "INR 8 Cr"},
    "platform": "Shopify",
    "tech_stack": ["Shopify", "Klaviyo", "Google Analytics"],
    "social": {
      "linkedin": "https://linkedin.com/company/freshskinco",
      "instagram": "@freshskinco",
      "twitter": "@freshskinco"
    },
    "recent_signals": {
      "hiring": ["Marketing Manager", "Content Creator"],
      "funding": "Series A closed Dec 2025",
      "product_launches": ["New serum line launched Jan 2026"]
    }
  },
  "icp_assessment": {
    "best_segment": "Post-PMF D2C India",
    "fit_score": 4,
    "fit_verdict": "STRONG_FIT",
    "matching": ["industry", "size", "geo", "platform", "stage"],
    "non_matching": []
  },
  "detected_needs": [
    {"service": "CRO", "signal": "Basic product pages, no trust elements", "confidence": "HIGH"},
    {"service": "Catalog Management", "signal": "50+ SKUs with inconsistent photography", "confidence": "MEDIUM"}
  ],
  "enrichment_sources": ["websearch", "linkedin", "zerobounce"],
  "data_completeness": "85%",
  "missing_fields": ["phone", "revenue_exact"],
  "generated_at": "2026-03-07T10:00:00Z"
}

Phase 8: CRM Write and Handoff

If write_to_crm = true:

  • Write enriched record to CRM via crm-writer
  • Set enrichment_status = "complete"
  • Set enrichment_date = today
  • Set icp_fit = fit verdict

Handoff options:

  • If auto_qualify flag set, trigger lead-qualifier with enriched data
  • If auto_route flag set, trigger lead-router after qualification
  • Otherwise, present enriched record for manual review

APPROVAL GATE: "Lead enriched. [Data completeness]% complete. Route to qualification?"

Example Usage

Trigger phrases:

  • "Enrich this lead: [email protected]"
  • "I got a new inbound lead, enrich them: [name] at [company]"
  • "Batch enrich this week's inbound leads"
  • "Look up everything about [person] at [company]"
  • "Fill in the missing data for [lead]"
  • "Enrich and qualify [lead name]"

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what lead-enricher does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.