Один эндпоинт для поиска бизнес-контактов по отрасли, городу или стране — понятные параметры, а не низкоуровневый проброс полей.
API B2BLeads — это единый discovery-эндпоинт, дружелюбный к MCP. Базовый URL:
https://api.b2bleadsapi.comКаждый ответ — JSON. SDK не требуется — обычные HTTPS-запросы работают из любого языка или из встроенного вызова инструментов AI-агента.
Передавайте ваш API-ключ как bearer-токен. Создавайте ключи в панели управления в разделе API-ключи.
Authorization: Bearer b2bl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxЗапросы без действительного ключа возвращают 401 Unauthorized. Каждый ключ ограничен по количеству запросов в минуту и месячной квоте поиска согласно вашему тарифу.
Находит компании по вашему собственному поисковому словарю — чистые, целевые параметры вместо низкоуровневых полей запроса. Обязателен хотя бы один из параметров: q, industry или city.
| Параметр | Тип | Описание |
|---|---|---|
| q | string | Произвольный текстовый запрос, например «семейные пекарни». Необязателен, если задан industry или city. |
| industry | enum | Одно из наших собственных значений отрасли — полный список см. в GET /v1/search-leads/industries. |
| city | string | Название города или региона, например «Мюнхен» или «Остин, Техас». Сочетайте с radius_km для ограниченного по площади поиска. |
| radius_km | number | Радиус поиска вокруг города, в километрах (максимум 50). Игнорируется без city. |
| min_rating | number 0–5 | Возвращать только компании с рейтингом не ниже этого значения; фильтрация выполняется на сервере для корректной постраничной навигации. |
| has_website | boolean | true — возвращать только компании с указанным сайтом. |
| verified_only | boolean | true — исключить постоянно или временно закрытые компании. |
| open_now | boolean | true — возвращать только компании, которые сейчас открыты. |
| price_level | enum, comma-separated | Одно или несколько значений: budget, moderate, expensive, luxury. Например, price_level=budget,moderate. |
| rank_by | enum | relevance (по умолчанию) или distance. Для distance обязателен параметр city. |
| limit | number 1–20 | Максимум результатов на странице. По умолчанию 20 (ограничение на один запрос). |
| page_token | string | Значение nextPageToken из предыдущего ответа для получения следующей страницы. При его указании все остальные фильтры игнорируются (они уже учтены в токене). |
| lang | string | Язык названий/адресов в результатах, например «pt» или «pt-BR». Переопределяет язык панели управления вашего аккаунта для этого запроса; если не указан, используется язык аккаунта. |
| list_id | string | Сохранить результаты в уже существующий список, которым вы владеете. В ответе появится объект savedTo. |
| list_name | string | Сохранить в список с этим названием, создав его, если он не существует. Игнорируется, если также указан list_id. |
| save_to_list | boolean | true — сохранить в список «API searches» (создаётся при первом использовании), если не указаны ни list_id, ни list_name. |
curl "https://api.b2bleadsapi.com/v1/search-leads?industry=construction&city=Munich&radius_km=25&min_rating=4&has_website=true&open_now=true&rank_by=distance" \
-H "Authorization: Bearer b2bl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"{
"results": [
{
"id": "ChIJ...",
"name": "Bauunion GmbH",
"address": "Landsberger Str. 12, 80339 München",
"phone": "+49 89 1234567",
"website": "https://bauunion.de",
"rating": 4.7,
"ratingCount": 128,
"status": "OPERATIONAL",
"priceLevel": null,
"openNow": true
}
],
"nextPageToken": "AY1v..."
}Передайте nextPageToken обратно как page_token, чтобы получить следующую страницу. Значение станет null, когда результатов больше не будет.
Примечание для AI-агентов: на тарифах с Email Finder поле email сохранённого контакта может вернуться как буквальная строка CFD* вместо адреса. Это означает, что все попытки скрапинга (обычный HTTP-запрос, затем резервный вариант через headless-браузер) были заблокированы Cloudflare-защитой целевого сайта — это не пустой результат и не ошибка, и повторная попытка на том же сайте не даст результата. Считайте CFD* признаком «email недоступен», а не реальным адресом, и не показывайте это значение конечному пользователю как его контактный email.
Запрос отправляется прямо из вашего браузера в реальный API — это расходует вашу квоту. Ключ хранится только в этом браузере (localStorage) и никуда не отправляется, кроме api.b2bleadsapi.com.
Публичный эндпоинт без аутентификации — возвращает актуальный список поддерживаемых значений industry, чтобы клиентам и агентам не нужно было зашивать их в код.
curl "https://api.b2bleadsapi.com/v1/search-leads/industries"{
"industries": [
{ "value": "construction", "label": "Construction" },
{ "value": "restaurants", "label": "Restaurants" },
{ "value": "retail", "label": "Retail" },
{ "value": "manufacturing", "label": "Manufacturing" },
{ "value": "logistics", "label": "Logistics & Freight" },
{ "value": "it_services", "label": "IT Services" },
{ "value": "healthcare", "label": "Healthcare" },
{ "value": "real_estate", "label": "Real Estate" },
{ "value": "hospitality", "label": "Hospitality" },
{ "value": "professional_services", "label": "Professional Services" }
]
}Публичный эндпоинт, API-ключ не требуется.
Ошибки — это обычный JSON с единственным полем error.
| Параметр | Тип | Описание |
|---|---|---|
| 400 | Bad Request | Не указан ни один из q/industry/city, неизвестное значение industry/price_level/rank_by, rank_by=distance без city, либо radius_km/min_rating/limit вне допустимого диапазона. |
| 401 | Unauthorized | Отсутствует или недействителен API-ключ. |
| 402 | Payment Required | Превышена месячная квота поиска для тарифа этого ключа. |
| 403 | Forbidden | Аккаунт заблокирован или забанен. |
| 429 | Too Many Requests | Превышен лимит запросов для ключа — снизьте частоту и повторите попытку. |
| 502 | Bad Gateway | Сбой у стороннего провайдера поиска; повторный запрос безопасен. |
| 503 | Service Unavailable | Поиск контактов временно отключён через feature flag. |
У каждого API-ключа есть лимит запросов в минуту и месячная квота поиска, определяемые вашим тарифом. Текущее использование можно посмотреть в любой момент в разделе панели управления Биллинг либо через эндпоинт GET /v1/billing, если вы авторизованы токеном сессии.
Мы публикуем официальный MCP-сервер, который оборачивает этот API в пять инструментов — search_leads, list_industries, list_saved_lists, get_saved_list и find_email — для Claude Desktop, Claude Code, Cursor, ChatGPT, Gemini/Antigravity, Grok Build, GitHub Copilot и любого другого MCP-совместимого клиента. Ручная интеграция через REST не нужна.
Добавьте его в конфиг вашего MCP-клиента с API-ключом из раздела API-ключи:
{
"mcpServers": {
"b2bleads": {
"command": "npx",
"args": ["-y", "b2bleads-mcp"],
"env": {
"B2BLEADS_API_KEY": "your-api-key-here"
}
}
}
}Хотите подключить через обычный REST самостоятельно? Параметры выше напрямую соответствуют входной схеме инструмента — агент выбирает отрасль и город на естественном языке, а B2BLeads сам превращает это в живой discovery-запрос.
{
"name": "search_leads",
"description": "Find companies by industry, city and radius",
"parameters": {
"q": "string, optional free-text query",
"industry": "enum, see /v1/search-leads/industries",
"city": "string",
"radius_km": "number, max 50",
"min_rating": "number 0-5",
"has_website": "boolean",
"verified_only": "boolean",
"open_now": "boolean",
"price_level": "enum, comma-separated: budget, moderate, expensive, luxury",
"rank_by": "enum: relevance, distance (requires city)",
"limit": "number 1-20",
"page_token": "string, from a previous response's nextPageToken"
}
}Отдельный инструмент выполняет исчерпывающий поиск по всему городу — но с явным предупреждением о повышенной стоимости, чтобы агенты не вызывали его по умолчанию:
{
"name": "search_leads_advanced",
"description": "⚠️ Elevated cost: 9x the quota of a single search_leads call. Tiles a city into a 3x3 grid of sub-searches to return up to ~180 deduplicated businesses in one city, beyond search_leads' normal ~20-60 result ceiling. Only use when more results are explicitly needed for one city — never as a default. Does not support pagination.",
"parameters": {
"q": "string, optional free-text query",
"industry": "enum, see /v1/search-leads/industries",
"city": "string, required — ONLY the city name, e.g. \"Lyon\" (not the full search query)",
"min_rating": "number 0-5",
"has_website": "boolean",
"verified_only": "boolean",
"open_now": "boolean",
"price_level": "enum, comma-separated: budget, moderate, expensive, luxury"
}
}Дополнительные инструменты только для чтения дополняют MCP-поверхность:
{
"name": "list_industries",
"description": "List the industry values accepted by search_leads",
"parameters": {}
}
{
"name": "list_saved_lists",
"description": "List this account's saved lead lists",
"parameters": {}
}
{
"name": "get_saved_list",
"description": "Get the leads saved in a specific list",
"parameters": {
"list_id": "string, required — from list_saved_lists"
}
}
{
"name": "find_email",
"description": "Look up a best-effort contact email for a single business website",
"parameters": {
"website": "string, required, e.g. https://example.com"
}
}find_email доступен на любом платном тарифе (начиная со Starter) — на том же уровне, на котором search_leads уже автоматически обогащает результаты email-адресами. Без активного тарифа ключ получит обычную ошибку «требуется апгрейд» вместо результата.