Core

Leads

Once a search is completed, page through its extracted leads.

Everything this account owns, however it got here — from a search or from unlocking a row in the shared dataset. Reading your own leads is free; you paid for them once already.

For the leads one particular search produced, use GET /v1/searches/:id/leads instead — that one is scoped to a single search and lives in the Searches namespace.

GET/v1/leads

Query parameters

FieldTypeDescription
providerstring?Source maps to keep, comma-separated: google · apple · bing. Omit for all three.
limitnumber?Page size (1–500, default 100).
cursorstring?Opaque cursor from the previous response. Keyset paging — pass it back verbatim.

The response is { "leads": [ lead, ... ], "nextCursor": string | null }.

⚠️ Those three are the only parameters this endpoint takes. The richer filters on GET /v1/businesses — q, country, category, minRating, hasPhone / hasWebsite / hasEmail, emailStatus — are not implemented here yet. Sending one returns 400 rather than quietly ignoring it, so you never get an unfiltered list back believing it was filtered.

GET/v1/leads/:id

One lead, same shape as the list. A lead belonging to someone else is 404, not 403 — a 403 would confirm the id is real.

GET/v1/leads/export

Everything you own as one file. Unlocked rows have no search behind them, so this is the only way to get those out in bulk. Free — you paid for these rows once already.

FieldTypeDescription
providerstring?Source maps to keep, comma-separated. Omit for all three.
formatcsv | xlsx | jsonOutput format (default csv).
leadIdsstring (repeatable)Optional. ?leadIds=a&leadIds=b to export only those.
GET/v1/leads/:id/pending-sync
POST/v1/leads/:id/sync

A lead is a copy taken at the moment you acquired it. When the shared record behind it changes, pending-sync says what is newer and sync pulls it in. Free — you are not buying the row again.

The lead object

The same shape everywhere a lead appears, including GET /v1/searches/:id/leads and the export files.

FieldTypeDescription
idstringLead id.
providerstringMap source the lead came from: google · bing · apple.
namestringBusiness name.
fullAddressstring | nullFormatted address.
streetstring | nullStreet.
municipalitystring | nullCity / municipality.
categoriesstring[]Business categories.
latitudenumber | nullLatitude.
longitudenumber | nullLongitude.
phonestring | nullPrimary phone number.
phonesstring[]All phone numbers.
websitestring | nullWebsite URL.
domainstring | nullWebsite domain.
emailsLeadEmail[]All discovered emails with BillionVerify status (enrichment, paid plans).
socialsRecord<string,string>Social profile URLs (enrichment).
technologiesWebsiteTechnology[]Website technology names, versions, and categories (enrichment).
ratingnumber | nullAverage review rating.
reviewCountnumber | nullNumber of reviews.
mapsUrlstring | nullListing URL on the source map.
placeIdstring | nullSource place id (Google Place ID, Bing ypid, Apple muid).

Field availability by provider

Every lead uses the same shape, but the source maps expose different fields — missing ones are null / empty. emails and socials are never from the map; they come from website enrichment on all providers.

FieldGoogleBingApple
name, address, coordinates, phone, website, categories, placeId, mapsUrl✓✓✓
street, municipality✓—✓
rating, reviewCount✓✓—
openingHoursby daysingle text—
reviewUrl✓——
featuredImage✓✓—
priceLevel, claimed✓——
emails, socialsenrichmentenrichmentenrichment
cURL
# Everything you own, Apple and Bing only
curl "https://api.mapleads.ai/v1/leads?provider=apple,bing&limit=100" \
  -H "Authorization: Bearer mapleads_xxx"

# Next page — pass nextCursor back verbatim
curl "https://api.mapleads.ai/v1/leads?cursor=CURSOR" \
  -H "Authorization: Bearer mapleads_xxx"