Local only. Create a job, poll its Status until ok or failed (Progress says how far it is), download the CSV or JSON. A job the engine was stopped in the middle of resumes from its last finished keyword on the next start. Source and docs: https://github.com/Mahanaicoach/google-maps-scraper-kit
Web UI · OpenAPI JSON · With SCRAPER_API_KEY set, send it as an X-API-Key header.
/api/v1/jobsList jobs, newest first (null when there are none)
/api/v1/jobsCreate a job; returns 201 {"id": "<uuid>"}, or 422 {"code", "message"}
| Field | Type | Required | Meaning |
|---|---|---|---|
name | string | yes | any label |
keywords | array | yes | searches, run one after another |
lang | string | yes | 2-letter interface language, e.g. en (category names, hours text) |
country | string | 2-letter country Google ranks and formats results for, e.g. us (default: the country of this machine's IP) | |
lat | string | the map's centre, e.g. "30.2672"; send lat and lon both, or neither (then Google places the search by the keyword, e.g. "cafes in Austin TX") | |
lon | string | e.g. "-97.7431" | |
max_time | integer | yes | seconds |
depth | integer | result batches per keyword, about 20 places each (default 1) | |
zoom | integer | map zoom 1-21 (default 15) | |
email | boolean | visit each website's homepage for emails | |
verify_emails | boolean | with email: check each address's domain over DNS (dns.google), drop domains that do not exist, add email_host | |
browser_sites | boolean | optional Playwright retry when HTTP finds no email or social links; adds website_fetch_status | |
socials | boolean | visit each website's homepage for Instagram, Facebook, LinkedIn, TikTok, YouTube and X links | |
reviews_max | integer | 0-5 reviews per place from its panel, one page load per place (headless supported) | |
proxies | array | http(s)://[user:pass@]host:port or socks5://host:port; one per keyword in turn, and the next one when Google refuses a keyword | |
radius | integer | accepted, not used | |
fast_mode | boolean | accepted, not used |
/api/v1/jobs/{id}One job: ID, Name, Date, Status (pending, working, ok, failed), Data (proxy passwords masked), Error, Progress (keywords_done, keywords_total, places, percent, stage: queued, search, reviews, websites or done)
/api/v1/jobs/{id}Delete a job and its results (stops it if it is running)
/api/v1/jobs/{id}/downloadThe job's CSV, the rows so far while it works; ?format=json for a JSON array of the same rows
/api/v1/citiesUp to 20 cities for the web UI's Where box, each {label, lat, lon, country}: ?q=aus gives the biggest whose "name, region, country" starts with it, no q the biggest US cities (GeoNames, CC BY 4.0)
/api/openapi.jsonThis description as OpenAPI JSON (the page at /api/docs shows it)