MapsData API

Submit a scrape

Start a scrape. Returns immediately with a queued job.

Scrapes take minutes to hours. Poll GET /api/v1/jobs/{id} at a sensible interval rather than in a tight loop; MapsData also emails you on completion.

Send an Idempotency-Key header to make retries safe: replaying the same key with the same body returns the original job instead of creating a second one.

Set dry_run: true to validate against every gate, including the quota check, without creating a job or spending anything.

post/api/v1/jobs

Request

  • Base URL: https://mapsdata.ai (the document declares no server; this is the origin it was published from)
  • URL: https://mapsdata.ai/api/v1/jobs
  • Auth: MapsData API key (a scheme the document does not define)

Request body

querystring required

One to three comma-separated Google Maps categories, e.g. 'Plumber' or 'Plumber, Electrician'.

countrystring

One of us, au, uk, ca.

statesstring[]

Full region names for the chosen country, e.g. ['Texas']. Abbreviations are rejected. Omit when passing cities.

total_limitinteger required

Rows to scrape. Capped by your plan's per-scrape ceiling; see GET /api/v1/usage.

max_emails_per_companyinteger nullable

Cap emails kept per business. Omit for no cap.

min_reviewsinteger

Skip businesses with fewer reviews.

max_reviewsinteger nullable

Skip businesses with more reviews.

list_namestring nullable

Label for this list. Defaults to the query.

client_idstring nullable

Only for multi-client workspaces. Defaults to your Main client.

include_variantsboolean

Also search up to four closely related categories, which typically finds materially more unique businesses. Applies only to single-category submissions: with two or three categories your own terms already occupy the fan-out. Set false to search the exact category only.

dry_runboolean

Validate against every gate and return the resolved plan WITHOUT creating a job or spending any quota.

Response

Successful Response

idstring required
statusstring required

One of: queued, running, cancelling, cancelled, completed, failed.

progressinteger

Percent complete, 0-100.

querystring nullable
list_namestring nullable
countrystring nullable
statesstring[]
citiesobject[]
total_limitinteger nullable
lead_countinteger

Rows scraped so far. Live during a run.

email_countinteger

Rows carrying an email. Set when the job settles, and the figure your usage is billed on.

stop_reasonstring nullable

Why the scrape stopped. Set on essentially every completed scrape, so compare it against specific values rather than testing whether it is present. One of: 'limit_reached' (hit the requested total), 'coverage_exhausted' (covered every area selected and that was all there was), 'diminishing_returns' (results thinned out, so it stopped rather than walk the long tail), 'barren_query' (the densest areas returned almost nothing), 'user_cancel', 'stall', or 'memory_checkpoint'. The middle three all mean the area genuinely did not hold that many businesses and re-running returns the same count, so a result short of total_limit is expected rather than a failure. NULL means no reason was recorded: the scrape either finished before this field existed, or was cancelled or failed before it was set. Read it with status, never on its own.

error_messagestring nullable
export_errorstring nullable
created_atstring nullable
started_atstring nullable
completed_atstring nullable

Changes

No recorded changes to this operation across all 1 revision of this API.