Start free

Enrich leads from company websites

Pull structured firmographics from public company sites into your CRM, with one JSON schema and no per-site scrapers to maintain.

Industries:
Sales, Marketing, B2B SaaS

The problem

Sales and marketing teams sit on lists of company domains but very little context about each one. The details that make outreach relevant, what the company does, where it is based, how big it is, and how to reach it, are usually sitting in plain sight on the company's own public website. The trouble is getting that information off the page and into the CRM in a consistent shape.

Doing it by hand does not scale, and doing it with scrapers is its own headache. Every company site is built differently, so a parser tuned for one layout returns garbage on the next, and you end up writing and rewriting brittle extraction code for sites that all say roughly the same things in different markup. The data you collect ends up inconsistent, half-filled, and stale within a quarter.

What the team needs is the same set of fields from every site, in the same shape, pulled from pages the company publishes for the public to read. That is a contract problem, and a schema-driven approach solves it cleanly.

The workflow

  1. 1

    Define the firmographic schema

    Write a JSON schema for the fields you want in the CRM, such as company name, description, industry, headquarters location, employee range, and contact email. This schema is the single contract every site must fill.

  2. 2

    Find the right public page per domain

    For each lead, target the public page that actually holds the data, usually the homepage, an about page, or a contact page. Extracto works on any public HTTPS URL, including JavaScript-rendered and anti-bot-protected pages, so you can point it wherever the firmographics live.

  3. 3

    Send URL and schema to Extracto

    Call the API with the page URL and your schema. Extracto runs every request through a real headless browser with a managed anti-bot bypass layer that handles protected sites like Cloudflare, DataDome, and PerimeterX, passes the text to an LLM at temperature zero, and validates the result so every record matches your fields exactly. Proxies and anti-bot handling are managed for you, with no setup.

  4. 4

    Treat nulls as unknown, not invented

    If a site does not state its employee count, that field returns null instead of a guess. You keep the records you trust, flag the gaps, and never push fabricated firmographics into your CRM or outreach.

  5. 5

    Sync clean records into the CRM

    Map the validated JSON straight to your CRM fields and import. Because every record shares one shape, the sync needs no per-site special casing, and re-running it later keeps enrichment fresh as companies update their sites.

A schema to start from

Hand Extracto a schema like this and a URL. You get back validated JSON with exactly these fields.

{
  "companyName": "string",
  "description": "string",
  "industry": "string",
  "headquarters": "string",
  "employeeRange": "string",
  "contactEmail": "string",
  "websiteUrl": "string"
}

Is it worth it?

Enriching from public company pages adds context to cold lists without per-site scraper maintenance, and null-instead-of-guess keeps fabricated firmographics out of your CRM. The trade-off is a per-page cost and reliance on what each site publishes, so coverage varies and gaps are normal. Extracto works on any public HTTPS URL, including JavaScript-rendered and anti-bot-protected pages, because every request runs through a real headless browser with a managed anti-bot bypass layer. The one boundary is login-gated content like LinkedIn, X, or Instagram, which needs session cookies available on Enterprise plans. The free plan covers 100 pages with no credit card, and paid plans start at $14/month.

Enrich leads from company websites: FAQ

Where does the enrichment data actually come from?
From the company's own public website: the homepage, about page, or contact page. Extracto reads what the company already publishes for visitors, so this is not a private data source. Coverage depends on what each site chooses to state, and anything unstated comes back as null.
Can it pull personal contact details or private records?
No. Extracto only reads public pages you point it at and returns the fields your schema asks for. It does not access gated databases, private profiles, or anything behind a login. Keep your use to public information and respect each site's robots.txt and terms of service.
What if a company site does not list its size or industry?
Those fields return as null rather than a guessed value. That honesty is the point for enrichment, because a fabricated employee count or industry can misroute outreach. You import the fields you trust and decide separately how to handle the gaps.
Will it work on aggregator or directory sites?
Yes. Many directories use anti-bot protection, and Extracto runs every request through a real headless browser with a managed anti-bot bypass layer that handles protected sites like Cloudflare, DataDome, and PerimeterX, so those pages extract reliably with proxies and anti-bot handling managed for you. The one exception is login-gated content like LinkedIn, X, or Instagram, which needs session cookies available on Enterprise plans. Respect each site's robots.txt and terms of service.