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

  1. 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.
  2. 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).
  3. 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.

Routes for Google Maps data
RouteCore fieldsPrice / 1KSuccess, 30 daysLink
Public APIGoogle Maps Platform Places APInot comparedbelowOfficial docs
Google Maps Grid-Based Market Saturation Scanner6/9$0.99100% of 25 runsOpen in Apify Store
Google Maps Radius Search Around a Coordinate8/9$0.996 runs, too few to rateOpen 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

FactValue
Text Search maximum60 results per query across all pages
Page size1 to 20 results; default 20
Nearby Search maximum20 results per request, with no documented pagination
Places API free creditThe $200 monthly credit was replaced by per-SKU free caps on March 1, 2025
Coverage strategySplit 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.

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.

Content updated 2026-11-12Data checked 2026-11-12

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.

Open in Apify Store