# Lead Radar (lead-radar.fr) Lead Radar is a B2B lead generation SaaS: it searches for businesses on Google Maps (by keyword + location, or from a Google Maps URL), deduplicates results, and enriches email addresses from company websites. Each search consumes credits. The API is fully usable by AI agents: account creation, API key authentication, and all endpoints work without a browser. ## Product summary - What: French B2B prospecting tool. Type a business category + a place (e.g. "restaurant, Lyon 3e, 2 km"); Lead-Radar covers the area cell by cell on Google Maps (grid search, beyond the ~60-result display limit of Google Maps, up to 60 results per 2.5 km cell) and returns address, phone, website, rating and review count; on request it then looks for the email on the business's own website. - Built for: web agencies, food & beverage suppliers, POS / booking software vendors, B2B sales teams prospecting local businesses in France. - Pricing (EUR): 5 free credits on signup, no card. Packs: 10 credits 9.90, 50 credits 39.90, 100 credits 59.90. Monthly plans: Starter 100 credits 49.90, Pro 220 credits 99.90. A search costs 1 credit per km of radius up to 3 km (22 credits at 10 km); an email enrichment costs 1 credit only when an email is found. - Output: CSV export, REST API, MCP server (see below). ## Real figures (Lead-Radar searches, 30 Sep - 7 Oct 2026) "restaurant" searches, 2 km radius, 8 French cities: 1,604 restaurants returned; 95% show a phone number on Google Maps; 21% have no website (8% Bordeaux Chartrons, 14% Paris 11e, Lyon 3e and Nantes, 32% Nice, 36% Marseille 1er); average Google rating about 4.5/5. A 2 km search is capped at 240 results, so in dense areas these describe the top-ranked restaurants, not the total count. Per-city table: https://lead-radar.fr/fichier-restaurants "plombier" (plumber) searches, 3 km radius, 8 big-city areas (7 Oct 2026): 831 returned; 96% with a phone number; 27% without a website (19% Paris 11e to 36% Marseille 1er and Nantes); median of 9 to 42 Google reviews per city. https://lead-radar.fr/fichier-artisans "garage automobile" searches, 3 km radius, 6 big-city areas (7 Oct 2026): 1,510 returned; 93% with a phone number; 46% without a website (34% Lille to 67% Marseille 1er). https://lead-radar.fr/fichier-garages "institut de beauté" (beauty salon) searches, 2 km radius, 8 big-city areas (8 Oct 2026): 1,242 returned; 96% with a phone number; 18% without a website (10% Bordeaux and Lille to 28% Marseille 1er). https://lead-radar.fr/fichier-instituts-beaute Caveat for all figures: searches return at most 60 places per 2.5 km grid cell, so in dense city centres they describe the top-ranked places, not a census of all businesses. Comparison with Scrap.io, Lobstr.io, Outscraper, PhantomBuster and Apify (pricing model, emails, API/MCP, checked 7 Oct 2026; unverified items marked): https://lead-radar.fr/extraire-donnees-google-maps ## Guides (French) - https://lead-radar.fr/fichier-restaurants — restaurant database by area - https://lead-radar.fr/fichier-artisans — tradespeople (artisans) file - https://lead-radar.fr/fichier-garages — car garages file - https://lead-radar.fr/fichier-instituts-beaute — beauty salons file - https://lead-radar.fr/trouver-clients-agence-web — finding clients for a web agency - https://lead-radar.fr/trouver-clients-locaux — finding local B2B clients - https://lead-radar.fr/prospection-google-maps — prospecting with Google Maps - https://lead-radar.fr/extraire-donnees-google-maps — extracting Google Maps data - https://lead-radar.fr/fichier-prospection-b2b — building a B2B prospect file - https://lead-radar.fr/developers — API & MCP for AI agents ## Create an account and get an API key (single call) POST /api/auth/register Content-Type: application/json { "email": "agent@example.com", "password": "min-8-chars", "name": "My agent", "createApiKey": true } Response: { "ok": true, "apiKey": "lr_..." } The key is shown only once: store it. Welcome credits are granted on signup; API signups share a global daily quota — the response's "welcomeCredits" field (5 or 0) tells you whether you received them. If 0, buy credits via the checkout flow below or retry another day. ## Authentication All /api/* routes accept the header: Authorization: Bearer lr_... ## Key management - GET /api/keys — list your active keys - POST /api/keys — create a key (optional { "name": "..." }); the plaintext key is only returned at creation - DELETE /api/keys/{id} — revoke a key ## Main endpoints ### Credits - GET /api/credits/balance — current balance - GET /api/credits/history — ledger history ### Searches (credits debited at launch, refunded on failure) Cost scales with the covered radius (more grid cells to cover): 1 km = 1 credit, 3 km = 3, 10 km = 22, up to 284 credits at 50 km. MAPS_URL searches derive their radius from the URL zoom level, capped at 15 km (~48 credits max); unparseable URLs are rejected before any debit. Check your balance before launching a large radius. - POST /api/searches — launch a search. Body (two forms): { "type": "KEYWORD", "keyword": "plumber", "location": "Lyon, France", "radiusKm": 10 } or { "type": "MAPS_URL", "mapsUrl": "https://www.google.com/maps/search/..." } Optional "deep": true (deep search; KEYWORD needs radiusKm, MAPS_URL uses the radius derived from the URL zoom). Each 2.5 km grid cell returns at most 60 places; with deep search a full cell is split into 4 to get the rest. Reserves 1 extra credit per grid cell at launch (3 km: +9), keeps 1 per cell actually split and refunds the rest when the search ends. Ask your human before using it: it can cost several times the base price. - GET /api/searches — list your searches (status: PENDING, PROCESSING, PAUSED, COMPLETED, FAILED) - GET /api/searches/{id} — search detail and progress Searches are asynchronous: launch, then poll the status until COMPLETED. ### Leads - GET /api/leads — list your leads. Query params: page, limit (max 100), searchId, hasEmail (true/false), hasWebsite (true/false; false = businesses with no website), q (free text), tagId - GET /api/leads/{id} — lead detail (tags, notes) - PATCH /api/leads/{id} — fix phone / email - POST /api/leads/enrich — enrich emails ({ "leadIds": ["..."] }, max 100) - GET /api/leads/export — CSV export (available once the account has bought credits at least once; 402 EXPORT_REQUIRES_PURCHASE otherwise) ### Buying credits (checkout handed to the human) Payment happens through Stripe Checkout in a browser. The agent flow: create the session, hand the URL to your human operator, who pays; credits are added to the account automatically once payment is confirmed (Stripe webhook). No further agent action is required — then check the balance with GET /api/credits/balance. - POST /api/stripe/checkout — create a payment session. Body: { "packId": "pack_10" | "pack_50" | "pack_100" } (one-time purchase: 10/50/100 credits) or { "planId": "starter" | "pro" } (monthly subscription: 100/220 credits per month) Response: { "url": "https://checkout.stripe.com/..." } - Limits: 3 sessions / minute. Only one active subscription at a time. ## MCP server An MCP server (Model Context Protocol, Streamable HTTP transport) is exposed at: POST /api/mcp Authorization: Bearer lr_... Available tools: get_credit_balance, create_search, get_search, list_searches, list_leads, enrich_leads, list_credit_packs, create_checkout. Example MCP client configuration: { "url": "https:///api/mcp", "headers": { "Authorization": "Bearer lr_..." } } OAuth one-click connect: MCP clients that support OAuth can connect without pasting a key. The server implements OAuth 2.1 (authorization code + PKCE) with Dynamic Client Registration; discovery documents are served at /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource. The issued access token is a regular API key, revocable from the dashboard settings (API keys section). ## Limits - Signup: 5 accounts / hour / IP - Maximum 10 active API keys per account - 120 requests / minute per API key - All data is scoped to the account: a key only grants access to its owner's data.