This tutorial shows how to scrape Google Maps listings by keyword into CSV with the Google Maps Listings Scraper by Keywords template for UScraper. You will edit keyword/location URLs, set the export path, run the bounded scroll workflow, validate rows, and decide when the official Places API is the better route.
Before you start
Prerequisites and policy checks
You need UScraper as a local desktop app, the Google Maps Listings Scraper by Keywords template, a CSV folder, and approved keyword/location searches. Start with one narrow query before adding a city or category list.
Before automation, review Google's Maps Platform terms, Places API policies, and Text Search documentation. These rules matter if you store, display, enrich, or redistribute Google-sourced place data.
Technical access is not permission. Do not bypass CAPTCHA, verification screens, login walls, or access controls. Keep batches modest and document the query.
Workflow anatomy
What the Google Maps listings scraper does
The template JSON is the authoritative workflow definition. In plain English, the graph is:
Set Window Size -> Navigate -> Wait for Page Load -> Wait for Feed Cards
-> Inject Scroll and Collect JavaScript -> Wait for Buffered Rows
-> Structured Export -> Loop Continue -> End
Navigate starts with a normal Google Maps search URL. The JavaScript block finds the results feed, scrolls it in bounded passes, stores each visible listing card in a hidden export buffer, and stops when the end marker appears or scrolling stabilizes. Structured Export reads that buffer into fixed CSV columns.
| Export field | What it captures | Validation check |
|---|---|---|
keyword | Keyword and location from the Maps search URL | Does it match the query? |
name | Business or place name | Compare with visible card names. |
rating, review_count | Star rating and review count when exposed | Expect blanks for sparse cards. |
category, price_range, tags | Visible category, price, and labels | Remove irrelevant navigation text. |
address, latitude, longitude | Address and coordinates from detail URLs | Spot-check detail URLs. |
current_status, next_status | Open/closed and next open/close text | Treat as time-sensitive. |
website, telephone, detail_url | Website, phone, and Maps listing URL | Verify before outreach. |
Runbook
How to scrape Google Maps listings by keyword
Import the template
Open Google Maps Listings Scraper by Keywords, download the JSON, and import it.
Edit keyword URLs
In Navigate, replace the default Maps URL with approved searches such as dentist in austin. Add more URLs after one query validates.
Keep the feed waits
Leave the page-load and visible-card waits in place. Increase waits if Maps loads slowly or the buffer stays empty.
Set the export path
Structured Export writes google-maps-scraper-listing-page-by-keyword.csv with headers and append mode. Use a project folder.
Run and inspect
Run one query, then compare CSV names, ratings, addresses, phones, websites, and detail URLs with the browser.
Archive the run context
Save the query, run date, CSV filename, region, language, and selector edits with the export.
Because append mode is enabled, clear old test files or use dated filenames before a production run.
API choice
Places API vs scraping Google Maps results
The official Places API Text Search is the right comparison point for keyword-based place discovery. Its REST method, places.searchText, accepts a text query such as a category and location, then returns matching places according to requested fields and filters.
| Approach | Best fit | Trade-off |
|---|---|---|
| UScraper local desktop workflow | Supervised spreadsheet research, visible browser QA, one-off lead lists, local audits | You maintain waits and selectors when Maps changes. |
| Places API Text Search | Approved API access, documented billing, field masks, attribution rules, production apps | Requires API key management, billing, and policy compliance. |
| Hosted scraper platforms | Cloud scheduling, managed browser infrastructure, API-triggered datasets | Data custody, pricing, and behavior depend on the vendor. |
If you use the official API, read Google's field mask guidance before requesting broad fields. For richer records after discovery, compare the export with the Place Details documentation.
Quality control
Validate the Google Maps CSV export
Open the CSV after the first run. Check the first five rows, one middle row, and the last row. Sort by detail_url for repeats, then filter blank telephone and website cells.
| Symptom | Likely cause | Fix |
|---|---|---|
| Zero rows | Feed did not load, consent blocked the page, verification appeared, or selectors changed | Inspect the browser, resolve prompts, increase waits, and rerun one query. |
| Missing phones or websites | Google Maps did not expose those values on the listing card | Treat fields as optional and enrich only from permitted sources. |
| Duplicate rows | Old append-mode CSV, repeated URL, or cards revisited during scrolling | Clear the file before reruns and dedupe by detail_url plus name. |
| Stale open status | Status is captured at run time | Keep scraped_at and rerun when timing matters. |
FAQ
Google Maps keyword scraping FAQ
Google Maps can show public business information, but automated collection may still be restricted by Google terms, source controls, privacy law, database rights, and local data-use rules. Keep runs modest and avoid bypassing access controls.
Next step
Download the Google Maps listings scraper by keywords
Download the JSON from Google Maps Listings Scraper by Keywords, import it into UScraper, and keep this guide open for the first validation run. For adjacent workflows, browse the UScraper template library or more tutorials in the UScraper blog.

