The 67Leads HTTP API: free search and counts with masked contacts, a free sample, export quotes, and CSV exports in the column layout of Instantly, Smartlead, lemlist, GoHighLevel, Clay, HubSpot or Apollo.
Base URL https://67leads.com. Requests and replies are JSON, except the export,
which returns CSV. Authenticate with X-API-Key: YOUR_API_KEY; get the key from
the app (sign in, then Copy API key). Search, counts and
the sample work without a key. The same key works for the MCP
server.
| Endpoint | API key | What it does |
|---|---|---|
GET /api/parse?q= | No | What a plain-English search means (niche, city, state, filters) without running it. |
POST /api/search | Optional | Matching businesses with counts and a one-line answer: 25 a page by default, up to 100 (limit, offset, sort). Contacts are masked unless you own the lead. |
POST /api/sample | No | Up to 5 unmasked rows for one niche in one city; 3 different samples a day per IP. |
GET /api/verticals | No | Every niche, with leads, states and emails in stock. |
GET /api/coverage?vertical= | No | Leads, emails and owner names per state. |
GET /api/export/presets | No | The CSV layouts an export can be written in. |
POST /api/export/quote | Required | What an export would cost: matching, already owned, new rows, credits, daily allowance. |
POST /api/export | Required | Takes the leads and returns CSV, up to 25,000 rows a request. |
GET /api/me | Required | Your plan, credits, daily allowance and leads owned. |
POST /api/jobs | Required | Ask for a niche and area we do not cover yet: {"vertical": "...", "areas": ["..."]}. |
GET /api/jobs/<id> | No | Status of a requested build. |
Search, sample, quote and export all take the same body: q, vertical, state, city, company, has_email, email_quality, personal_email, has_owner, has_website, no_website, site_dead, has_phone, sms_ready, min_rating, max_rating, min_reviews, max_reviews, plus
relevance (sellable by default, or core).
q is parsed first, and explicit fields win over what the sentence says.
has_phone is on unless you turn it off.
curl https://67leads.com/api/search \
-H "Content-Type: application/json" \
-d '{"q": "tree service in Denver with no website", "limit": 10}'
An export takes the new leads your plan allows right now, charges for them once and
records them as yours. Leads you already own come back free and do not count against the
daily cap. The response headers say what happened: X-Rows-Exported,
X-Credits-Charged, X-Credits-Remaining,
X-Daily-Remaining, X-Plan, X-Export-Preset. Call
/api/export/quote with the same body first to see the price. Plans and prices
are on the pricing page.
curl https://67leads.com/api/export \
-H "X-API-Key: $LEADS67_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "roofers in Dallas TX", "has_email": true, "limit": 500, "preset": "instantly"}' \
-o roofers-dallas.csv
Send "preset" in the body (or ?preset=) to get the file with the
column names a tool's importer expects, and the owner's name split into first and last. The
first name is left blank when there is no owner name, so your sequencer's fallback (for
example {{first_name|there}} in Instantly) fills it. Presets marked email
only are narrowed to leads with an email, at your email_quality, before the
quote and the charge.
| preset | For | Email only | Columns |
|---|---|---|---|
67leads | Default | No | Every column (the layout the app has always exported) |
instantly | Instantly | Yes | Email, First Name, Last Name, Company Name, Phone, Website, Location, City, State, Category, Pitch, Email_Status, Email_Type, No_Website, Site_Down, Timezone |
smartlead | Smartlead | Yes | email, first_name, last_name, company_name, phone_number, website, location, city, state, category, pitch_tags, email_status, email_type, no_website, site_down, timezone |
lemlist | lemlist | Yes | email, firstName, lastName, companyName, companyDomain, phone, website, city, state, category, pitchTags, emailStatus, noWebsite, siteDown, timezone |
gohighlevel | GoHighLevel | No | First Name, Last Name, Email, Phone, Business Name, Website, City, State, Postal Code, Source, Tags |
clay | Clay | No | Company Name, Domain, Website, First Name, Last Name, Full Name, Email, Email Status, Email Verified, Phone, City, State, Postal Code, Category, Pitch Tags, No Website, Site Down, Last Checked |
hubspot | HubSpot | Yes | Email, First name, Last name, Company name, Phone number, Website URL, City, State/Region, Postal code, Industry |
apollo | Apollo | No | First Name, Last Name, Email, Company Name, Company Website, Corporate Phone, City, State, Industry |
Retry-After or
the message.Errors are JSON: {"error": "a sentence saying why"}.