This tutorial shows how to scrape Google Maps data into CSV with the Google Maps Scraper template for UScraper. You will edit the search URL, run the bounded scroll workflow, export local business listings, validate the file, and decide when the official Places API is the better path.
Before you start
Prerequisites and policy checks
You need UScraper installed as a local desktop app, the Google Maps Scraper template, one Google Maps keyword/location search you are allowed to process, and a folder for CSV exports. Start with one narrow query like dentists in Austin or coffee shops near Soho. The first run is for validation, not scale.
This guide covers visible Google Maps search-result cards. It is not a CAPTCHA bypass guide, login automation guide, or legal opinion. Before collecting, storing, enriching, or reusing Maps data, review the current Google Maps Platform terms and compare your use case with the official Places API documentation.
Technical access is not permission. Keep runs modest, stop when verification appears, document the source query, and get legal review before commercial reuse, outreach, resale, or redistribution.
Workflow anatomy
What the Google Maps scraper workflow does
The JSON export is the authoritative workflow definition. In plain English, the flow is:
Navigate -> Wait for Page Load -> optional consent Click
-> Wait for result feed -> Scroll and pause five times
-> Structured Export -> End
The Navigate block opens a normal Google Maps search URL. The wait blocks give the dynamic results feed time to render. The scroll blocks load more result cards without depending on end-of-list text, which can vary by language, session, and layout. Structured Export then reads each loaded card and writes one CSV row per visible listing.
| Export column | What it captures | Validation check |
|---|---|---|
business_name | Visible name from the result card | Compare against the card headline. |
rating, review_count | Star rating and review count when shown | Expect blanks for new or sparse listings. |
category | Primary category parsed from card text | Remove irrelevant address or status text. |
address | Street address when exposed | Spot-check against the visible card. |
phone, website | Contact fields when Maps exposes them | Treat both as optional in search results. |
place_url | Google Maps place link | Use for dedupe and manual follow-up. |
status_hours | Open, closed, opens, closes, or 24-hour text | Treat as time-sensitive. |
email, listing_text | Visible email if present and full card text | Use for troubleshooting, not guaranteed coverage. |
Runbook
How to scrape Google Maps data to CSV
Import the template
Open Google Maps Scraper, download the hosted JSON, and import it into UScraper.
Edit the search URL
In Navigate, replace https://www.google.com/maps/search/restaurants+in+New+York/ with your approved keyword and location.
Handle prompts first
Let the workflow click common consent buttons when present. If Google shows verification, stop and resolve the compliance or access issue manually.
Keep bounded scrolling
Leave the five scroll-and-pause passes in place for the first run. Increase waits only after you see slow feed loading in the browser.
Confirm the export path
Structured Export writes google-maps-scraper.csv with headers. Change the save folder before client, city, or campaign runs.
Run and inspect
Run one query, open the CSV, and compare names, ratings, addresses, phone coverage, websites, and place URLs against the browser.
Because the template writes a local CSV, clear old test files or use dated filenames before repeat runs. Otherwise, a new validation run can appear to contain duplicates from a previous append.
Output
Export shape for google-maps-scraper.csv
The workflow is designed for local business research, not a complete company database. Search-result cards are compact, so the output is best treated as a first-pass dataset for review, dedupe, and follow-up enrichment.
google-maps-scraper.csvColumn
business_name
Business or place name from the visible card.
Column
rating
Star rating text when Maps shows one.
Column
review_count
Visible review count beside the rating.
Column
category
Primary category parsed from card text.
Column
address
Street address when exposed in search results.
Column
phone
Phone number detected from visible text.
Column
website
Business website URL when a website link is visible.
Column
place_url
Google Maps place URL for dedupe and manual review.
Column
status_hours
Open or closed status captured at run time.
Column
Visible email if one appears in the loaded card text.
Column
listing_text
Full visible card text for troubleshooting.
API choice
Google Places API vs scraper workflow
Searches for google places api vs scraper usually come from the same question: do you need a governed integration or a supervised spreadsheet export? The official Places API Text Search is the right comparison point for keyword discovery. The Place Details documentation is the follow-up when you need richer records for known places.
| Approach | Best fit | Trade-off |
|---|---|---|
| UScraper local desktop workflow | Analyst-led CSV exports, visible browser QA, one-off local market research | Selectors and waits may need maintenance when Maps changes. |
| Places API | Production apps, approved API access, field masks, billing controls, and governed display or storage | Requires API key management, billing, and policy compliance. |
| Google Maps scraper GitHub projects | Engineering teams that want code ownership and custom storage | You own infrastructure, browser behavior, retries, and parser maintenance. |
| Hosted scraper platforms | Cloud scheduling, managed browser infrastructure, and API-triggered datasets | Data custody, pricing, and limits depend on the vendor. |
If you are building an application that displays Google-sourced place data to users, the API route is usually easier to defend. If you are reviewing a visible Maps result page and need a modest local CSV for internal analysis, UScraper keeps the run inspectable without writing a Python scraper.
Quality control
Validate the export before using the data
Open the CSV after the first run and inspect at least the first five rows plus one row near the bottom. Sort by place_url for duplicates, filter blank phone and website cells, and compare several rows against the browser tab that produced them.
| 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 phone or website | Google Maps did not expose those fields in the search-result card | Treat those fields as optional and enrich only from permitted sources. |
| Duplicate listings | Old append-mode CSV, repeated query URL, or cards revisited during scrolling | Clear the test file and dedupe by place_url plus business_name. |
| Category looks like an address | The detail line changed shape for that locale | Adjust the parsing rule after checking live card text. |
| Status looks stale | Open or closed text was captured at run time | Keep the run date and rerun when hours matter. |
FAQ
Google Maps 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, copyright, and local data-use rules. Review current policies, keep runs modest, avoid bypassing access controls, and get legal review before commercial use.
Next step
Download the workflow and run a one-query test
Start with the Google Maps Scraper template, run one narrow search, and validate the CSV before adding more queries. For adjacent workflows, browse the UScraper template library or read more tutorials in the UScraper blog.

