Справочник API

Ищите контакты прямо из вашего агента.

Один эндпоинт для поиска бизнес-контактов по отрасли, городу или стране — понятные параметры, а не низкоуровневый проброс полей.

Обзор

API B2BLeads — это единый discovery-эндпоинт, дружелюбный к MCP. Базовый URL:

bash
https://api.b2bleadsapi.com

Каждый ответ — JSON. SDK не требуется — обычные HTTPS-запросы работают из любого языка или из встроенного вызова инструментов AI-агента.

Аутентификация

Передавайте ваш API-ключ как bearer-токен. Создавайте ключи в панели управления в разделе API-ключи.

bash
Authorization: Bearer b2bl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Запросы без действительного ключа возвращают 401 Unauthorized. Каждый ключ ограничен по количеству запросов в минуту и месячной квоте поиска согласно вашему тарифу.

GET /v1/search-leads

Находит компании по вашему собственному поисковому словарю — чистые, целевые параметры вместо низкоуровневых полей запроса. Обязателен хотя бы один из параметров: q, industry или city.

Параметры запроса

ПараметрТипОписание
qstringПроизвольный текстовый запрос, например «семейные пекарни». Необязателен, если задан industry или city.
industryenumОдно из наших собственных значений отрасли — полный список см. в GET /v1/search-leads/industries.
citystringНазвание города или региона, например «Мюнхен» или «Остин, Техас». Сочетайте с radius_km для ограниченного по площади поиска.
radius_kmnumberРадиус поиска вокруг города, в километрах (максимум 50). Игнорируется без city.
min_ratingnumber 0–5Возвращать только компании с рейтингом не ниже этого значения; фильтрация выполняется на сервере для корректной постраничной навигации.
has_websitebooleantrue — возвращать только компании с указанным сайтом.
verified_onlybooleantrue — исключить постоянно или временно закрытые компании.
open_nowbooleantrue — возвращать только компании, которые сейчас открыты.
price_levelenum, comma-separatedОдно или несколько значений: budget, moderate, expensive, luxury. Например, price_level=budget,moderate.
rank_byenumrelevance (по умолчанию) или distance. Для distance обязателен параметр city.
limitnumber 1–20Максимум результатов на странице. По умолчанию 20 (ограничение на один запрос).
page_tokenstringЗначение nextPageToken из предыдущего ответа для получения следующей страницы. При его указании все остальные фильтры игнорируются (они уже учтены в токене).
langstringЯзык названий/адресов в результатах, например «pt» или «pt-BR». Переопределяет язык панели управления вашего аккаунта для этого запроса; если не указан, используется язык аккаунта.
list_idstringСохранить результаты в уже существующий список, которым вы владеете. В ответе появится объект savedTo.
list_namestringСохранить в список с этим названием, создав его, если он не существует. Игнорируется, если также указан list_id.
save_to_listbooleantrue — сохранить в список «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"

Пример ответа

json
{
  "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.

GET /v1/search-leads/industries

Публичный эндпоинт без аутентификации — возвращает актуальный список поддерживаемых значений industry, чтобы клиентам и агентам не нужно было зашивать их в код.

curl
curl "https://api.b2bleadsapi.com/v1/search-leads/industries"
json
{
  "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.

ПараметрТипОписание
400Bad RequestНе указан ни один из q/industry/city, неизвестное значение industry/price_level/rank_by, rank_by=distance без city, либо radius_km/min_rating/limit вне допустимого диапазона.
401UnauthorizedОтсутствует или недействителен API-ключ.
402Payment RequiredПревышена месячная квота поиска для тарифа этого ключа.
403ForbiddenАккаунт заблокирован или забанен.
429Too Many RequestsПревышен лимит запросов для ключа — снизьте частоту и повторите попытку.
502Bad GatewayСбой у стороннего провайдера поиска; повторный запрос безопасен.
503Service UnavailableПоиск контактов временно отключён через feature flag.

Лимиты и квоты

У каждого API-ключа есть лимит запросов в минуту и месячная квота поиска, определяемые вашим тарифом. Текущее использование можно посмотреть в любой момент в разделе панели управления Биллинг либо через эндпоинт GET /v1/billing, если вы авторизованы токеном сессии.

Использование как MCP-инструмента

Мы публикуем официальный 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-ключи:

json
{
  "mcpServers": {
    "b2bleads": {
      "command": "npx",
      "args": ["-y", "b2bleads-mcp"],
      "env": {
        "B2BLEADS_API_KEY": "your-api-key-here"
      }
    }
  }
}

Хотите подключить через обычный REST самостоятельно? Параметры выше напрямую соответствуют входной схеме инструмента — агент выбирает отрасль и город на естественном языке, а B2BLeads сам превращает это в живой discovery-запрос.

json
{
  "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"
  }
}

Отдельный инструмент выполняет исчерпывающий поиск по всему городу — но с явным предупреждением о повышенной стоимости, чтобы агенты не вызывали его по умолчанию:

json
{
  "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-поверхность:

json
{
  "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-адресами. Без активного тарифа ключ получит обычную ошибку «требуется апгрейд» вместо результата.