Connect Claude Code, Claude Desktop, Cursor, VS Code or ChatGPT to 67Leads. Count, search and sample US local-business leads for free, then quote and export them with the same credits as the web app. Setup, tools and limits.
https://67leads.com/api/mcp speaks MCP over Streamable HTTP (protocol
2025-11-25; 2025-06-18, 2025-03-26, 2024-11-05 also accepted). It is
stateless: every request is one JSON-RPC POST and gets one JSON reply.
Send your API key as X-API-Key: YOUR_API_KEY or
Authorization: Bearer YOUR_API_KEY. To get it, sign in at
67leads.com/app and press Copy API key in the export
bar. Keys in the URL are not accepted, because URLs end up in logs.
Without a key the free tools still work: counts, parsing, coverage, masked search and the free sample (limited per IP). Quoting and exporting need a key.
claude mcp add --transport http 67leads https://67leads.com/api/mcp --header "X-API-Key: YOUR_API_KEY"
Add this to claude_desktop_config.json (Settings, Developer, Edit config).
It uses the mcp-remote package to reach the remote server with your header,
so it needs Node.js.
{
"mcpServers": {
"67leads": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://67leads.com/api/mcp",
"--header",
"X-API-Key:${LEADS67_KEY}"
],
"env": {
"LEADS67_KEY": "YOUR_API_KEY"
}
}
}
}
In ~/.cursor/mcp.json, or .cursor/mcp.json in a project:
{
"mcpServers": {
"67leads": {
"url": "https://67leads.com/api/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}
In .vscode/mcp.json:
{
"servers": {
"67leads": {
"type": "http",
"url": "https://67leads.com/api/mcp",
"headers": {
"X-API-Key": "${input:leads67-key}"
}
}
},
"inputs": [
{
"id": "leads67-key",
"type": "promptString",
"description": "67Leads API key",
"password": true
}
]
}
Add a custom connector with the URL https://67leads.com/api/mcp and no authentication. In
ChatGPT this is under Settings, Apps, with Developer mode on; in claude.ai it is Settings,
Connectors, Add custom connector. These connectors sign in with OAuth rather than a header,
and this server does not offer OAuth yet, so they get the free tools only. To export from a
chat, use Claude Desktop, Claude Code or Cursor with your key. Both vendors rename these
menus from time to time; if a label differs, follow their guide.
curl https://67leads.com/api/mcp \
-H "X-API-Key: $LEADS67_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"count_leads","arguments":{"q":"roofers in Dallas TX with no website"}}}'
| Tool | Cost | API key | What it does |
|---|---|---|---|
count_leads | Free | Optional | Exact count of matching businesses, with how many have a verified email, an owner's name or no website, and the top cities. Free. Use this first to answer 'how many'. |
search_leads | Free | Optional | Up to 25 matching businesses. Phone, email, owner surname and website are masked unless the caller owns the lead. Free. |
parse_query | Free | Optional | What a plain-English lead search means (niche, city, state, filters) without running it. Free. |
list_niches | Free | Optional | Every niche id with the leads, states and verified emails in stock. Niches with 0 leads can be requested on the site. Free. |
coverage | Free | Optional | Lead counts per state (or per city when a state is given), optionally for one niche, so you can avoid empty searches. Free. |
get_sample | Free | Optional | Up to 5 unmasked rows for one niche in one city. 3 different samples a day per account (per IP without a key); asking again for the same one replays it. Free. |
quote_export | Free | Required | Price an export before taking it: rows, credits, the daily allowance left and a quote_token valid 10 minutes. Free. Show the user say_to_user and wait for an explicit yes before export_leads. Up to 1000 rows per MCP export. |
export_leads | Spends credits | Required | Take the leads in a quote and return them as CSV text. Spends credits exactly like the web export, and each lead is charged once ever. Never call without the user's explicit confirmation of the quoted price. |
Exporting is two calls on purpose. quote_export prices the request (rows,
credits, what you already own, the daily allowance left) and returns a
quote_token that lasts 10 minutes. The assistant shows you the
price and waits for your yes; only then does it call export_leads with the
token. If the price has gone up since the quote, the export is refused and has to be
quoted again.
export_leads runs the same code as the Export button in the app: the same
credits per new lead, the same daily cap, and a lead you already own is free to take again.
The CSV comes back in the tool result, up to 1,000 rows a call. For bigger
files use the app or the HTTP API, up to 25,000 rows a
request.
Pass preset to get the file in the column layout of the tool you will import
it into: 67leads, instantly, smartlead, lemlist, gohighlevel, clay, hubspot, apollo. The Instantly, Smartlead, lemlist, HubSpot layouts only take leads with an email,
and that narrowing is part of the quote, so you are never charged for a row the tool would
reject.
initialize and tools/list.search_leads returns up to 25 rows a call; use
offset for more. Contacts stay masked unless you own the lead.get_sample: 5 unmasked rows for one niche in one
city, 3 different samples a day per account (per IP without a
key). A sample is not a purchase.export_leads: up to 1,000 rows a call, within your plan's
credits or daily cap.Retry-After header says when
to try again.isError: true and a sentence saying why, so the
assistant can tell you.