API-Referenz

Kontakte finden, direkt aus deinem Agenten.

Ein Endpunkt, um Geschäftskontakte nach Branche, Stadt oder Land zu finden — eigenes Vokabular statt technischer Low-Level-Parameter.

Überblick

Die B2BLeads-API ist ein einzelner, MCP-freundlicher Such-Endpunkt. Basis-URL:

bash
https://api.b2bleadsapi.com

Jede Antwort ist JSON. Es ist kein SDK erforderlich — einfache HTTPS-Anfragen funktionieren aus jeder Sprache oder über den nativen Tool-Aufruf eines KI-Agenten.

Authentifizierung

Übergib deinen API-Schlüssel als Bearer-Token. Erstelle Schlüssel im Dashboard unter API-Schlüssel.

bash
Authorization: Bearer b2bl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Anfragen ohne gültigen Schlüssel liefern 401 Unauthorized. Jeder Schlüssel ist pro Minute rate-limitiert und durch das monatliche Suchkontingent deines Plans gedeckelt.

GET /v1/search-leads

Findet Unternehmen anhand deines eigenen Suchvokabulars — saubere, zweckgebundene Optionen statt technischer Low-Level-Felder. Mindestens eines von q, industry oder city ist erforderlich.

Query-Parameter

ParameterTypBeschreibung
qstringFreitext-Suche, z. B. "family-owned bakeries". Optional, wenn industry oder city gesetzt ist.
industryenumEiner unserer eigenen Branchenwerte — die vollständige Liste findest du unter GET /v1/search-leads/industries.
citystringStadt- oder Regionsname, z. B. "Munich" oder "Austin, TX". Kombiniere mit radius_km für eine begrenzte Suche.
radius_kmnumberSuchradius um die Stadt, in Kilometern (max. 50). Wird ohne city ignoriert.
min_ratingnumber 0–5Gibt nur Unternehmen mit mindestens dieser Bewertung zurück, serverseitig gefiltert für korrekte Paginierung.
has_websitebooleantrue, um nur Unternehmen mit hinterlegter Website zurückzugeben.
verified_onlybooleantrue, um dauerhaft oder vorübergehend geschlossene Unternehmen auszuschließen.
open_nowbooleantrue, um nur derzeit geöffnete Unternehmen zurückzugeben.
price_levelenum, comma-separatedEines oder mehrere von: budget, moderate, expensive, luxury. Z. B. price_level=budget,moderate.
rank_byenumrelevance (Standard) oder distance. distance erfordert, dass city gesetzt ist.
limitnumber 1–20Maximale Ergebnisse pro Seite. Standard 20 (Obergrenze pro Anfrage).
page_tokenstringWert aus dem nextPageToken einer vorherigen Antwort, um die nächste Seite abzurufen. Wenn gesetzt, werden alle anderen Filter ignoriert (bereits im Token enthalten).
langstringSprache für Ergebnisnamen/-adressen, z. B. "pt" oder "pt-BR". Überschreibt die Dashboard-Sprache deines Kontos für diese Anfrage; fällt bei Weglassen darauf zurück.
list_idstringSpeichert diese Ergebnisse in einer bestehenden, dir gehörenden gespeicherten Liste. Fügt der Antwort ein savedTo-Objekt hinzu.
list_namestringSpeichert in einer Liste mit diesem Namen und erstellt sie, falls sie noch nicht existiert. Wird ignoriert, wenn list_id ebenfalls gesetzt ist.
save_to_listbooleantrue speichert in einer Liste namens "API searches" (beim ersten Gebrauch erstellt), wenn weder list_id noch list_name angegeben ist.

Beispielanfrage

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"

Beispielantwort

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

Gib nextPageToken als page_token zurück, um die nächste Seite abzurufen. Der Wert ist null, sobald keine weiteren Ergebnisse vorliegen.

Hinweis für KI-Agenten: bei Plänen mit Email Finder kann das email-Feld eines gespeicherten Kontakts statt einer Adresse den wörtlichen String CFD* enthalten. Das bedeutet, dass jeder Scraping-Versuch (ein einfacher HTTP-Abruf, danach ein Headless-Browser-Fallback) durch den Cloudflare-Bot-Schutz der Zielseite blockiert wurde — es ist kein leeres Ergebnis und kein Fehler, und ein erneuter Versuch auf derselben Seite wird nicht erfolgreich sein. Behandle CFD* als "keine E-Mail verfügbar" statt als echte Adresse und melde es dem Endnutzer nicht als dessen Kontakt-E-Mail.

Live ausprobieren

Ausprobieren

Wird direkt aus deinem Browser an die Live-API gesendet — das zählt gegen dein Kontingent. Dein Schlüssel bleibt in diesem Browser (localStorage) und wird nirgendwohin außer an api.b2bleadsapi.com gesendet.

GET /v1/search-leads/industries

Öffentlicher, nicht authentifizierter Endpunkt — liefert die aktuelle Liste unterstützter industry-Werte, sodass Clients und Agenten sie nie fest codieren müssen.

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

Live ausprobieren

Ausprobieren

Öffentlicher Endpunkt, kein API-Schlüssel nötig.

Fehler

Fehler sind einfaches JSON mit einem einzelnen error-Feld.

ParameterTypBeschreibung
400Bad Requestq/industry/city fehlen alle, unbekannter industry-/price_level-/rank_by-Wert, rank_by=distance ohne city, oder ein außerhalb des Bereichs liegender radius_km-/min_rating-/limit-Wert.
401UnauthorizedFehlender oder ungültiger API-Schlüssel.
402Payment RequiredMonatliches Suchkontingent für den Plan dieses Schlüssels überschritten.
403ForbiddenKonto ist gesperrt oder gebannt.
429Too Many RequestsRate-Limit pro Schlüssel überschritten — drossle die Anfragen und versuche es erneut.
502Bad GatewayDer vorgelagerte Such-Provider ist ausgefallen; ein erneuter Versuch ist unbedenklich.
503Service UnavailableDie Kontaktsuche ist vorübergehend per Feature-Flag deaktiviert.

Rate-Limits & Kontingent

Jeder API-Schlüssel hat ein Rate-Limit pro Minute und ein monatliches Suchkontingent, beide durch deinen Plan festgelegt. Die aktuelle Nutzung kannst du jederzeit im Dashboard unter Abrechnung einsehen, oder über den GET /v1/billing-Endpunkt, wenn du mit einem Session-Token authentifiziert bist.

Als MCP-Tool verwenden

Wir veröffentlichen einen offiziellen MCP-Server, der diese API als fünf Tools bereitstellt — search_leads, list_industries, list_saved_lists, get_saved_list und find_email — für Claude Desktop, Claude Code, Cursor, ChatGPT, Gemini/Antigravity, Grok Build, GitHub Copilot und jeden anderen MCP-kompatiblen Client. Keine manuelle REST-Integration nötig.

Füge ihn deiner MCP-Client-Konfiguration mit einem API-Schlüssel aus API-Schlüssel:

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

Möchtest du es lieber selbst über reines REST anbinden? Die obigen Parameter entsprechen direkt dem Input-Schema des Tools — der Agent wählt Branche und Stadt in natürlicher Sprache, und B2BLeads übersetzt das im Hintergrund in eine echte Such-Anfrage.

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

Ein separates Tool übernimmt erschöpfende Suchen über eine ganze Stadt — jedoch mit einem ausdrücklichen Hinweis auf erhöhte Kosten, damit Agenten es nicht standardmäßig aufrufen:

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

Weitere schreibgeschützte Tools ergänzen die MCP-Oberfläche:

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 ist in jedem kostenpflichtigen Plan verfügbar (ab Starter) — derselben Stufe, die search_leads-Ergebnisse bereits automatisch mit E-Mails anreichert. Ohne aktiven Plan erhält der Schlüssel stattdessen schlicht einen "Upgrade erforderlich"-Fehler.