API Reference · v2.0
LeadMerlin API
Search for local businesses, enrich them by domain, and get back verified emails, phone carrier data, owner names, social profiles, and website intelligence.
⚡ Quick Start
Enriched business data in a few calls. Replace the key with yours from the dashboard.
1. Find a location code
curl "https://api.leadmerlin.com/api/v2/locations?q=denver" \
-H "x-api-key: lm_your_key" 2. Search for businesses
curl -X POST https://api.leadmerlin.com/api/v2/searches \
-H "x-api-key: lm_your_key" -H "content-type: application/json" \
-d {"keyword":"electrician","location_codes":[1012938]} 3. Poll, then fetch results
curl https://api.leadmerlin.com/api/v2/jobs/<job_id> -H "x-api-key: lm_your_key"
curl https://api.leadmerlin.com/api/v2/jobs/<job_id>/results -H "x-api-key: lm_your_key" Agent Skill
Paste this into Claude Code, Cursor, or Codex to search and enrich leads autonomously.
# LeadMerlin — Search & Enrich Local Business Leads
Search local businesses by niche and city, enrich them with owner names,
verified emails, phone line types, socials, and website intelligence.
## Auth
All endpoints require the x-api-key header. The key starts with lm_.
Get one at https://app.leadmerlin.com/dashboard
## Workflow
1. Locations — GET https://api.leadmerlin.com/api/v2/locations?q=city
2. Search — POST https://api.leadmerlin.com/api/v2/searches { keyword, location_codes:[code] } -> job_id
3. Poll — GET https://api.leadmerlin.com/api/v2/jobs/:id every 5s until status === "completed"
4. Results — GET https://api.leadmerlin.com/api/v2/jobs/:id/results (paginate via next_cursor)
5. Enrich — POST https://api.leadmerlin.com/api/v2/enrichments { leads:[{ domain }] } (up to 100)
## Notes
- 1 lead credit per enriched business. Failed enrichments refunded automatically.
- Demo endpoints (https://api.leadmerlin.com/api/v2/demo/*) need no auth and cost no credits.
- Export results to CSV with this header order:
Rank,Name,Category,Website,GBP URL,CID,Owner,Email,Phone,Phone Type,Address,City,State,Rating,Reviews,Claimed,Socials,Logo,Email 1..5 + Status,Phone 1..5 + Type + Carrier,Page 1..5 URL/Title/Meta/Text Authentication
Every request needs your API key in the x-api-key header. Keys start with lm_ and are created automatically when you sign up — find and roll yours in the dashboard.
curl https://api.leadmerlin.com/api/v2/usage -H "x-api-key: lm_your_key" GET /v2/locations
Fuzzy search for cities/regions. Returns location_code values for search. No credits.
{ "locations": [{ "location_code": 1012938, "full_name": "Denver, Colorado, US", ... }] } POST /v2/searches
Body: { keyword, location_codes[] } (1–5 codes for multi-city). Returns a job_id; enrichment runs async.
GET /v2/jobs/:id
Poll every ~5s until status === "completed". Returns counts + progress.
GET /v2/jobs/:id/results
Paginated enriched businesses. Follow next_cursor until has_more is false. Best-match email/phone are promoted to the top level; full lists in contact.all_emails[] / all_phones[].
POST /v2/enrichments
Already have leads? Pass up to 100 domains and get the full pipeline — no search needed. Async, same poll + results flow. Failed enrichments are refunded.
curl -X POST https://api.leadmerlin.com/api/v2/enrichments -H "x-api-key: lm_your_key" \
-H "content-type: application/json" \
-d {"leads":[{"domain":"example.com","business_name":"Example","city":"Austin","state":"TX"}]} Demo Endpoints
Test with fake data: /v2/demo/locations, /v2/demo/searches, /v2/demo/jobs/:id, /v2/demo/jobs/:id/results, /v2/demo/enrichments. No auth, no credits — every response carries demo: true.
Data Fields
Each enriched business: name, category, website, gbp_url, cid, logo, owner, summary, email, phone, phone_type, rank; contact (address, city, state, lat/lng, all_emails[] with status/role/free flags, all_phones[] with line_type + carrier); reputation (rating, reviews, is_claimed); services (list, specialties, areas, year_established, employees); web (tech stack, socials, has_blog, meta, pages[]).
Plans
Start free, then Starter ($39 / 10k leads), Pro ($49 / 20k), Agency ($97 / 50k). All plans run the full pipeline on every lead. See pricing →
Errors
400— invalid request (missing params, bad domain)401— missing or invalid API key429— credit limit or rate limit reached500— internal server error