Data API
Query the US Business (~80M) and LinkedIn (~46.8M) lead corpora directly over HTTPS. Every response is JSON; exports stream CSV. Base URL:
https://app.businesslist.ai
Authentication
Pass your key as the api_key query param or the x-api-key header. A missing/invalid key returns 404 {"message":"Wrong API key"}.
Stored locally in this browser and substituted into the examples below.
Endpoints
| Method | Path | Returns |
|---|---|---|
| GET | /api/search | US Business rows + pagination |
| GET | /api/search-linkedin | LinkedIn rows + pagination |
| GET | /api/counts?corpus=us|linkedin | Per-state & per-SIC totals (cached) |
| GET | /api/export?corpus=us|linkedin | Streamed CSV of the full filtered set |
| GET / POST / DELETE | /api/saved | Your saved searches |
Every search needs a query or at least one filter, else 400.
Examples
Search (curl)
curl "https://app.businesslist.ai/api/search?api_key=YOUR_API_KEY&query=plumbing&state=FL&email_status=cross_verified&limit=50"
Search (JavaScript)
const params = new URLSearchParams({
api_key: "YOUR_API_KEY",
query: "software",
title: "owner",
state: "CA",
limit: "50",
});
const res = await fetch("https://app.businesslist.ai/api/search?" + params);
const { data, pagination } = await res.json();
console.log(pagination.total, data.length);LinkedIn search
curl "https://app.businesslist.ai/api/search-linkedin?api_key=YOUR_API_KEY&industry=marketing&title_level=Director&limit=25"
Export to CSV
curl -o leads.csv "https://app.businesslist.ai/api/export?api_key=YOUR_API_KEY&corpus=us&query=plumbing&state=FL"
Response shape (search)
{
"data": [ { "id": 123, "email_address": "...", "company_name": "...", ... } ],
"pagination": { "total": 12345, "limit": 50, "offset": 0 },
"took_ms": 42
}Common parameters
| Param | Description |
|---|---|
| query | Full-text keyword (searches company, name, title, industry…) |
| industry | Multi-value, comma-separated (e.g. Plumbing,HVAC) |
| limit | 1–100, default 30 |
| offset | Pagination offset |
| dedup | 1 (default) collapses duplicates; 0 disables |
| exclude_pulled | 1 hides rows you've already pulled |
| mark_pulled | 1 records returned ids to your pulled ledger |
US Business filters — /api/search
| Param | Description |
|---|---|
| email_address | |
| naics_code | NAICS Code |
| contact_name | Contact Name — full-text |
| industry | Industry — full-text — multi-value (CSV) |
| title | Title — full-text |
| company_name | Company — full-text |
| first_name | First Name — full-text |
| last_name | Last Name — full-text |
| address | Street — full-text |
| city | City |
| county | County |
| state | State |
| zip | Zip |
| phone | Phone |
| company_website | Website |
| sic_code | SIC Code |
| email_domain_type | Email Type — one of: corporate, edu, personal, gov |
| email_status | Verification — one of: cross_verified, valid, catch_all, unknown, invalid, disposable, bounced |
LinkedIn filters — /api/search-linkedin
| Param | Description |
|---|---|
| title_level | Title Level — one of: C-Level, VP, Director, Manager, Other |
| industry_group | Industry Group |
| revenue | Revenue |
| employees | Employees |
| industry | Industry — full-text — multi-value (CSV) |
| title | Title — full-text |
| company_name | Company — full-text |
| first_name | First Name — full-text |
| last_name | Last Name — full-text |
| address | Street — full-text |
| city | City |
| county | County |
| state | State |
| zip | Zip |
| phone | Phone |
| company_website | Website |
| sic_code | SIC Code |
| email_domain_type | Email Type — one of: corporate, edu, personal, gov |
| email_status | Verification — one of: cross_verified, valid, catch_all, unknown, invalid, disposable, bounced |
Tip: a request with a keyword or industry returns in milliseconds. Filtering by location or email type alone (no keyword) scans the full corpus and is much slower.