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.
Add email and mobile data to selected decision-makers.
Sync enrichment into a CRMSubmit larger email lists with stable external IDs.
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.