Google Maps limits every search to 120 results. Scroll to the bottom of any city search and you’ll see the same message: “You’ve reached the end of the list.”
For a quick lookup, that’s fine. For any team building a lead list, mapping a market, or running competitive research across a city or country, it’s a real obstacle.
This guide covers everything you need to know about scraping Google Maps in 2026. Why the 120-result limit exists, how Octoparse uses maps splitting bypasses it, which method fits your situation, and how to get from keyword to usable dataset, with or without code.
Scraping Google Maps: Quick Answers
| Question | Answer |
| What is the Google Maps 120-result limit? | Google Maps shows a maximum of 120 places per search viewport, by design |
| How does maps splitting bypass it? | Divides the target area into smaller grid cells, runs one search per cell, combines results |
| What data fields of Google Maps can you extract? | Name, address, phone, website, rating, reviews, hours, coordinates, popular times, and more |
| What’s the fastest no-code method? | Octoparse Google Maps Scraper template, runs in the cloud, no setup required |
Ready to try it? Run your first Google Maps scrape with the Octoparse template below. No code, no setup, results in minutes.
https://www.octoparse.com/template/google-maps-advanced-scraper
Why Scrape Google Maps (And Why It’s Harder Than It Looks)
Google Maps holds over 200 million businesses and places around the world, updated continuously by business owners, Google’s own crawlers, and user contributions. For sales teams, marketing agencies, and market researchers, it’s the closest thing to a real-time global business directory.
What data is available on Google Maps
Every Google Maps listing contains two layers of data:
Listing layer (visible in search results):
| Field | Example |
| Business name | Blue Bottle Coffee |
| Category | Coffee shop |
| Rating | 4.6 stars |
| Review count | 1,842 |
| Address | 300 Webster St, Oakland, CA |
| Coordinates | 37.8044, -122.2712 |
| Price range | $$ |
| Current status | Open / Closed |
Detail layer (requires visiting the individual business page):
| Field | Example |
| Phone number | +1 510-653-3394 |
| Website URL | bluebottlecoffee.com |
| Opening hours (per day) | Mon–Fri 7 AM–5 PM |
| Popular times (hourly %) | Monday 12 PM: 78% busy |
| Plus Code | CRHM+QG Oakland |
| Delivery / service tags | Takeout, Dine-in, Delivery |
| Place ID | ChIJN1t_tDeuEmsRUsoyG83frY4 |
The detail layer is where most business value lives: phone numbers for outreach, opening hours for operational context, popular times as a foot-traffic proxy, for instance. Not all tools reach this layer. Many stop at the listing. Apify’s Google Maps Scraper, for example, doesn’t visit detail pages by default — it’s fast because it’s only pulling listing-layer data unless you turn detail scraping on.
Who Uses Google Maps Data and What They Do With It
1. Sales & Lead Generation
Sales and lead generation teams scrape Google Maps to build targeted prospect lists by industry, city, and rating threshold, then enrich with phone numbers and websites for direct outreach.
One marketing agency built their entire outbound operation on daily Octoparse Google Maps scrapes across Spain. Their sales operations team flags new businesses within 15 days of their first appearance on Google Maps, before competitors reach them. With 30 remote reps working from segmented lead lists, they turned real-time data into a consistent first-mover advantage in a crowded market.
For a deeper look, see our Google Maps lead generation guide.
2. Research & Intelligence
Market research and competitive intelligence teams map competitor locations, review volume, and rating distributions before entering a new market.
Rating and review count together are a useful signal of how competitive a market already is: a neighborhood packed with highly-rated, heavily-reviewed listings is likely saturated, while one with few reviews and modest ratings may still have room for a new entrant.
3. Real Estate & Site Selection
Real estate and site selection professionals use Google Maps data as a first-pass market map, checking category density per area, competitor proximity, and rating distribution before committing to a lease.
Popular times data serves as a foot-traffic proxy without commissioning a study. Coordinate-level data also enables precise proximity analysis.
See our guide on how to extract Google Maps coordinates for location-specific workflows.
4. Database & Directory Building
Local business database builders re-run the same template on a daily, weekly, or monthly schedule to maintain a continuously refreshed data asset.
Each run picks up new businesses, catches closures, and logs rating changes, which is useful for vertical directories, local SEO agencies, and SaaS platforms serving SMBs. Once you have the data, you can export Google Maps results to Excel or push directly to your CRM or database.
3 Reasons Standard Google Maps Searches Fall Short
Google Maps is built for human browsing, not bulk data export. No matter how large your search radius, every viewport caps at 120 results. Here’s why that’s a real problem in practice:
1. 120 results is a sample, not a complete picture
A city can have thousands of businesses in your target category. A single search returns 120 of them. For lead generation or market research, that’s a partial list — and partial lists produce incomplete outputs.
2. Dense areas are the hardest to cover
The more businesses packed into a district, the more a standard search misses. Results overlap, the viewport gets crowded, and Google tends to surface the same popular listings repeatedly. Scrolling through the panel does not help. You are still looking at the same capped set.

3. Complex geographies break simple grid approaches
Coastal cities, island chains, and multi-district metro areas waste a large share of search points on ocean or uninhabited land. A rectangular bounding box over Tokyo or Jakarta will burn budget on water.

The official Google Places API also has per-query limits, though they differ from the Google Maps web UI: Text Search (New) returns up to 60 results across all pages, Nearby Search (Legacy) tops out at 60, and Nearby Search (New) allows only 1-20 results per request via maxResultCount. Either way, city-scale or country-scale collection means firing off hundreds of requests. For context, New York City alone has over 29,000 restaurants.
The only systematic fix is to stop thinking about one search and start thinking about many targeted searches across smaller areas. That’s what maps splitting does, and it’s the core technology behind the Octoparse Google Maps Scraper.
For a full cost and field comparison, see our Google Places API vs. Scraping guide.
Scraping Google Maps at Scale with Octoparse
Octoparse is a cloud-based web scraping platform with pre-built Google Maps templates that handle the entire pipeline from maps splitting to deduplication to export, without any code.
Maps splitting is the systematic answer to all three problems above. Here’s how Octoparse implements it and how you can run your first city-scale scrape in minutes.
Using the Google Maps Scraper template
Octoparse Google Maps Scraper takes two required inputs: a search term (up to 10,000 keywords in a single run) and a location. You can also set an optional cap on the number of places to extract per keyword, and toggle Q&A collection on or off.
From those inputs, the template returns a structured dataset covering both the listing layer and the detail layer:
Google Maps Scraper output fields
| Purpose | Fields |
| Business identification | Title, Category, Address, City, State, Country, Latitude, Longitude, Place ID, Google ID, Page URL |
| Contact & outreach | Phone, Website, Plus Code |
| Qualification & scoring | Rating, Review Count, Price Range, Current Status, Delivery tags, Additional info |
| Operational intelligence | Opening hours (per day of week), Popular times (per day), Description |
| Visual reference | Main image, Image 1–3 |
Whether you’re building a lead list, mapping a market, or researching competitors, the output is ready to filter, sort, and export without any cleaning.
Template pricing: $2 per 1,000 records, billed per result. So you don’t need a recurring subscription to keep using the template. Pricing reflects built-in place_id deduplication. Results are cleaned before delivery, so you’re not paying for duplicate records.
The fastest path to get started from keyword to dataset:
- Search the Octoparse Google Maps Scraper template at Octoparse Desktop or template library. Or you can click the template card below to have a try:

https://www.octoparse.com/template/google-maps-advanced-scraper
- Enter your search keyword (e.g. “dental clinic”) and target location (e.g. “Germany”)
- Set the number of places to extract per keyword (optional; leave blank to collect all available results)
- Click Run. The task executes on Octoparse’s cloud servers, so you don’t need to keep your computer on
- Export as CSV, Excel, JSON, or push directly to Google Sheets. Here is the data I exported. How easy it is!

The template automatically handles AJAX loading, infinite scroll, and Google’s anti-bot measures. You get both listing-layer and detail-layer fields in a single output.
How Octoparse’s Google Maps Scraper uses maps splitting to bypass the 120-result limit
Standard scraping hits 120 results and stops. Octoparse’s Google Maps Scraper uses maps splitting, a multi-step geographic decomposition algorithm, to systematically cover an entire area.
Here’s what happens when you run a country-level or city-level scrape:
Step 1: Get the exact boundary of your target area
Instead of a rectangular bounding box, the algorithm fetches the actual administrative boundary of the target area (a polygon or MultiPolygon for complex regions like island chains or coastal cities). Tokyo, Jakarta, and New York’s five boroughs all have irregular shapes that a rectangle would handle badly, wasting search points on ocean or uninhabited areas.

Step 2: Remove ocean and uninhabited areas
Before cutting the grid, the algorithm overlaps the target boundary with land data. Ocean zones get removed. Offshore islands that may contain businesses are kept.
This matters for two reasons. First, it stops the scraper from sending requests into water where no businesses exist. Second, it puts more coverage where businesses actually are.
Coastal and archipelago cities like Tokyo, Hong Kong, China, and Jakarta benefit most from this step. Their boundaries include scattered islands and irregular coastlines. A simple rectangular box would cover large areas of ocean, wasting requests and missing businesses on smaller islands.

Step 3: Divide the area into a search grid
Once the land area is defined, the algorithm cuts it into a grid of smaller cells. Each cell becomes one independent search.
Cell size is not fixed. Busy city centers get smaller cells so more searches run in a concentrated area. Sparse suburbs and rural edges get larger cells to avoid running too many searches where few businesses exist.
This means the scraper spends more effort where there are more businesses, and less where there are few.
Step 4: Assign a zoom level to each grid cell
Each cell gets a zoom level between 14 and 17. Cells in dense areas get a higher zoom so more pins are visible. Cells in sparse areas get a lower zoom to cover more ground per search. The zoom level is calculated based on the cell’s distance from the city center, estimated business density, local population density, and cell size.

Step 5: Turn each cell into a Google Maps search
Each cell is converted into a Google Maps search URL using its exact coordinates: @lat,lon,zoomz. All URLs run in parallel, so hundreds of searches happen at the same time instead of one after another.
This shifts the question from:
“How do I get more results from one search?”
to:
“How do I search a city in smaller sections and combine the results?”
For example, a single search for coffee shops in Tokyo looks like this:
https://www.google.com/maps/search/coffee/@35.6884274,139.6813785,14775m
With maps splitting, that same search becomes five separate URLs, each covering a different section of the city:
https://www.google.com/maps/search/coffee/@35.6884274,139.6813785,14775mhttps://www.google.com/maps/search/coffee/@35.6306112,139.6936841,14775mhttps://www.google.com/maps/search/coffee/@35.7607862,139.3147604,14775mhttps://www.google.com/maps/search/coffee/@35.7898614,139.2588329,14775mhttps://www.google.com/maps/search/coffee/@35.5445786,139.7687058,14775m
A full city-scale scrape generates hundreds or thousands of URLs like these, all running at the same time.
Step 6: Collect listing data, then enrich with details
Most tools stop at the listing layer. But for sales, market research, or building a local business database, knowing a business exists is not enough. You need a phone number to call, opening hours to plan around, and a website to research before you reach out.
Collection runs in two passes:
- Listing layer: name, rating, review count, category, address, coordinates
- Detail layer: phone number, opening hours, images, description, price range, Plus Code, popular times, delivery information
The first pass sweeps across all search URLs quickly. The second pass visits individual business pages to fill in the detail layer for selected records.
You may also be interested in: 5 Best Google Image Scraper
Step 7: Remove duplicate results
Neighboring grid cells overlap slightly, so the same business can show up in more than one cell. The scraper deduplicates by place_id, a unique identifier Google assigns to every business. Each business appears exactly once in the final output.

Real test data: what maps splitting produces
We ran the Octoparse Google Maps Advanced Scraper across three geographic scenarios:
Real test data across three geographic scenarios
| Poland (furniture stores) | New York (restaurants) | UK (e-bike shops) | |
| Scope | Country level, 3 synonym keywords | Full city | Country level, 4 synonym keywords |
| Total collected | 19,812 | 9,036 | 7,189 |
Note on Poland data: one keyword was entered with a trailing space, and several sub-tasks stopped early due to a data-collection issue identified during testing. The actual coverage for a clean run of the same parameters is higher.
📑On the duplicate data question:
When you search with synonym keywords like “restaurant,” “bistro,” and “eatery,” Google Maps can return the same business for all three terms. That means your raw output will contain duplicates before any cleaning happens.
This is not a bug. It happens with every Google Maps scraper because it is how Google Maps search works.
Octoparse handles this by deduplicating on place_id, the unique identifier Google assigns to every business. The Poland test ran three synonym keywords across an entire country and confirmed 0 duplicates in a 20,110-record sample.
The other thing you can do on your end: use keywords that do not overlap. “Coffee shop” and “café” will return many of the same places. “Coffee shop” and “coworking space” will not. Keep in mind that entering many overlapping synonyms also slows down your scrape since more keywords mean more search cycles and more results to deduplicate.
Custom workflows for non-standard needs
The pre-built template covers most Google Maps scraping needs. When it doesn’t fit your needs (you need fields the template doesn’t include, or want to scrape a specific URL with custom filters), Octoparse’s visual workflow builder lets you build a custom scraper by clicking on the page elements you want. No code required.
Keep in mind that a custom workflow built this way is still a single Google Maps search and can hit the same 120-result cap per query. It doesn’t get maps splitting automatically. If you need fields the main template doesn’t cover, it’s usually faster to ask Octoparse to add them (as a template update or add-on) than to rebuild maps splitting yourself.
The key steps to build a custom Google Maps scraper in Octoparse:
- Create a new task in Octoparse and paste your Google Maps search URL
- Set up scroll pagination so the scraper loads all visible results before extracting
- Add a loop that clicks into each individual listing to collect detail-layer fields like phone numbers and opening hours
- Click on the page elements you want to extract to define your data fields
- Refine XPaths for dynamic elements like opening hours dropdowns to make sure the full schedule is captured
- Configure the scraper to return to the main results list after each listing visit, so it continues through all results
📖 Watch the Octoparse Google Maps custom scraper tutorial for a full walkthrough (10 minutes):
Scraping Google Maps with Octoparse MCP
If you work inside an AI client like Claude or ChatGPT, Octoparse’s MCP (Model Context Protocol) integration lets you trigger Google Maps scrapes from a simple chat prompt, with no need to open the Octoparse interface.
Setup:
- Pick your AI client and follow the setup guide for it: Claude, ChatGPT, Cursor, etc. For instance, if you pick Claude, add
https://mcp.octoparse.comas a custom connector in Claude Desktop, authorize with your Octoparse account and enable it. About 3 minutes, no config files. - Example prompt: Once connected, type something like:
Scrape Google Maps for restaurants in Los Angeles using the Google Maps Scraper template. Use these search keywords: “restaurants Los Angeles CA”, “fine dining Los Angeles CA”, “casual dining Los Angeles CA”. Set the number of places to extract per search term to 300. Export up to 500 results.
Once run, Claude should identify the right template, create the task, execute the scrape, and return structured data directly in the conversation.
For a full workflow walkthrough including lead enrichment and review collection, see our Google Maps Lead Generation with Octoparse MCP guide.
Other Google Maps Scraping Methods: Python, Scraping APIs, and Browser Extensions
Scraping Google Maps with Python
For developers who want control over the extraction logic, Python is viable for small to medium-scale scraping. Playwright is the preferred library in 2026. It’s faster than Selenium, with better async support and more resilient against Google’s bot detection.
A minimal example on Google Maps scraping with Python:
Where Python falls short at scale:
Getting past 120 results requires implementing maps splitting yourself: generating coordinate grids, managing seed URLs, rotating proxies, and handling deduplication. That’s a serious engineering project, not a weekend script.
Google’s anti-bot systems detect behavioral patterns: fixed timing intervals, mathematical scroll speeds, repeated requests from the same IP. Without residential proxy rotation and randomized behavior, most scrapers get rate-limited within a few hundred requests.
Python is best for: small-batch tests under 500 records, learning, integrating scraping into existing Python pipelines where you manage your own infrastructure.
Scraping APIs
SerpApi and ScraperAPI handle infrastructure for you (proxies, rendering, CAPTCHA) and return structured JSON. They work well for real-time single-record lookups: enriching a CRM record, checking current hours for a specific business, or building a lightweight live integration.
Where scraping APIs falls short:
The tradeoff is that most don’t include maps splitting, so you still hit the 120-result ceiling per query. Cost typically runs $3-10+ per 1,000 records at scale.
Best for: real-time single-record lookups, developer integrations that need JSON responses without managing browser infrastructure.
Browser extensions
Instant Data Scraper, G Maps Extractor, and similar tools pull results from whatever is currently visible in your browser. Free, no setup, and useful for quick tasks under 100 records.
Where browser extensions fall short:
The ceiling is the viewport itself. No extension can bypass the 120-result limit because there’s no maps splitting happening. What you see is what you get.
Best for: one-off exports of a specific search result, testing what data is available before committing to a full scrape. For anything under 500 records, the Octoparse Google Maps Scraper template also works well and adds the detail layer these tools can’t reach.
Quick comparison
| Octoparse | Python (Playwright) | Scraping API | Browser Extension | |
| Bypasses 120-result limit | Yes (maps splitting) | Only with custom code | No | No |
| No-code | Yes | No | Partial | Yes |
| City / country scale | Yes | With significant effort | No | No |
| Detail layer (phone, hours) | Yes | Yes | Varies | No |
| Popular times | Yes | Yes (complex) | Rarely | No |
| Scheduling / automation | Yes | Self-managed | Varies | No |
| Per-result template price | $2 / 1,000 | Infrastructure cost | $3-10+ / 1,000 | Free (120-result cap) |
| Setup time | Minutes | Days | Hours | Minutes |
If you are looking for more Google Maps scraper tools, check our honest comparison on Google Maps extractors.
Octoparse vs. Apify vs. Outscraper
| Octoparse | Apify | Outscraper | |
| Maps splitting | Automatic (polygon + land masking + adaptive grid) | More developer/config-driven than Octoparse | ZIP-code grid, manual selection |
| No-code option | Yes (visual template) | Yes (no-code Actor config, though many output fields to sift through) | Yes (web UI) |
| Detail enrichment | Phone, hours, popular times (social/email via a separate Contact Details Scraper) | Available as paid add-ons | Available via “lead packs” |
| Cloud execution | Yes | Yes | Yes |
| MCP integration | Yes (3-min setup, no config files) | Yes (hosted OAuth via Apify MCP) | No |
| Per-result template price | $2/ 1,000 | $1.50-$4.00 / 1,000 (tiered by plan) | $3.00 / 1,000 ($1.00 after 100K) |
| Free tier | 2000 export records for new users to try Octoparse MCP | $5/month credits | 500 places/month |
| Best for | Complex geographies, team reuse, non-technical users | Developer-focused custom workflows | Quick one-off exports |
Pricing reflects per-result template billing as of June 2026, based on published rates. Apify and Outscraper also offer subscription plans with different unit economics at volume. Apify uses plan-based tiered pricing: for its Google Maps Scraper Actor, scraped-place pricing ranges from $4.00/1K on the Free plan to $1.50/1K on Business, and add-ons such as filters, additional place details, contacts, email verification, social profiles, and reviews are billed separately.
For a deeper feature comparison including test results and edge cases, see our Apify vs. Octoparse: Google Maps Scraper Comparison.
Which Google Maps Scraping Method Should You Use?
| Situation | Best method |
| City or country-level collection, no coding | Octoparse template |
| Specific fields not in the template | Octoparse custom workflow |
| AI-first workflow (Claude, ChatGPT) | Octoparse MCP |
| Small test run under 500 records | Octoparse template like Google Maps Scraper, Python, or browser extension |
| Real-time single-record enrichment | Scraping API |
| Quick one-off, 120 results is enough | Browser extension |
| Developer building a custom pipeline | Python + Octoparse API |
The right choice depends on three factors: how much data you need, your budget (Octoparse’s template scales from small tests to city-wide runs with an optional per-keyword record cap, so it isn’t only for large budgets), and whether you have technical resources.
For most teams, the template handles 92% of use cases. The custom workflow and MCP paths cover the rest without requiring any code.
Is Scraping Google Maps Legal?
Public-data scraping has favorable precedent under US federal computer law in some cases, but Google Maps’ Terms of Service still prohibit scraping, and legal risk depends on your jurisdiction and use case. (This is general information, not legal advice. Talk to a lawyer if scraping is core to your business.)
1. US courts have ruled that scraping public data is not hacking
The hiQ Labs v. LinkedIn case (9th Circuit, 2022) established that scraping data visible to any browser user does not violate the Computer Fraud and Abuse Act (CFAA). The Van Buren v. United States decision (Supreme Court, 2021) reinforced this: the CFAA applies to systems that require login credentials, not to publicly visible pages. Google Maps business listings require no login or account. Under these rulings, they are public data.
2. Google’s ToS prohibits scraping
Section 3.2.3 of the Google Maps Platform Terms of Service explicitly prohibits exporting, extracting, or scraping Google Maps content for use outside the service, including copying and storing business names, addresses, and user reviews. Violating ToS is a contractual matter, not a criminal one, but it’s a real restriction, not a technicality. The real risk is IP blocking or account suspension, not prosecution.
3. How to reduce risk in practice
- Use a cloud-based scraper like Octoparse. Your personal IP is never used for scraping
- Scrape at reasonable rates to avoid triggering Google’s anti-bot systems
- Stick to publicly visible business data and avoid collecting personal data about individuals
- For EU operations: generic company information (business name, category, public address) is generally treated as non-personal commercial data, but named employee contact details like a specific person’s business email or direct phone number, can still count as personal data under GDPR (European Commission guidance, ICO guidance). Collect only what you need for a specific purpose, and treat named-contact fields with the same care as any other personal data.
FAQs about Google Maps Scraping
- How do I get more than 120 results from Google Maps?
Use the Octoparse Google Maps Scraper template, which implements geographic area splitting (maps splitting) automatically. The tool divides your target area into a grid of smaller cells, runs a separate search in each one, and combines results. Each cell can return up to 120 records. For a city like New York, this means hundreds of individual searches running in parallel, producing thousands of unique business records from a single keyword.
- What is the difference between the Google Maps API and scraping?
The Google Places API provides structured JSON responses and is designed for live app integration: real-time single-record lookups, displaying results on maps, and developer workflows. It imposes per-query result limits that make city-scale bulk collection impractical, and charges per request at scale. Scraping reads the same public data shown in the browser, is better suited for bulk export and market research, and costs significantly less per record at volume. For 250,000 records, Octoparse is roughly 2x cheaper than Google Places API for basic fields, and can be 7-10x cheaper when richer lead fields such as phone, website, hours, ratings, or reviews are included. The right choice depends on your use case.
- How accurate is the location data?
Location accuracy depends on the precision level you target. Octoparse’s Google Maps Scraper filters results at the State level by default. This is reliable and consistent across all test runs. For sub-state precision (county, city district, ZIP code), accuracy varies because Google Maps itself can return results slightly outside a specified boundary. Our New York test returned 93.8% city-accurate results from a city-level query, with 6.2% falling in adjacent areas within New York State. If county-level precision is critical for your use case, inputting more granular location terms (specific ZIP codes, neighborhood names) alongside State filtering improves accuracy. This is a known behavior across all Google Maps scrapers. None can override Google’s own result ranking logic.
- What data can I export from Google Maps?
From the listing layer: business name, category, address, coordinates, rating, review count, price range, current status, Place ID, Google ID. From the detail layer: phone number, website, opening hours per day, popular times (hourly breakdown), Plus Code, delivery and service tags, and description. Email addresses and social profiles are not on Google Maps directly. You can get them by feeding the business website URLs from your Google Maps results into Octoparse’s Contact Details Scraper, which isn’t billed per record.
https://www.octoparse.com/template/contact-details-scraper
- Is there a free option for scraping Google Maps?
Yes, with limitations. Browser extensions are free but cap at 120 results. Octoparse’s Free Plan provides 10 tasks and local execution at no cost, good for testing. Outscraper offers 500 places/month free. For city-scale or country-scale collection, a paid option is necessary.
- Can I scrape Google Maps reviews?
Yes, but through a separate template. Octoparse’s Google Maps Scraper and Leads Scraper return review count and rating as part of the detail layer; getting individual review text, reviewer names, and dates requires Octoparse’s dedicated Google Maps Reviews Scraper. Because it means visiting each business’s reviews individually, bulk review collection takes noticeably longer than listing-only scrapes.
https://www.octoparse.com/template/google-maps-review-scraper-cloud
Conclusion
The 120-result ceiling isn’t a bug you can script around. It’s how Google Maps is built. The only way to collect at city or country scale is to run many smaller searches across a divided area. That’s what maps splitting does.
If you need a one-off small batch, Python or a browser extension works fine. If you’re building something repeatable (lead lists, market maps, competitive monitoring), a no-code template gets you there without the infrastructure overhead.




