Dokumentacja API

Wyszukuj kontakty, prosto z Twojego agenta.

Jeden endpoint do wyszukiwania kontaktów biznesowych według branży, miasta lub kraju — Twoje własne słownictwo, a nie parametry niskiego poziomu przekazywane bezpośrednio dalej.

Przegląd

API B2BLeads to pojedynczy endpoint wyszukiwania, przyjazny dla MCP. Adres bazowy:

bash
https://api.b2bleadsapi.com

Każda odpowiedź jest w formacie JSON. Nie jest wymagane żadne SDK — zwykłe żądania HTTPS działają z dowolnego języka lub z natywnego wywoływania narzędzi przez agenta AI.

Uwierzytelnianie

Przekaż swój klucz API jako token bearer. Utwórz klucze w panelu w sekcji Klucze API.

bash
Authorization: Bearer b2bl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Żądania bez ważnego klucza zwracają 401 Unauthorized. Każdy klucz ma limit zapytań na minutę oraz miesięczną quotę wyszukiwań zależną od planu.

GET /v1/search-leads

Znajduje firmy pasujące do Twojego własnego słownictwa wyszukiwania — czyste, dedykowane opcje zamiast pól żądania niskiego poziomu. Wymagane jest podanie co najmniej jednego z: q, industry lub city.

Parametry zapytania

ParametrTypOpis
qstringZapytanie tekstowe, np. "rodzinne piekarnie". Opcjonalne, jeśli ustawiono industry lub city.
industryenumJedna z naszych wartości branżowych — pełną listę znajdziesz pod GET /v1/search-leads/industries.
citystringNazwa miasta lub regionu, np. "Monachium" lub "Austin, TX". Połącz z radius_km, aby ograniczyć zasięg wyszukiwania.
radius_kmnumberPromień wyszukiwania wokół miasta, w kilometrach (maks. 50). Ignorowany bez city.
min_ratingnumber 0–5Zwraca tylko firmy z co najmniej taką oceną, filtrowane po stronie serwera dla dokładnej paginacji.
has_websitebooleantrue, aby zwracać tylko firmy z podaną stroną internetową.
verified_onlybooleantrue, aby wykluczyć firmy trwale lub tymczasowo zamknięte.
open_nowbooleantrue, aby zwracać tylko firmy obecnie otwarte.
price_levelenum, comma-separatedJedna lub więcej wartości: budget, moderate, expensive, luxury. Np. price_level=budget,moderate.
rank_byenumrelevance (domyślnie) lub distance. distance wymaga ustawienia city.
limitnumber 1–20Maksymalna liczba wyników na stronę. Domyślnie 20 (limit na żądanie).
page_tokenstringWartość z nextPageToken poprzedniej odpowiedzi, aby pobrać kolejną stronę. Gdy ustawiony, wszystkie inne filtry są ignorowane (są już zakodowane w tokenie).
langstringJęzyk nazw/adresów w wynikach, np. "pt" lub "pt-BR". Nadpisuje język panelu Twojego konta dla tego żądania; jeśli pominięty, używany jest język konta.
list_idstringZapisz te wyniki w istniejącej zapisanej liście, której jesteś właścicielem. Dodaje obiekt savedTo do odpowiedzi.
list_namestringZapisz w liście o tej nazwie, tworząc ją, jeśli jeszcze nie istnieje. Ignorowane, jeśli podano też list_id.
save_to_listbooleantrue zapisuje w liście o nazwie "API searches" (tworzonej przy pierwszym użyciu), gdy nie podano ani list_id, ani list_name.

Przykładowe żądanie

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"

Przykładowa odpowiedź

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..."
}

Przekaż nextPageToken z powrotem jako page_token, aby pobrać kolejną stronę. Przyjmuje wartość null, gdy nie ma więcej wyników.

Uwaga dla agentów AI: w planach z Email Finder pole email zapisanego kontaktu może zawierać dosłowny ciąg CFD* zamiast adresu. Oznacza to, że każda próba scrapowania (zwykłe żądanie HTTP, a następnie fallback z przeglądarką headless) została zablokowana przez ochronę Cloudflare docelowej strony — to nie jest pusty wynik ani błąd, a ponowna próba dla tej samej strony się nie powiedzie. Traktuj CFD* jako "brak dostępnego adresu e-mail", a nie jako prawdziwy adres, i nie pokazuj tego użytkownikowi końcowemu jako jego adresu kontaktowego.

Wypróbuj na żywo

Wypróbuj

Wysyłane bezpośrednio z Twojej przeglądarki do działającego API — liczy się to do Twojej quoty. Twój klucz pozostaje w tej przeglądarce (localStorage) i nigdy nie jest wysyłany nigdzie indziej niż api.b2bleadsapi.com.

GET /v1/search-leads/industries

Publiczny, nieuwierzytelniony endpoint — zwraca aktualną listę obsługiwanych wartości industry, dzięki czemu klienci i agenci nigdy nie muszą ich sztywno kodować.

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" }
  ]
}

Wypróbuj na żywo

Wypróbuj

Publiczny endpoint, klucz API nie jest wymagany.

Błędy

Błędy to zwykły JSON z pojedynczym polem error.

ParametrTypOpis
400Bad RequestBrak wszystkich z q/industry/city, nieznana wartość industry/price_level/rank_by, rank_by=distance bez city, lub radius_km/min_rating/limit poza dozwolonym zakresem.
401UnauthorizedBrak lub nieprawidłowy klucz API.
402Payment RequiredPrzekroczona miesięczna quota wyszukiwań dla planu tego klucza.
403ForbiddenKonto jest zawieszone lub zbanowane.
429Too Many RequestsPrzekroczony limit zapytań dla klucza — zwolnij tempo i spróbuj ponownie.
502Bad GatewayBłąd dostawcy wyszukiwania po stronie serwera; można bezpiecznie ponowić żądanie.
503Service UnavailableWyszukiwanie kontaktów jest tymczasowo wyłączone przez flagę funkcji.

Limity zapytań i quota

Każdy klucz API ma limit zapytań na minutę oraz miesięczną quotę wyszukiwań, ustalane przez Twój plan. Aktualne zużycie sprawdzisz w dowolnym momencie w panelu, w sekcji Płatności lub przez endpoint GET /v1/billing, jeśli jesteś uwierzytelniony tokenem sesji.

Użycie jako narzędzie MCP

Publikujemy oficjalny serwer MCP, który udostępnia to API jako pięć narzędzi — search_leads, list_industries, list_saved_lists, get_saved_list oraz find_email — dla Claude Desktop, Claude Code, Cursor, ChatGPT, Gemini/Antigravity, Grok Build, GitHub Copilot i dowolnego innego klienta zgodnego z MCP. Bez ręcznej integracji REST.

Dodaj go do konfiguracji swojego klienta MCP z kluczem API z sekcji Klucze API:

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

Wolisz podłączyć się samodzielnie przez zwykły REST? Parametry powyżej odpowiadają bezpośrednio schematowi wejściowemu narzędzia — agent wybiera branżę i miasto w zwykłym języku, a B2BLeads zajmuje się przekształceniem tego w rzeczywiste zapytanie wyszukiwania w tle.

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

Osobne narzędzie obsługuje wyczerpujące wyszukiwanie w całym mieście — z wyraźnym ostrzeżeniem o podwyższonym koszcie, aby agenci nie wywoływali go domyślnie:

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

Dodatkowe narzędzia tylko do odczytu uzupełniają API 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 jest dostępny w każdym płatnym planie (od Starter wzwyż) — na tym samym poziomie, który już automatycznie wzbogaca wyniki search_leads o adresy e-mail. Bez aktywnego planu klucz otrzyma zwykły błąd "upgrade required" zamiast wyniku.