Google Maps Scraper Kit engine 2.2.0

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.

GET /api/v1/jobs

List jobs, newest first (null when there are none)

POST /api/v1/jobs

Create a job; returns 201 {"id": "<uuid>"}, or 422 {"code", "message"}

FieldTypeRequiredMeaning
namestringyesany label
keywordsarrayyessearches, run one after another
langstringyes2-letter interface language, e.g. en (category names, hours text)
countrystring2-letter country Google ranks and formats results for, e.g. us (default: the country of this machine's IP)
latstringthe 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")
lonstringe.g. "-97.7431"
max_timeintegeryesseconds
depthintegerresult batches per keyword, about 20 places each (default 1)
zoomintegermap zoom 1-21 (default 15)
emailbooleanvisit each website's homepage for emails
verify_emailsbooleanwith email: check each address's domain over DNS (dns.google), drop domains that do not exist, add email_host
browser_sitesbooleanoptional Playwright retry when HTTP finds no email or social links; adds website_fetch_status
socialsbooleanvisit each website's homepage for Instagram, Facebook, LinkedIn, TikTok, YouTube and X links
reviews_maxinteger0-5 reviews per place from its panel, one page load per place (headless supported)
proxiesarrayhttp(s)://[user:pass@]host:port or socks5://host:port; one per keyword in turn, and the next one when Google refuses a keyword
radiusintegeraccepted, not used
fast_modebooleanaccepted, not used

GET /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)

DELETE /api/v1/jobs/{id}

Delete a job and its results (stops it if it is running)

GET /api/v1/jobs/{id}/download

The job's CSV, the rows so far while it works; ?format=json for a JSON array of the same rows

GET /api/v1/cities

Up 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)

GET /api/openapi.json

This description as OpenAPI JSON (the page at /api/docs shows it)