BasedOnBusiness

API de dados de negócios e leads do Google Maps e servidor MCP - pesquise, enriqueça (e-mail, redes sociais, stack tecnológico) e exporte leads em 195 países.

Documentação

Documentação do BasedOnB

Automatize a extração de leads do Google Maps com a API REST ou conecte diretamente aos seus assistentes de IA com o servidor MCP.

Início Rápido

curl https://www.basedonb.com/api/v1/account \
  -H "Authorization: Bearer bdb_live_YOUR_KEY_HERE"

Autenticação

Todas as solicitações de API (exceto GET /health) exigem uma chave de API. Crie uma em API & Webhooks → Chaves de API.

Envie sua chave de uma das duas maneiras:

Cabeçalho Authorization (recomendado)

Authorization: Bearer bdb_live_...

Cabeçalho X-API-Key

X-API-Key: bdb_live_...

Use a API REST por meio de um backend confiável. Solicitações cross-origin entre navegadores estão deliberadamente desativadas; nunca exponha chaves de API em código do lado do cliente.

As respostas REST incluem X-Request-Id. Em solicitações autenticadas, também são enviados RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset; em solicitações que atingem o limite, Retry-After é enviado.

URL Base

https://www.basedonb.com/api/v1

Limites de Taxa

100 solicitações por minuto por chave de API. Exceder esse limite retorna 429.

Endpoints

Saúde

Conta

Scrapes

Dados Geográficos

Consulte os valores de país / estado / cidade aceitos pela API Scrapes. Os estados seguem o formato de código de ponto GeoNames (US.CA, TR.34, DE.BE). Países sem subdivisões retornam uma matriz states vazia. Envie esses trabalhos apenas com country.

Créditos e Faturamento

Webhooks

Os webhooks entregam notificações de eventos em tempo real para o seu endpoint. Cada solicitação inclui um cabeçalho X-Webhook-Signature para verificação.

Gerenciamento de Chaves de API

As chaves de API são criadas e revogadas apenas no painel autenticado. Escolha os escopos mínimos necessários ao criar uma chave: mcp, scrapes:read, scrapes:write, account:read, geodata:read, webhooks:read e webhooks:write. As chaves não podem criar ou gerenciar outras chaves por meio da API pública.

Payload do Webhook

Exemplo de payload scrape.done entregue ao seu endpoint:

POST https://your-server.com/webhook
Content-Type: application/json
X-Webhook-Id: delivery-uuid
X-Webhook-Event-Id: event-uuid
X-Webhook-Timestamp: 2026-07-18T10:05:00Z
X-Webhook-Signature: v1=abc123...
X-Event-Type: scrape.done
User-Agent: BasedOnB-Webhook/2.0

{
  "id": "event-uuid",
  "event": "scrape.done",
  "created_at": "2026-01-15T10:05:00Z",
  "data": {
    "scrape_id": "job-uuid",
    "query": "restaurants",
    "queries": ["restaurants"],
    "city": "Istanbul",
    "country": "TR",
    "state": "TR.34",
    "state_name": "İstanbul",
    "status": "done",
    "leads_found": 47,
    "credits_charged": 47,
    "error": null,
    "results_path": "/api/v1/scrapes/job-uuid/results"
  }
}

Verificando Assinaturas de Webhook

Para garantir que as solicitações venham do BasedOnB, verifique o cabeçalho X-Webhook-Signature. Salve a chave de assinatura, que é exibida apenas uma vez ao criar o webhook ou renovar a chave.

import { createHmac, timingSafeEqual } from "node:crypto";

function verifyWebhook(body: string, timestamp: string, signature: string, secret: string): boolean {
  const match = /^v1=([0-9a-f]{64})$/i.exec(signature);
  if (!match) return false;

  const expected = createHmac("sha256", secret)
    .update(timestamp + "." + body)
    .digest();
  const received = Buffer.from(match[1], "hex");
  return received.length === expected.length && timingSafeEqual(received, expected);
}

// In your endpoint handler:
const body = await req.text();
const sig = req.headers.get("X-Webhook-Signature") ?? "";
const timestamp = req.headers.get("X-Webhook-Timestamp") ?? "";
if (!verifyWebhook(body, timestamp, sig, process.env.WEBHOOK_SECRET!)) {
  return new Response("Unauthorized", { status: 401 });
}

Retorne qualquer código de status 2xx para confirmar a entrega. Entregas com falha são repetidas após 1 minuto, 5 minutos, 30 minutos e 2 horas, até no máximo 5 tentativas. Armazene o valor de X-Webhook-Event-Id e ignore eventos já processados. O timestamp é o momento em que o evento foi criado e não muda em novas tentativas; não rejeite uma nova tentativa válida apenas porque o timestamp é antigo.

Códigos de Erro

Status HTTPCódigoDescrição
400bad_requestParâmetros de solicitação inválidos
401unauthorizedCredencial ausente, inválida, expirada ou revogada
402insufficient_creditsCréditos insuficientes para iniciar uma coleta
402payment_requiredPagamento da assinatura está atrasado
403forbiddenA credencial não possui o escopo necessário
404not_foundRecurso não encontrado
409conflictConflito de chave de idempotência ou conflito de limite de recurso
429rate_limitedLimite de solicitações por chave, limite de teste de webhook ou limite de capacidade de coleta aberta excedido
500internal_errorErro inesperado do servidor
503service_unavailableUma dependência necessária está indisponível

Formato de resposta de erro:

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits. You have 3 but need 50."
  }
}

Pronto para começar?

Crie sua primeira chave de API nas Configurações e comece a coletar em minutos.