Guides

Build a target-account list

Find companies that match your market criteria, then retrieve the relevant decision-makers.

Build a target-account list in two stages: identify companies first, then request contacts for those companies. This keeps the filters understandable and gives you stable company URLs or IDs for downstream work.

Define the company segment

The company endpoint supports industry, geography, employee, revenue, technology, classification, and many other filters. Use include_fields to return only the fields needed by the workflow.

curl --fail-with-body "https://api.leadx.com/v1/companies" \
  -H "X-API-KEY: $LEADX_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "state": ["TX", "OK"],
    "industry": "Construction",
    "number_employees": ">= 10 and <= 250",
    "include_fields": [
      "company_id",
      "company_name",
      "url",
      "city",
      "state",
      "industry",
      "estimated_number_employees"
    ],
    "page": 1,
    "per_page": 50
  }'

Filter names and accepted range formats vary by field. Use the company endpoint reference as the source of truth for the current schema.

Find decision-makers

Use the returned company URLs to retrieve contacts. Multiple contact filters are combined with AND logic.

curl --fail-with-body "https://api.leadx.com/v1/contacts" \
  -H "X-API-KEY: $LEADX_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "url": ["acmeplumbing.com", "examplecontracting.com"],
    "title": ["Owner", "President"],
    "state": "TX",
    "page": 1,
    "per_page": 50
  }'

This request means: return contacts at either supplied company whose title matches the requested titles and whose state is Texas.

Paginate safely

Both endpoints return page_number, per_page, total_pages, and total_records. Stop when the current page reaches total_pages.

import os
import requests

URL = "https://api.leadx.com/v1/contacts"
HEADERS = {"X-API-KEY": os.environ["LEADX_API_KEY"]}

payload = {
    "url": ["acmeplumbing.com", "examplecontracting.com"],
    "title": ["Owner", "President"],
    "per_page": 50,
}

contacts = []
page = 1

while True:
    payload["page"] = page
    response = requests.post(URL, headers=HEADERS, json=payload, timeout=30)
    response.raise_for_status()
    body = response.json()
    contacts.extend(body["records"])

    if page >= body["total_pages"]:
        break
    page += 1

print(f"Collected {len(contacts)} contacts")

Enrich only the contacts you need

After selecting a contact, pass either their LinkedIn URL or their name and company domain to the email endpoint. Mobile discovery currently requires the LinkedIn URL.

Do not enrich every search result by default. Apply your company and contact criteria first, then spend enrichment credits on records you intend to use.