Skip to content

Lead Enrichment

Updated Feb 2026

Extract and filter leads from websites to enrich your sales pipeline. Firecrawl automates the manual research that sales teams spend hours on -- pulling company details, contact information, tech stack signals, and growth indicators directly from live websites.

Why Firecrawl for Lead Enrichment

Third-party lead databases go stale fast. Company descriptions change, teams grow, products launch, and pricing shifts -- but your CRM still has last quarter's data. Firecrawl extracts information directly from company websites in real time, giving your sales team current, accurate enrichment data.

What You Can Extract

Data CategoryExamples
Company DetailsName, industry, size, location, founding year
Contact InfoPublicly listed emails, phone numbers, social profiles
Tech SignalsStack indicators, integrations, API documentation
Growth SignalsJob postings, press releases, funding announcements
Product InfoOfferings, pricing tiers, target markets
Social ProofCustomer logos, case studies, testimonials

How It Works

Firecrawl Features Used

FeatureRole in Lead Enrichment
ScrapeExtract structured data from individual company websites
CrawlIngest entire company sites for comprehensive enrichment
MapDiscover all pages on a prospect's site before targeted extraction
SearchFind companies in specific industries or with certain characteristics
AgentNavigate complex directory listings and multi-step workflows

Enriching CRM Records

Extract Company Data from Websites

python
from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

# Enrich a lead with data from their company website
result = app.scrape(
    url="https://prospect-company.com",
    params={
        "formats": ["json"],
        "jsonOptions": {
            "schema": {
                "type": "object",
                "properties": {
                    "company_name": {"type": "string"},
                    "tagline": {"type": "string"},
                    "industry": {"type": "string"},
                    "headquarters": {"type": "string"},
                    "employee_count_estimate": {"type": "string"},
                    "products_or_services": {
                        "type": "array",
                        "items": {"type": "string"}
                    },
                    "target_audience": {"type": "string"},
                    "key_differentiators": {
                        "type": "array",
                        "items": {"type": "string"}
                    },
                    "contact_email": {"type": "string"},
                    "phone": {"type": "string"},
                    "social_links": {
                        "type": "object",
                        "properties": {
                            "linkedin": {"type": "string"},
                            "twitter": {"type": "string"},
                            "facebook": {"type": "string"}
                        }
                    }
                }
            }
        }
    }
)

enrichment_data = result["json"]
print(enrichment_data)

Batch Enrich Multiple Leads

python
# Process a list of prospect URLs
prospect_urls = [
    "https://company-a.com",
    "https://company-b.com",
    "https://company-c.com",
    # ... potentially hundreds of URLs
]

enrichment_schema = {
    "type": "object",
    "properties": {
        "company_name": {"type": "string"},
        "industry": {"type": "string"},
        "products": {"type": "array", "items": {"type": "string"}},
        "employee_count": {"type": "string"},
        "recent_news": {"type": "string"},
        "tech_indicators": {"type": "array", "items": {"type": "string"}}
    }
}

# Batch scrape for efficient processing
batch_result = app.batch_scrape(
    urls=prospect_urls,
    params={
        "formats": ["json"],
        "jsonOptions": {"schema": enrichment_schema}
    }
)

for page in batch_result["data"]:
    url = page["metadata"]["url"]
    data = page["json"]
    print(f"{data['company_name']} ({url})")
    print(f"  Industry: {data['industry']}")
    print(f"  Products: {', '.join(data['products'])}")
    print("---")

Directory Scraping for Lead Discovery

Transform business directories into prospecting lists:

python
# Scrape a business directory page for leads
directory_result = app.scrape(
    url="https://directory.example.com/software-companies",
    params={
        "formats": ["json"],
        "jsonOptions": {
            "schema": {
                "type": "object",
                "properties": {
                    "companies": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {"type": "string"},
                                "website": {"type": "string"},
                                "description": {"type": "string"},
                                "location": {"type": "string"},
                                "category": {"type": "string"}
                            }
                        }
                    }
                }
            }
        }
    }
)

# Extract leads from directory
leads = directory_result["json"]["companies"]
print(f"Discovered {len(leads)} leads from directory")

Source Directories

Firecrawl can extract leads from:

  • Industry-specific business directories
  • Chamber of commerce member listings
  • Trade association directories
  • Conference attendee and speaker lists
  • Award winner lists and industry rankings
  • Local business directories and review sites

Team and Contact Extraction

Pull team information from company about pages:

python
# Extract team data for targeted outreach
team_result = app.scrape(
    url="https://prospect.com/about",
    params={
        "formats": ["json"],
        "jsonOptions": {
            "schema": {
                "type": "object",
                "properties": {
                    "leadership_team": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {"type": "string"},
                                "title": {"type": "string"},
                                "bio_summary": {"type": "string"},
                                "linkedin_url": {"type": "string"}
                            }
                        }
                    },
                    "company_values": {
                        "type": "array",
                        "items": {"type": "string"}
                    },
                    "founded_year": {"type": "string"},
                    "mission_statement": {"type": "string"}
                }
            }
        }
    }
)

Growth Signal Detection

Use job postings and news as growth indicators:

python
# Check for growth signals via career pages
careers = app.scrape(
    url="https://prospect.com/careers",
    params={
        "formats": ["json"],
        "jsonOptions": {
            "schema": {
                "type": "object",
                "properties": {
                    "total_openings": {"type": "number"},
                    "departments_hiring": {
                        "type": "array",
                        "items": {"type": "string"}
                    },
                    "locations_hiring": {
                        "type": "array",
                        "items": {"type": "string"}
                    }
                }
            }
        }
    }
)

# High open positions = growing company = potential buyer
growth_score = careers["json"].get("total_openings", 0)
if growth_score > 10:
    print("HIGH GROWTH SIGNAL - prioritize this lead")

CRM Integration

Push enriched data to your CRM:

python
import requests

def enrich_and_update_crm(prospect_url, crm_record_id):
    """Enrich a CRM record with live website data."""
    # Extract from prospect website
    result = app.scrape(
        url=prospect_url,
        params={
            "formats": ["json"],
            "jsonOptions": {
                "schema": {
                    "type": "object",
                    "properties": {
                        "company_name": {"type": "string"},
                        "industry": {"type": "string"},
                        "employee_count": {"type": "string"},
                        "products": {"type": "array", "items": {"type": "string"}}
                    }
                }
            }
        }
    )

    enrichment = result["json"]

    # Update CRM (example: HubSpot)
    requests.patch(
        f"https://api.hubapi.com/crm/v3/objects/companies/{crm_record_id}",
        headers={"Authorization": "Bearer YOUR_HUBSPOT_KEY"},
        json={
            "properties": {
                "industry": enrichment["industry"],
                "numberofemployees": enrichment["employee_count"],
                "description": f"Products: {', '.join(enrichment['products'])}"
            }
        }
    )

Customer Stories

Zapier

Zapier uses Firecrawl for custom knowledge extraction in chatbots, enriching their automated workflows with live web data.

Cargo

Cargo leverages Firecrawl to analyze webpage content and power Go-To-Market workflows. Their platform uses extracted company data to score and prioritize leads.

Quick Start: Fire Enrich Template

The Fire Enrich template on GitHub provides an AI-powered lead enrichment pipeline. Clone it, add your API key, and start enriching prospect data immediately.

Best Practices

  1. Extract from primary sources -- Company websites provide more accurate data than third-party databases
  2. Use JSON schemas -- Define consistent extraction schemas for standardized CRM fields
  3. Batch for efficiency -- Use batch scrape when enriching large lead lists
  4. Check multiple pages -- Do not rely on the homepage alone; extract from about, team, careers, and product pages
  5. Track freshness -- Record extraction timestamps so you know when to re-enrich
  6. Respect privacy -- Only extract publicly available information; comply with applicable data regulations
  7. Prioritize signals -- Use growth indicators (hiring, funding, product launches) to score and prioritize leads