Google Maps Leads Scraper — unlimited volume, no 120 cap avatar

Google Maps Leads Scraper — unlimited volume, no 120 cap

Pricing

from $1.50 / 1,000 business scrapeds

Go to Apify Store
Google Maps Leads Scraper — unlimited volume, no 120 cap

Google Maps Leads Scraper — unlimited volume, no 120 cap

Google caps every Maps search at ~120 results. This one tiles the search area and subdivides until it has them all - 783 businesses where a single search returns 140. Phone, website, rating, category, full address, coordinates per row. Optional emails and web-platform detection.

Pricing

from $1.50 / 1,000 business scrapeds

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

14

Total users

14

Monthly active users

a day ago

Last modified

Share

Google Maps Leads Scraper

Search Google Maps by keyword and location, and export business leads with phone, website, rating, category, full address, and coordinates.

The thing that makes this different

Google caps every Maps search at roughly 120 results. Search "restaurant" in Manhattan and you get ~120 back, whether 120 exist or 12,000 do. Every Google Maps scraper on the market inherits that ceiling, because it is Google's, not theirs.

Turn on Exhaustive coverage and this actor works around it. The search area is covered with tiles; any tile that comes back at the ceiling is assumed truncated, split into four smaller tiles, and re-searched. Repeat until every tile returns comfortably under the cap.

Measured on a ~6×8 km slice of Manhattan searching "restaurant":

Places foundRequests
Single search (what other Maps scrapers return)14010
Exhaustive coverage, 10-tile budget78383

706 of those 783 are unreachable by any single search, no matter how you page it. That run was still budget-limited with 18 tiles queued, so 783 is a floor, not a ceiling. Cost worked out to 0.11 requests per business.

The same mechanism scales up: point it at a state instead of a neighbourhood and it tiles the state.

Cost control

Tiling costs requests, and cost scales with tiles searched, not places found — a dense metro can subdivide for a long time. Two controls bound it:

  • Tile budget per search — a hard ceiling on tiles per search term × location. When it runs out, the run logs how much of the area went uncovered rather than silently returning partial data.
  • Starting tile radius — larger tiles cost fewer requests but subdivide more. 8 km suits a city; 2–3 km suits a dense downtown.

Leave exhaustive coverage off and you get one search per term/location, at the usual ~120 ceiling and the usual cost.

What you get per business

Every search result already carries the full lead record, so no per-place follow-up request is needed — roughly one HTTP request per 20 leads:

Identity and contactname · phone · phoneRaw · website · websiteDomain · address + split streetAddress/city/state/postalCode/ countryCode · latitude/longitude · neighborhood · timezone

Reputation and profilerating · category + all categories · description (Google's editorial blurb) · highlights ("LGBTQ+ friendly", "Identifies as Latino-owned", …) · additionalInfo (grouped attributes such as Accessibility) · owner · thumbnail

OperationsbusinessHours · currentStatus ("Open · Closes 11 PM") · bookingLinks (OpenTable, Resy, SevenRooms, order-online) · hotel for lodging (star rating, Google's suggested check-in/check-out dates, and partner nightly rates)

KeysfeatureId · cid · placeIdChIJ · knowledgeId · googleMapsUrl · searchKeyword · searchLocation

Two honest limitations

No review count, price range, or popular times. Google's search payload does not contain them. This was verified rather than assumed: review counts were checked against exhaustively-paginated totals for real businesses and matched nothing in the response (the closest values were image dimensions), and no price-band string or hourly-busyness array exists anywhere in the payload. Shipping a plausible-looking wrong number would be worse than omitting the field.

Opening hours cover the upcoming day, not the full week. That is all Google puts in this response.

Optionally, Find emails on each business website visits each business's own site and harvests public contact emails and phone numbers.

Segment by tech stack, rank by quality

Detect web platform fetches each business site once and reports two things separately, because they answer different questions:

  • webHost — what the site is built with (WordPress, Shopify, Wix, Squarespace, Webflow, Ghost, Drupal, Magento, BigCommerce, …)
  • webHosting — where it runs (WP Engine, Kinsta, Vercel, Netlify) or which CDN fronts it (Cloudflare, Fastly, Akamai, CloudFront)

A Shopify store behind Cloudflare reports both, so a filter for either one matches it. Set Only keep these web platforms and non-matching leads are dropped before billing — useful if you're an agency that only sells to one stack.

Score each lead adds a 0–100 leadScore plus leadScoreSignals explaining it. It is computed entirely from fields already on the row, so it costs no extra requests and can't fail. The heaviest weight is on an email at the company's own domain (hello@theirsite.com beats theirshop99@gmail.com), then phone, socials, rating, and a complete address. Every weight is overridable.

Turn on email enrichment alongside it. The email signals are 39 of the 100 points, so scoring without them compresses every lead into a narrow band — on a real run, scores spread 33–85 with emails on versus 33–46 with them off. The actor logs a warning if you enable scoring without enrichment.

Filters (free — filtered rows are never charged)

Minimum rating · has-a-website · web platform · place IDs to skip · search circle (lat/lng/radius) · search polygon (GeoJSON ring).

Geographic filters are applied to coordinates the search already returned, so places outside your circle or polygon are dropped before any billable work. There is no minimum-review-count filter, because the review count itself is not in the payload (see the limitations above).

Input example

{
"searchTerms": ["dentist", "orthodontist"],
"locations": ["Austin, TX"],
"exhaustiveCoverage": true,
"tileRadiusKm": 8,
"maxTilesPerSearch": 40,
"minRating": 4,
"hasWebsite": true,
"maxResults": 5000
}

Every search term is crossed with every location, so the example above runs four searches.

How locations are resolved

Location names are resolved to a centre and a boundary via OpenStreetMap's Nominatim service, which is what makes state- and country-scale tiling possible ("Texas" resolves to a ~1,200 km box). Resolutions are cached in the run's key-value store. If a name cannot be resolved, the actor falls back to locating it through Google itself and covers the fallback radius instead.

Notes

  • Google blocks datacenter traffic quickly; residential proxies are strongly recommended and are the default.
  • No browser is used — this talks to Google's own JSON endpoints over HTTP, which is why it is fast and cheap to run.
  • Non-paying Apify users are capped at 100 places per run.

🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/google-maps-leads-scraper).

Purpose: Search Google Maps by keyword × location and export business leads (phone, website, rating, category, full address, coordinates); exhaustive tiling works past Google's ~120-result-per-search ceiling.

Minimal input:

{
"searchTerms": ["dentist"],
"locations": ["Austin, TX"],
"maxResults": 20
}

To go past Google's ~120-result cap, add "exhaustiveCoverage": true and bound it with "maxTilesPerSearch": 40.

Output: one row per business — name, phone, phoneRaw, website, websiteDomain, address + streetAddress, city, state, postalCode, countryCode, latitude, longitude, neighborhood, timezone, rating, category, categories, description, highlights, additionalInfo, owner, thumbnail, businessHours, currentStatus, bookingLinks, hotel, featureId, cid, placeIdChIJ, knowledgeId, googleMapsUrl, searchKeyword, searchLocation. Optional enrichment adds emails, webHost/webHosting, and leadScore + leadScoreSignals.

Behaviors an agent should know:

  • Every searchTerms entry is crossed with every locations entry; set maxResults (whole run) and maxPlacesPerSearch to cap billing.
  • exhaustiveCoverage splits the area into tiles and subdivides truncated ones; cost scales with tiles searched, not places found — bound it with maxTilesPerSearch and tune tileRadiusKm.
  • Filters are free (filtered rows are never charged): minRating, hasWebsite, webHostFilter, placeIdsToSkip, and geographic searchCircle/searchPolygon (polygon takes precedence, both replace locations).
  • Enrichment costs one request per business with a website: includeWebsiteEmails (emails) and detectWebHost (platform/hosting). enableLeadScoring is free but compresses without emails — enable enrichment alongside it. Use placeIdsToSkip to dedup across runs.
  • Residential proxy is the default and strongly recommended; non-paying Apify users are capped at 100 places per run.
  • Not in Google's payload: review count, price range, popular times; opening hours cover only the upcoming day.
  • Pay-per-event billing — see the Pricing tab on the actor page.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google LLC or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Google Maps business listing data — the same information any visitor sees in a browser — through Google's public endpoints; it does not log in, bypass authentication, or access private or paid features. Business contact details are personal data. You are responsible for ensuring your use complies with Google's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), marketing and anti-spam rules, and any contractual obligations of your own organization.

SEO Keywords

google maps scraper, scrape google maps, google maps leads scraper, google maps business scraper, google places scraper, local business leads, b2b lead generation, business contact scraper, email finder, phone number scraper, lead scoring, google maps data extractor, google maps API, local seo data, business directory scraper, web tech stack detection, WordPress site finder, Shopify store finder, agency lead-gen, restaurant data scraper, Apify google maps