---
title: "Lead enrichment"
description: "Lead enrichment from the live web: turn a company domain into an account record with pricing, hiring and review data from company sites, G2 and Crunchbase."
canonical: https://www.zenrows.com/use-cases/lead-enrichment
updated: 2026-10-18
---

# Lead enrichment

Lead enrichment adds missing facts to a lead or account record, such as what the company sells, its pricing model, whether it is hiring and what customers say about it. Zenrows fetches the company's own pages and public profiles from a domain, returns clean Markdown or JSON, and plugs into Clay, n8n or your own pipeline.

## Sample output: one enriched account

```json
{
  "domain": "example-logistics.com",
  "enriched_at": "2026-10-17T09:14:00Z",
  "company_name": "Example Logistics",
  "one_line_summary": "Route planning software for regional delivery fleets",
  "sells_to": "B2B",
  "pricing_model": "per vehicle, monthly",
  "has_free_trial": true,
  "lowest_public_plan": { "name": "Starter", "price": 29, "currency": "USD", "unit": "vehicle/month" },
  "open_roles": 14,
  "hiring_for": ["Account Executive", "Customer Success Manager", "Backend Engineer"],
  "new_markets_mentioned": ["Germany", "Netherlands"],
  "review_profile": { "source": "g2.com", "rating": 4.5, "review_count": 212 },
  "has_contact_form": true,
  "general_inbox": "sales@example-logistics.com",
  "sources": [
    "https://example-logistics.com/",
    "https://example-logistics.com/plans",
    "https://example-logistics.com/careers"
  ]
}
```

An illustrative account record built from four public pages; every field keeps the URL it came from, so a rep can check it before using it.

## What teams enrich a lead with

Lead enrichment starts from a record you already have, usually a company domain from a form fill, a CRM export or a Clay table. Each job below fills a different set of columns from a different page on that company's web footprint.

| Job | Data you collect | Typical sources |
|---|---|---|
| Account qualification | What the company sells, who it sells to, B2B or B2C, product categories | Company homepage, about page, product pages |
| Pricing and plan fit | Pricing model, entry plan, free trial, enterprise tier | Plans and pricing pages on the company site |
| Hiring signals | Open roles, teams growing, new office locations | Careers pages, Greenhouse, Lever and Workable boards, Indeed |
| Reputation and fit | Rating, review count, categories, complaints | G2, Capterra, Trustpilot, Clutch |
| Funding and company profile | Funding stage, investors, headcount band | Crunchbase, press pages, newsroom |
| Outreach context | Recent launches, customer logos, case study topics | Blog, changelog, customer stories pages |
| Inbound routing | Contact form present, general inbox, office country | Contact and imprint pages |

## Why lead enrichment breaks at scale

Enrichment touches thousands of different websites, each built differently, and a share of them sit behind bot protection. A pipeline that works on the first 50 domains in a Clay table usually stalls on the next 5,000.

| What breaks | What it looks like | How Zenrows handles it |
|---|---|---|
| Protected company sites | Cloudflare challenge pages or 403s come back instead of the pricing page | Zenrows' stealth gets through Cloudflare and similar protections to the real page |
| Every site has a different layout | Selectors written for one pricing page return nothing on the next | Extract or Markdown output gives an LLM or parser clean data to read |
| JavaScript-built pages | Careers pages loaded by an embedded job widget show zero roles in raw HTML | Adaptive Stealth Mode escalates to browser rendering and returns the page after the widget has loaded |
| Stale records | Headcount, pricing and open roles change between quarters | Batch re-runs the full domain list on a schedule |
| Limits in no-code tools | A built-in scraping step in a workflow tool fails on protected sites or stalls halfway through a long list | Call Zenrows with your own API key from an HTTP step, and send long lists to Batch |

## How to enrich leads with Zenrows

1. **Start from the domain.** Take the company domain from your CRM, Clay table or n8n trigger and build the URLs you need: homepage, plans or pricing page, careers and about.
2. **Fetch each page as Markdown.** Markdown keeps the text and drops scripts and layout, so an LLM can read four pages in a few thousand tokens.
3. **Turn the text into columns.** Ask your LLM or rules for fixed fields (pricing model, open roles, sells to), or use automatic structured extraction for ready-made JSON.
4. **Write back and refresh.** Push the fields to your CRM with the source URL, and resubmit the domain list to Batch monthly or quarterly.

```python Python
# pip install requests
import requests

DOMAIN = "example-logistics.com"  # from your CRM or Clay table
PATHS = ["/", "/plans", "/careers", "/about"]  # use the site's own paths

pages = {}
for path in PATHS:
    response = requests.get("https://api.zenrows.com/v1/", params={
        "apikey": "YOUR_ZENROWS_API_KEY",
        "url": f"https://{DOMAIN}{path}",
        "mode": "auto",  # Adaptive Stealth Mode
        "response_type": "markdown",
    })
    if response.ok:
        pages[path] = response.text

# Send `pages` to your LLM with a fixed schema, then write the fields back to the CRM.
print({path: len(text) for path, text in pages.items()})
```

```javascript Node.js
// Node.js 18+ as an ES module (in an n8n Code node, return [{ json: pricing }] instead of logging)
const params = new URLSearchParams({
  apikey: "YOUR_ZENROWS_API_KEY",
  url: "https://example-logistics.com/plans",
  mode: "auto", // Adaptive Stealth Mode
  extract: "auto",
});

const response = await fetch(`https://api.zenrows.com/v1/?${params}`);
const pricing = await response.json();
console.log(pricing);
```

```bash CLI
npx -y @zenrows/cli init
# A company's homepage as Markdown for your LLM step
zenrows fetch https://example-logistics.com --output markdown
# Structured fields from its plans page
zenrows extract https://example-logistics.com/plans --autoparse
# Re-enrich the full list: domains.jsonl holds one {"url": "..."} per page
zenrows batch create domains.jsonl --output markdown --wait
```

```text Claude Code (MCP)
# Connect once
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp

# Then ask:
Use Zenrows to read the homepage, plans page and careers page of example-logistics.com, plus its G2 profile. Tell me what they sell, who they sell to, their cheapest public plan, how many roles they are hiring for and their G2 rating, with the URL for each answer.
```

## Which Zenrows product fits

| If you need to | Use | Why |
|---|---|---|
| Enrich one row at a time from Clay, n8n or a webhook | [Fetch](/products/fetch) | One HTTP call per page, easy to drop into any workflow step |
| Get fields back as JSON without writing a parser per site | [Extract](/products/extract) | Automatic structured extraction returns data from pages you have never seen before |
| Re-enrich a full CRM export of 50,000 domains | [Batch](/products/batch) | Submit the URL list as one job and collect results by webhook |
| Let a rep or RevOps lead enrich accounts by asking | [MCP Server](/mcp) | Claude and other MCP clients call Zenrows as a tool, no code needed |

## What success looks like

| Measure | What good looks like | How to check it |
|---|---|---|
| Fill rate | The fields your scoring model needs are populated on most accounts | Count empty values per column after each enrichment run |
| Source traceability | Every enriched field links to the page it came from | Spot-check 20 records a run against their source URLs |
| Freshness | Pricing, hiring and review fields are no older than your refresh cycle | Store `enriched_at` per record and alert on records past the cycle |
| Run completion | A full re-enrichment of the list finishes inside one working day | Log each Batch job's start and end time and the share of domains returned |
| Pipeline impact | Reps stop researching accounts by hand before a call | Compare research time per account before and after |

## Lead enrichment FAQ

### What is lead enrichment?

Lead enrichment is the process of adding data to a lead or account record you already have, so sales can score, route and personalize outreach. Company-level enrichment fills fields like industry, product, pricing model, hiring activity and reviews. Contact-level enrichment adds details about a person. Zenrows covers the company side by reading the public web: the company's own site and its public profiles.

### How is lead enrichment different from lead generation?

Lead generation finds companies you do not know yet, for example by collecting every agency listed on a directory. Lead enrichment starts from a record you already have and fills in the gaps. A typical pipeline runs both: a list-building step, then an enrichment step on every new row. See web scraping for lead generation for the first half.

### Can I use Zenrows inside Clay or n8n?

Yes. Both tools can call an HTTP API, so you add Zenrows as a step that takes a URL column and returns the page as Markdown or JSON. In n8n that is an HTTP Request or Code node; in Clay it is an HTTP API column with your own Zenrows key.

### What is the difference between a data enrichment API and scraping company websites?

A data enrichment API returns fields from a vendor's database, refreshed on the vendor's schedule. Scraping the company's website reads the live page, so you get what the company says today and you choose the fields, including ones no database tracks, like "mentions SOC 2 on the pricing page" or "hiring a first sales rep".

### What fields can a company enrichment API fill from the web?

Anything a company publishes about itself: what it sells and to whom, pricing model and entry plan, free trial, open roles and hiring teams, office countries, recent launches and customer stories. Public profiles add review ratings from G2 or Capterra and funding stage from Crunchbase. Pick the fields your scoring model uses, and keep the source URL next to each value.

### Can I enrich contacts and emails, not just companies?

Zenrows returns what a public page shows, so a company's general inbox or press contact on its contact page is reachable. Personal data about individuals is regulated by laws such as GDPR and CCPA, which require a lawful basis and limit how you process and store it. A common split is company-level enrichment from the web, with personal contact data handled through a provider and process your legal team has approved.

### How often should enriched data be refreshed?

It depends on the field. Hiring signals and pricing pages change monthly, while what a company sells changes rarely. A common pattern is a monthly refresh of fast-moving fields through Batch and a quarterly full re-enrichment, with enriched_at stored on every record.

## Related use cases

- [Web scraping for lead generation](https://www.zenrows.com/use-cases/web-scraping-for-lead-generation.md): Prospect lists built from directories, maps, exhibitor lists and member rosters, filtered to your ideal customer.
- [Firmographic data](https://www.zenrows.com/use-cases/firmographic-data.md): Industry, headcount, HQ, locations and funding per company, built from registries, company sites and directories.
- [Technographic data](https://www.zenrows.com/use-cases/technographic-data.md): Which CRM, ecommerce, analytics and chat tools each company runs, detected from its pages and job posts.
- [Competitive intelligence](https://www.zenrows.com/use-cases/competitive-intelligence.md): Pricing, hiring, reviews, launches and partners across your market, structured for battlecards and strategy.

Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
