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.
Scanned 9/10/2026
Install to Claude Code
npx -y skills add ekatasingh1107/b2b-gtm-skills --skill lead-enricher --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Lead Enricher?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/ekatasingh1107-lead-enricher)More formats (shields.io, HTML) on the badges page.
---
name: lead-enricher
description: >
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.
tags: [leads, enrichment, firmographic, research]
---
# 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:
```json
{
"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:
```json
{
"email": "priya@freshskin.co"
}
```
Or:
```json
{
"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:
```json
{
"enrichment_date": "2026-03-07",
"enrichment_depth": "standard",
"contact": {
"full_name": "Priya Mehta",
"email": "priya@freshskin.co",
"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: priya@freshskin.co"
- "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]"
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!