Lead

The Lead Enrichment API turns one company URL into an outreach-ready lead. It finds the founders and leadership with their LinkedIn and X — identified by searching the company's own domain and verifying each person against that evidence — plus a company summary, socials, tech signals, pricing tiers, and the emails published on the site, as a single JSON object built for sales, ABM, and prospecting. It does not return funding, HQ, phone, or guessed/unverified emails.

POST/v1/lead

Turn a company URL into an outreach-ready lead — founders and leadership with their LinkedIn and X.

Note
This endpoint runs several scrapes and extractions internally. It uses the same Bearer authentication as /v1/extract.
Note
People recovery is domain-anchored and precision-first. Founders and leadership are identified by searching the company's unique domain and verifying each person against that evidence, so results are no longer confused between different companies that share a similar name — you get fewer people, but the ones returned are correct. Very new sites or solo founders may return fewer or no people.

Request body

json
{
  "url": "https://resend.com",
  "no_cache": false
}

Parameters

FieldTypeRequiredDescription
urlstringYesThe company URL to enrich. Redirects are followed.
no_cachebooleanNoBypass the response cache and force a fresh fetch. Defaults to false.

Response

A single lead object. Fields are best effort: any that cannot be determined from the site or recovered from search are omitted or empty. The people_source field records where the people came from (e.g. web_search).

json
{
  "url": "https://resend.com",
  "domain": "resend.com",
  "lead": {
    "company_name": "Resend",
    "summary": "Resend is an email platform for developers to build, test, and send transactional and marketing email at scale.",
    "socials": {
      "linkedin": "https://www.linkedin.com/company/resend",
      "x": "https://x.com/resend",
      "github": "https://github.com/resend"
    },
    "tech": ["Next.js", "React", "TypeScript", "Tailwind CSS", "Vercel"],
    "pricing": [
      { "plan": "Free", "price": "$0/mo" },
      { "plan": "Pro", "price": "$20/mo" },
      { "plan": "Scale", "price": "$90/mo" }
    ],
    "emails": [
      { "type": "support", "email": "support@resend.com" }
    ],
    "people": [
      { "name": "Zeno Rocha", "role": "Founder", "linkedin": "https://www.linkedin.com/in/zenorocha", "x": "https://twitter.com/zenorocha" },
      { "name": "Jonni Lundy", "role": "Cofounder", "linkedin": "https://www.linkedin.com/in/jonnilundy", "x": "https://twitter.com/jonnilundy" }
    ]
  },
  "people_source": "web_search",
  "cache": "miss",
  "credits": 100
}

Lead object

FieldTypeDescription
company_namestringThe company's name.
summarystringA one-line description of what the company does.
socialsobjectCompany social profile URLs: linkedin, x, and github.
techstring[]Detected technologies and tools in use.
pricingobject[]Pricing tiers, each with a plan and price.
emailsobject[]Emails published on the site, each with a type (e.g. support) and email. No guessed or unverified addresses.
peopleobject[]Founders and leadership, each with a name, role, linkedin, and x. Identified by searching the company's own domain and verified against that evidence — precision-first, so fewer but correct people.

Pricing

A successful lead costs a flat 100 credits. A failed fetch charges nothing. The consumed amount is echoed back in the credits field.

Tip
For reference, /v1/extract is 25 credits. A lead runs several scrapes plus a web search for the founders/leadership internally and returns them as one object, so 100 credits covers the whole flow.

Examples

curl
curl -X POST https://api.webclaw.io/v1/lead \
  -H "Authorization: Bearer wc_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://resend.com"
  }'
python
import webclaw

client = webclaw.Webclaw(api_key="wc_your_api_key")

result = client.lead("https://resend.com")

lead = result.lead
print(lead["company_name"], lead["summary"])

# Founders and leadership, each with LinkedIn and X
for person in lead["people"]:
    print(person["name"], person["role"], person["linkedin"], person["x"])

Batch enrichment

Enrich up to 25 company URLs in a single job. The batch endpoint is asynchronous: POST the URLs and get a job ID back immediately, then poll the job until its status is completed. Every URL is enriched into the same lead object the single /v1/lead endpoint returns.

POST/v1/lead/batch

Submit 1–25 company URLs for enrichment. Returns a job ID to poll.

Note
Batch is async. POST creates the job and returns immediately with an ID. Poll GET /v1/lead/batch/{id} until status is "completed" or "failed".

Request body

json
{
  "urls": [
    "https://resend.com",
    "https://linear.app",
    "https://vercel.com"
  ],
  "no_cache": false
}

Parameters

FieldTypeRequiredDescription
urlsstring[]Yes1 to 25 company URLs to enrich. Redirects are followed on each.
no_cachebooleanNoBypass the response cache and force a fresh fetch for every URL. Defaults to false.

Create response

Returned immediately when the job is created.

json
{
  "id": "lead_batch_8f3c1a92",
  "status": "processing",
  "total": 3,
  "credits_per_url": 100
}

Poll the batch job

GET/v1/lead/batch/{id}

Get the status and per-URL results of a batch enrichment job.

Poll every few seconds. When status is "completed", every result is included. Each successful URL carries the same lead object as /v1/lead; a URL that could not be reached carries an error instead.

json
{
  "id": "lead_batch_8f3c1a92",
  "status": "completed",
  "total": 3,
  "completed": 3,
  "succeeded": 2,
  "credits_charged": 200,
  "results": [
    {
      "url": "https://resend.com",
      "status": "success",
      "domain": "resend.com",
      "lead": {
        "company_name": "Resend",
        "summary": "Resend is an email platform for developers to build, test, and send transactional and marketing email at scale.",
        "socials": {
          "linkedin": "https://www.linkedin.com/company/resend",
          "x": "https://x.com/resend",
          "github": "https://github.com/resend"
        },
        "tech": ["Next.js", "React", "TypeScript"],
        "pricing": [
          { "plan": "Free", "price": "$0/mo" },
          { "plan": "Pro", "price": "$20/mo" }
        ],
        "emails": [
          { "type": "support", "email": "support@resend.com" }
        ],
        "people": [
          { "name": "Zeno Rocha", "role": "Founder", "linkedin": "https://www.linkedin.com/in/zenorocha", "x": "https://twitter.com/zenorocha" }
        ]
      },
      "cache": "miss"
    },
    {
      "url": "https://linear.app",
      "status": "success",
      "domain": "linear.app",
      "lead": {
        "company_name": "Linear",
        "summary": "Linear is an issue tracking and project planning tool for modern software teams.",
        "people": [
          { "name": "Karri Saarinen", "role": "Cofounder & CEO", "linkedin": "https://www.linkedin.com/in/karrisaarinen", "x": "https://twitter.com/karrisaarinen" }
        ]
      },
      "cache": "hit"
    },
    {
      "url": "https://not-a-real-site.example",
      "status": "error",
      "error": "Failed to fetch URL"
    }
  ],
  "error": null,
  "created_at": "2026-07-18T10:30:00Z"
}

Batch job fields

FieldTypeDescription
idstringThe batch job ID. Store it to poll for results.
statusstringprocessing, completed, or failed.
totalnumberNumber of URLs submitted.
completednumberHow many URLs have finished processing (success or error).
succeedednumberHow many URLs returned a lead.
credits_chargednumberTotal credits billed — 100 per successful lead.
resultsobject[]One entry per URL. See the result object below.
errorstring | nullA job-level error message, or null.
created_atstringISO 8601 timestamp of when the job was created.

Result object

FieldTypeDescription
urlstringThe submitted URL.
statusstringsuccess or error.
domainstringRegistrable domain of the company. Success results only.
leadobjectThe enriched lead — same shape as the single /v1/lead response's lead field. Success results only.
cachestringhit or miss. Success results only.
errorstringWhy the URL failed. Error results only.
Tip
Batch billing is per successful lead: each URL that returns a lead costs 100 credits, and URLs that fail or are unreachable are not billed. The total is echoed in credits_charged.

Example

Submit a batch
curl -X POST https://api.webclaw.io/v1/lead/batch \
  -H "Authorization: Bearer wc_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["https://resend.com", "https://linear.app", "https://vercel.com"]
  }'
Poll the job
curl https://api.webclaw.io/v1/lead/batch/lead_batch_8f3c1a92 \
  -H "Authorization: Bearer wc_your_api_key"

Error responses

400 Bad Request
{
  "error": "Missing required field: url"
}
401 Unauthorized
{
  "error": "Invalid or missing API key"
}

Related reading

Ready to build? Start extracting.

Cancel anytime. One key for every format and endpoint.