Référence API

Recherchez des prospects, directement depuis votre agent.

Un seul endpoint pour trouver des contacts professionnels par secteur, ville ou pays — votre propre vocabulaire, pas des paramètres de bas niveau.

Aperçu

L'API B2BLeads est un unique point d'accès de découverte compatible MCP. URL de base :

bash
https://api.b2bleadsapi.com

Chaque réponse est au format JSON. Aucun SDK requis — de simples requêtes HTTPS fonctionnent depuis n'importe quel langage ou depuis l'appel d'outils natif d'un agent IA.

Authentification

Transmettez votre clé API sous forme de jeton porteur (bearer token). Créez des clés depuis le tableau de bord, sous Clés API.

bash
Authorization: Bearer b2bl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Les requêtes sans clé valide renvoient 401 Unauthorized. Chaque clé est limitée en débit par minute et plafonnée par le quota de recherche mensuel de votre forfait.

GET /v1/search-leads

Trouve des entreprises correspondant à votre propre vocabulaire de recherche — des options claires et conçues sur mesure plutôt que des champs de requête de bas niveau. Au moins un des paramètres q, industry ou city est requis.

Paramètres de requête

ParamètreTypeDescription
qstringRequête en texte libre, par ex. "boulangeries familiales". Facultatif si industry ou city est défini.
industryenumUne de nos propres valeurs de secteur — voir GET /v1/search-leads/industries pour la liste complète.
citystringNom de ville ou de région, par ex. "Munich" ou "Austin, TX". À combiner avec radius_km pour une recherche délimitée.
radius_kmnumberRayon de recherche autour de la ville, en kilomètres (max 50). Ignoré sans city.
min_ratingnumber 0–5Ne renvoie que les entreprises ayant au moins cette note, filtrées côté serveur pour une pagination précise.
has_websitebooleantrue pour ne renvoyer que les entreprises avec un site web référencé.
verified_onlybooleantrue pour exclure les entreprises définitivement ou temporairement fermées.
open_nowbooleantrue pour ne renvoyer que les entreprises actuellement ouvertes.
price_levelenum, comma-separatedUn ou plusieurs parmi : budget, moderate, expensive, luxury. Ex. price_level=budget,moderate.
rank_byenumrelevance (par défaut) ou distance. distance nécessite que city soit défini.
limitnumber 1–20Nombre maximal de résultats par page. Par défaut 20 (plafond par requête).
page_tokenstringValeur provenant du nextPageToken d'une réponse précédente, pour récupérer la page suivante. Lorsqu'elle est définie, tous les autres filtres sont ignorés (déjà intégrés au jeton).
langstringLangue des noms/adresses des résultats, par ex. "pt" ou "pt-BR". Remplace la langue du tableau de bord de votre compte pour cette requête ; y revient par défaut si omis.
list_idstringEnregistre ces résultats dans une liste enregistrée existante que vous possédez. Ajoute un objet savedTo à la réponse.
list_namestringEnregistre dans une liste portant ce nom, en la créant si elle n'existe pas encore. Ignoré si list_id est également défini.
save_to_listbooleantrue enregistre dans une liste nommée "API searches" (créée à la première utilisation) lorsque ni list_id ni list_name ne sont fournis.

Exemple de requête

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"

Exemple de réponse

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

Renvoyez nextPageToken en tant que page_token pour récupérer la page suivante. Il vaut null lorsqu'il n'y a plus de résultats.

Note pour les agents IA : sur les forfaits avec Email Finder, le champ email d'un prospect enregistré peut renvoyer la chaîne littérale CFD* au lieu d'une adresse. Cela signifie que chaque tentative d'extraction (une requête HTTP simple, puis un repli via navigateur headless) a été bloquée par la protection anti-bot Cloudflare du site cible — ce n'est ni un résultat vide ni une erreur, et retenter sur le même site ne fonctionnera pas. Traitez CFD* comme "aucun e-mail disponible" plutôt que comme une adresse réelle, et ne le signalez pas à l'utilisateur final comme étant son e-mail de contact.

Essayez en direct

Essayer

Envoyé directement depuis votre navigateur vers l'API en direct — ceci compte dans votre quota. Votre clé reste dans ce navigateur (localStorage), jamais envoyée ailleurs qu'à api.b2bleadsapi.com.

GET /v1/search-leads/industries

Endpoint public, non authentifié — renvoie la liste actuelle des valeurs industry prises en charge, afin que les clients et les agents n'aient jamais besoin de les coder en dur.

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

Essayez en direct

Essayer

Endpoint public, aucune clé API requise.

Erreurs

Les erreurs sont au format JSON simple avec un unique champ error.

ParamètreTypeDescription
400Bad RequestAbsence de q/industry/city, valeur industry/price_level/rank_by inconnue, rank_by=distance sans city, ou radius_km/min_rating/limit hors plage.
401UnauthorizedClé API manquante ou invalide.
402Payment RequiredQuota de recherche mensuel dépassé pour le forfait de cette clé.
403ForbiddenLe compte est suspendu ou banni.
429Too Many RequestsLimite de débit par clé dépassée — patientez puis réessayez.
502Bad GatewayÉchec du fournisseur de découverte en amont ; nouvelle tentative possible.
503Service UnavailableLa recherche de prospects est temporairement désactivée via un indicateur de fonctionnalité.

Limites de débit et quotas

Chaque clé API dispose d'une limite de débit par minute et d'un quota de recherche mensuel, tous deux définis par votre forfait. Consultez l'utilisation actuelle à tout moment depuis la page Facturation du tableau de bord, ou via l'endpoint GET /v1/billing si vous êtes authentifié avec un jeton de session.

Utilisation comme outil MCP

Nous publions un serveur MCP officiel qui encapsule cette API sous forme de cinq outils — search_leads, list_industries, list_saved_lists, get_saved_list et find_email — pour Claude Desktop, Claude Code, Cursor, ChatGPT, Gemini/Antigravity, Grok Build, GitHub Copilot, et tout autre client compatible MCP. Aucune intégration REST manuelle nécessaire.

Ajoutez-le à la configuration de votre client MCP avec une clé API provenant de la Clés API:

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

Vous préférez le configurer vous-même en REST simple ? Les paramètres ci-dessus correspondent directement au schéma d'entrée de l'outil — l'agent choisit un secteur et une ville en langage naturel, et B2BLeads se charge de traduire cela en une requête de découverte en direct en coulisses.

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

Un outil distinct gère les recherches exhaustives sur toute une ville — avec un avertissement explicite de coût élevé pour éviter qu'un agent l'appelle par défaut :

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

D'autres outils en lecture seule complètent la surface 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 est disponible sur tout forfait payant (à partir de Starter) — le même niveau qui enrichit déjà automatiquement les résultats de search_leads avec des e-mails. Sans forfait actif, la clé reçoit simplement une erreur "mise à niveau requise" au lieu d'un résultat.