Google Maps 120-result limit: why lists stop
Google Maps list views stop returning places and the official Places API caps Text Search at 60 results. Learn why the ceiling exists and how to split an area into complete coverage.
Google Maps stops returning new places after the first pages Short answer
Google Maps searches return a limited set of places, so scrolling can end while other businesses remain in the area. Split the area into smaller search cells and deduplicate the combined results to improve coverage.
Diagnosis checked 2026-11-12; sources below.Why it happens
Google does not return every place for a broad query: the official Places Text Search stops at 60 results per query across all its pages, so one search over a city cannot list every business. The documented way round is to split the map into smaller search cells and deduplicate. Source: Text Search (New).
Do this now
- If the data is yours or your use fits the official terms, switch to the official route: Google Maps Platform Places API (Public API). SKU-based pay-as-you-go. Place Details Essentials is $5.00 per 1,000 after 10,000 free calls per month at the published first paid tier; other SKUs differ.
- For every place in an area, cell by cell at volume, run a hosted route instead of patching your own requests: Google Maps Grid-Based Market Saturation Scanner. The request below runs it with its published example input through the Apify API (your token, billed at the Store price).
- Compare every route, with fields and prices, on the Google Maps page.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"searchQuery": "coffee shops",
"boundingBox": {
"north": 40.77,
"south": 40.73,
"east": -73.97,
"west": -74.01
},
"radiusKm": 5,
"zoomLevel": 15,
"maxPlacesPerCell": 5,
"maxPagesPerCell": 13,
"maxTotalResults": 5,
"deduplicateResults": True,
"enrichDetails": False,
"language": "en"
}
run = client.actor("dataspryva/google-maps-grid-based-market-saturation-scanner").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"searchQuery": "coffee shops",
"boundingBox": {
"north": 40.77,
"south": 40.73,
"east": -73.97,
"west": -74.01
},
"radiusKm": 5,
"zoomLevel": 15,
"maxPlacesPerCell": 5,
"maxPagesPerCell": 13,
"maxTotalResults": 5,
"deduplicateResults": true,
"enrichDetails": false,
"language": "en"
};
const run = await client.actor("dataspryva/google-maps-grid-based-market-saturation-scanner").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/dataspryva~google-maps-grid-based-market-saturation-scanner/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"searchQuery":"coffee shops","boundingBox":{"north":40.77,"south":40.73,"east":-73.97,"west":-74.01},"radiusKm":5,"zoomLevel":15,"maxPlacesPerCell":5,"maxPagesPerCell":13,"maxTotalResults":5,"deduplicateResults":true,"enrichDetails":false,"language":"en"}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=dataspryva/google-maps-grid-based-market-saturation-scanner",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
Open Google Maps Grid-Based Market Saturation Scanner in Apify Store
Routes that work for Google Maps data
The official route first, then the catalogue Actors that fit this problem (every place in an area, cell by cell), by their published fields. Store figures are the publisher's public numbers.
| Route | Core fields | Price / 1K | Success, 30 days | Link |
|---|---|---|---|---|
| Public APIGoogle Maps Platform Places API | not compared | below | Official docs | |
| Google Maps Grid-Based Market Saturation Scanner | 6/9 | $0.99 | 100% of 25 runs | Open in Apify Store |
| Google Maps Radius Search Around a Coordinate | 8/9 | $0.99 | 6 runs, too few to rate | Open in Apify Store |
Official price: SKU-based pay-as-you-go. Place Details Essentials is $5.00 per 1,000 after 10,000 free calls per month at the published first paid tier; other SKUs differ. Compare all 25 Google Maps routes.
The facts behind the error
| Fact | Value |
|---|---|
| Text Search maximum | 60 results per query across all pages |
| Page size | 1 to 20 results; default 20 |
| Nearby Search maximum | 20 results per request, with no documented pagination |
| Places API free credit | The $200 monthly credit was replaced by per-SKU free caps on March 1, 2025 |
| Coverage strategy | Split the map into smaller search cells and deduplicate |
Understand which limit applies
The Text Search documentation defines a ceiling across all pages of an API query, so pagination eventually ends. That documented ceiling applies to Places API Text Search; assess Google Maps browser list behavior separately.
Build coverage across smaller areas
Divide the target area into smaller search cells, collect each cell’s results, and deduplicate places that appear in overlapping searches. Crowded cells may need further subdivision because each search still has a result ceiling.
When to stop fighting the error
Stop patching the scroll loop once the current search stops yielding new places. Move to a collector or Places API process that searches smaller geographic cells, handles the available pagination, and deduplicates the combined results.
Website pages
Questions people ask
Will more scrolling reveal every place?
Scrolling can exhaust the results available for the current query. Continue discovery through smaller geographic searches instead of relying on the same list.
Can Places API pagination remove the ceiling?
Text Search limits the combined results across all pages. Following every available page completes that query’s result set, so broader coverage requires additional searches.
Is Nearby Search an unlimited alternative?
Nearby Search has a per-request result maximum and no documented pagination. Plan smaller geographic requests and deduplicate their results.
Does a search grid guarantee a complete business list?
A grid improves geographic coverage, but individual cells can still reach their result ceilings. Subdivide crowded cells and review coverage before describing a collection as exhaustive.
Sources
Every dated claim on this page comes from the public sources below. Check the source before you make a business decision on it.
- Text Search (New) — checked 2026-11-09
- Google Maps Platform pricing — checked 2026-11-09
- March 2025 billing change — checked 2026-11-09
Get Google Maps data with a catalogue Actor
Google Maps Review & Contributor Activity Scraper returns 9 of 9 core Google Maps fields at $0.99 per 1,000 results. Compare all 25 Google Maps routes.