All articles

How to scrape Google Maps without code, with Python or with an API (4 methods compared)

Four ways to get business data out of Google Maps, step by step: a no-code extension, Python and the Places API, a scraping API, and a lead tool, with costs.

The Leadraft teamLeadraft
Published
Updated
Read time
12 min
Category
Guide

There are four practical ways to scrape Google Maps: a no-code browser extension, your own code (Python), a ready-made scraping API, or a lead tool that also finds and verifies emails. The extension is fastest for a few hundred rows. Code gives you control but you inherit blocking, the per-search result cap and maintenance. A scraping API removes the blocking problem. A lead tool such as Leadraft (which we make) is the shortest path if the goal is a list of local businesses you can email. Whichever method you use, one search stops at about 120 results, so covering a whole city means searching it in tiles.

Last checked: November 3, 2026. Prices and API limits below come from the linked vendor and Google pages on the dates in the Sources.

Before you start, two facts apply to every method. First, Google's terms prohibit scraping Google Maps, so read our honest legal guide before you run anything at scale. Second, Google Maps listings have no email field. Any method that ends with emails has to visit each business's website.

How do the four methods compare?#

Scroll horizontally if needed →

1. No-code extension2. Python (your code)3. Scraping API4. Lead tool
Skill neededNoneDeveloperLight coding or noneNone
Setup timeMinutesDaysAn hourMinutes
Results per searchAbout 120 (what you scroll)60 per query via Places API; about 120 via browserVendor handles paging; some tile for youTiles for you
Covers a whole cityOnly by hand, area by areaIf you build tilingSome do, checkYes, if it tiles
EmailsRarelyBuild it yourselfUsually an add-onUsually included
Email verificationNoBuild it or buy itAdd-onIncluded in some
Blocking riskYour browser and IPHigh for browser code; none for the APIThe vendor's problemThe vendor's problem
MaintenanceVendor updates the extensionYou fix it when Google changesVendorVendor
Typical costFree to about $39/monthAPI fees or proxies, plus your timeAbout $1.50 to $3 per 1,000 rows (as of Oct 2026)Subscription

Method 1: How do I scrape Google Maps without code?#

Use a browser extension or a hosted no-code tool: search in Google Maps, let the tool read the results panel, and export a CSV. It works for one-off lists of a few hundred businesses.

  1. Install an extension that reads Google Maps results. Generic table scrapers such as Instant Data Scraper work on the results list; Maps-specific extensions such as G Maps Extractor are built around listing fields.
  2. Search the way a customer would: "plumber in Tulsa, OK". Zoom the map to the area you care about first, since results follow the map view.
  3. Scroll the results panel to the end. Most extensions only capture what the panel loads. The list ends at around 120 results.
  4. Export to CSV, then open it in Excel or Google Sheets.
  5. Repeat for each neighborhood or ZIP code and each keyword variant ("plumbing contractor", "drain cleaning service"), then merge the files and remove duplicates. Our guide to exporting Google Maps to Excel and Sheets has the cleanup formulas.

Where it breaks: the work runs in your browser on your IP, so large runs get slow and can trigger Google's rate limits or CAPTCHAs. You get what's on the listing, so no emails unless the tool crawls websites. And covering a city means doing steps 2 to 5 dozens of times.

Method 2: How do I scrape Google Maps with Python?#

There are two routes. You can automate a real browser (Playwright or Selenium) to search Maps, scroll and parse each listing. Or you can call Google's official Places API, which returns structured JSON for a fee. The browser route is what most tutorials show. The API route is the one that keeps working.

The browser-automation route, and its problems#

The approach is simple to describe: open google.com/maps, type a query, scroll the results feed until it stops loading, open each listing, read the fields, save rows. In practice you take on three problems.

  • Blocking. At volume, Google serves CAPTCHAs and blocks. Getting past that means rotating residential proxies, pacing requests and handling consent screens per country. Many scraping tutorials are published by proxy vendors for this reason.
  • The result cap. Scrolling stops at about 120 results per search, so you also have to build tiling: split the area into a grid, search each cell at a tight zoom, subdivide dense cells, and dedupe by place ID.
One Google Maps search versus a tiled search of the same areaLeft: a single search returns results bunched around the middle of the area and stops. Right: the area split into a grid of tiles, each searched separately, finds businesses across the whole area, including the edges. In one measured run, a single search found 230 coffee shops in Portland and the tiled search found 457.One searchSame area, searched tile by tileResults stop, bunched in the middleEvery tile searched, edges included
One search stops after a few hundred results, mostly near the middle. Searching the area tile by tile reaches the edges. Measured once: Portland coffee shops, 230 from one search vs 457 tiled (measured on one city and one keyword.)
  • Maintenance. Google changes the page without notice. In February 2026, for example, signed-out users were briefly shown a "limited view" of Maps without most reviews and photos, which was reported and then reverted within about two weeks (9to5Google). A scraper tied to the page breaks every time something like that happens.

Browser scraping is also the method Google's terms most directly prohibit. The official API is the more stable route for code, with trade-offs covered below.

The Places API route (with a short example)#

The Places API (New) Text Search endpoint takes a query like "dentist in Tucson" and returns up to 20 places per page and up to 60 across pages (Google). You choose the fields with a field mask, and the fields you choose set the price.

  1. Create a Google Cloud project, enable Places API (New), turn on billing and create an API key.
  2. Decide on fields. Website, phone and rating are Enterprise-tier fields; name, address, location and types are Pro.
  3. Send the request, follow nextPageToken up to the 60-result limit, and dedupe on the place id.

This is an illustrative sketch, not production code:

import requests

API_KEY = "YOUR_API_KEY"
URL = "https://places.googleapis.com/v1/places:searchText"
FIELDS = ",".join([
    "places.id", "places.displayName", "places.formattedAddress",
    "places.location", "places.primaryType",
    "places.nationalPhoneNumber", "places.websiteUri",   # Enterprise-tier fields
    "places.rating", "places.userRatingCount",
    "nextPageToken",
])

def text_search(query, rect=None):
    """Yield up to 60 places for one query (Google's per-query cap)."""
    body = {"textQuery": query, "pageSize": 20}
    if rect:  # restrict to one tile: {"low": {...}, "high": {...}}
        body["locationRestriction"] = {"rectangle": rect}
    headers = {"X-Goog-Api-Key": API_KEY, "X-Goog-FieldMask": FIELDS}
    while True:
        data = requests.post(URL, json=body, headers=headers, timeout=30).json()
        yield from data.get("places", [])
        token = data.get("nextPageToken")
        if not token:
            break
        body["pageToken"] = token  # all other parameters must stay the same

seen = {}
for place in text_search("dentist in Tucson, AZ"):
    seen[place["id"]] = place   # dedupe on place ID
print(len(seen), "unique places")

To cover a city, you call text_search once per tile (a small rectangle) and per keyword variant, and merge into seen.

Where it breaks:

  • Cost per request. Requesting website or phone bills Text Search at the Enterprise rate: $35 per 1,000 requests after 1,000 free each month, as of October 2026 (Google pricing). Each request returns at most 20 places, and sparse tiles return fewer. Our Places API cost breakdown works through 10,000 businesses.
  • No emails. The API has no email field. You'd still need to crawl each website and verify what you find.
  • Storage rules. The Maps Platform terms say you may not "copy and save business names, addresses, or user reviews" outside the services. Place IDs may be cached; latitude and longitude only for 30 days. That rules out using the API to build a lead database you keep.

Method 3: How do I scrape Google Maps with a scraping API?#

Use a hosted Google Maps data service: you send a query (or a list of queries and areas) to the vendor's API or web app, and it returns structured rows. The vendor handles proxies, blocking and page changes. Examples include Apify's Google Maps Scraper actor, Outscraper, SerpApi's Google Maps API and Bright Data.

  1. Create an account and pick the Google Maps product.
  2. Enter queries and locations. Some accept a polygon or coordinates and split the area for you; check whether yours does, or you'll get about 120 per query.
  3. Pick add-ons: contact details (emails and socials from websites), reviews, verification. Each is usually priced separately.
  4. Run, then download JSON, CSV or Excel, or pull the results over the API.
  5. Clean the output: dedupe on place ID, drop out-of-area and wrong-trade rows, and match emails to businesses.

As of October 2026, Apify's actor lists "from $1.50 / 1,000 scraped places" with add-ons on top, Outscraper charges $3 per 1,000 after the first 500 and $1 per 1,000 above 100,000, and Bright Data lists $1.50 per 1,000 records pay as you go. These services return raw rows at volume; deduping, filtering and email checking are left to you.

Where it breaks: billing is usually per row returned, so duplicates from overlapping searches and rows outside your area cost the same as good ones. Emails and verification are extras with their own pricing, and you're still responsible for how you use the data under Google's terms.

Method 4: How do I get Google Maps leads with a lead tool?#

Use a tool built for the end result, a list of businesses you can contact: you describe the trade and the area, it covers the area, filters the results, finds emails on each business's website and verifies them. This is the shortest path for agencies, cold-email operators and local sales teams.

  1. Describe the market: the trade ("dentist", plus variants like "cosmetic dentist" and "orthodontist") and the place (a city, county or ZIP, or a shape you draw).
  2. Choose the scope: only businesses inside the area, or inside plus a margin.
  3. Preview what's there before paying, if the tool allows it.
  4. Run. The tool tiles the area past the result cap, dedupes by place ID, finds emails and grades them.
  5. Export to CSV or Excel, or push straight to Instantly, Smartlead, lemlist or HubSpot.

Where it breaks: you get fewer raw fields than a developer-oriented scraper (often no review text or photos), and you depend on the vendor's coverage method. Check how they bill: per business, per row or per email.

How a local lead list is built, step by stepSix steps: find every business with every keyword across every tile of the area; fence the results to the area and trade; remove duplicates by Google place ID; find emails on each business's own website; verify each mailbox; deliver to a file, a cold email tool or a CRM.01Find
Every keyword × every tile
02Fence
Keep in-area, on-trade
03Dedupe
One row per place ID
04Find emails
On their own website
05Verify
Live mailbox check
06Deliver
CSV, Instantly, HubSpot
The six steps behind a list you can send to. Skipping any one of them shows up later as missed businesses, wasted credits or bounces.

Which method should I use?#

For a list of local businesses you'll email or call, use a lead tool, and Leadraft is built for exactly that job: it tiles the area past the result cap, keeps only businesses inside your area and trade, finds emails on each business's own website and checks every one against the mail server. You pay once per business, ever, and out-of-area results aren't charged. The free plan covers 500 businesses and 50 checked emails a month; Growth is $49 a month for 100,000 businesses and 5,000 checked emails.

Scroll horizontally if needed →

SituationWhat Leadraft does
Under 200 businesses, onceFree plan: 500 businesses and 50 checked emails a month, no card
A whole city, county or drawn territorySearches it in tiles and dedupes by place ID, on every plan
A list you'll email or callEmails from each business's website, graded Verified, Accept-all or Invalid, pushed to Instantly, Smartlead, lemlist or HubSpot
New businesses every monthA monitor re-runs the search and delivers only new businesses
An app feature that shows places live on a mapNot what Leadraft does
Full review text and photos for analysisNot what Leadraft does

Whatever method you use, the quality checks are the same: count unique businesses against one manual search, count rows outside your area, and look at how many emails are verified rather than just "found". Our Google Maps scraper guide has the full evaluation checklist, and why Maps stops at 120 results explains the tiling every method needs.

Why does my Google Maps scrape stop early or miss data? (troubleshooting)#

Most problems come from the same few limits. Find the symptom, then the fix.

Scroll horizontally if needed →

SymptomLikely causeFix
Stops at about 120 resultsOne Maps search only loads about 120 listings, whatever tool reads itSplit the area into tiles and search each; add keyword variants; dedupe by place ID (why)
Only 20 resultsOnly the first page loaded. The Places API returns 20 per page; the Maps panel loads more as you scrollFollow nextPageToken (up to 60 per query), or scroll the panel to "You've reached the end of the list"
Stops at exactly 60The Places API Text Search cap: "a maximum of 60 results across all pages"Smaller areas with locationRestriction, one query per tile
Results from outside your arealocationBias (or a loose map view) prefers an area but doesn't enforce itUse locationRestriction in the API, and drop rows whose coordinates fall outside your boundary
Only 5 reviews per place from the APIGoogle's Place resource returns "a maximum of 5 reviews" (and 10 photos)Treat API reviews as a sample; don't plan on full review text from the API
Phone or website missingField not in your field mask, or the business didn't list oneAdd nationalPhoneNumber and websiteUri to the mask (Enterprise tier); otherwise the field is genuinely empty
No street addressService-area businesses can hide their address on their profileKeep them; use the city and coordinates Google provides for the area check
CAPTCHAs, blocks or empty pagesBrowser automation at volume from one IPSlow down, or move to the official API or a hosted service; residential proxies are what scraping vendors use
Fewer reviews and photos when signed outGoogle has tested a "limited view" for signed-out users (February 2026)Check results in a signed-in browser before you blame the scraper
No emails at allGoogle Maps listings have no email fieldCrawl each business's website, then verify the addresses
The same business twiceOverlapping tiles or keyword variantsDedupe on place ID, not on name

FAQ#

What is the easiest way to scrape Google Maps?#

A no-code browser extension or a hosted tool. You run a search, scroll the results and export a CSV. It works for small pulls, but it stops at about 120 results per search and gives you no emails unless the tool visits each website.

Can I scrape Google Maps with Python?#

Yes. You can drive a browser with Playwright or Selenium, or call the official Places API. Browser scraping breaks when Google changes the page and gets blocked at volume. The Places API is stable but costs money per request, caps Text Search at 60 results, has no email field and restricts storing the data.

How do I scrape more than 120 results from Google Maps?#

Split the area into smaller tiles and run the same search in each, add keyword variants for the trade, then merge and remove duplicates by place ID. Every method above needs this to cover a whole city.

Is it free to scrape Google Maps?#

Small amounts can be. Extensions have free tiers, the Places API gives a monthly free allowance per SKU, and many tools have free credits. At city scale you pay in money, proxies or time.

Why does my Google Maps scraper only return 20 results?#

Usually because only the first page loaded. The Places API returns 20 places per page and up to 60 across pages if you follow nextPageToken. In the Maps interface, the results panel loads more as you scroll, so a scraper that doesn't scroll to the end captures only the first batch.

Is scraping Google Maps allowed?#

Google's terms prohibit it, and the Maps Platform terms restrict how API data is stored. It is a contract issue first; whether it is unlawful depends on your country and the data. See our legal guide and get advice for your situation.

Sources#

  1. Google for Developers, Text Search (New) (20 per page, "a maximum of 60 results across all pages"; field-to-SKU mapping; locationBias vs locationRestriction), seen October 31, 2026.
  2. Google for Developers, Google Maps Platform pricing (Text Search Enterprise $35 per 1,000, 1,000 free per month), last updated October 30, 2026.
  3. Google, Google Maps Platform Terms of Service §3.2.3, and Service Specific Terms (Places API caching), seen October 31, 2026.
  4. Apify, Google Places API limits (about 120 listings per Maps search), September 23, 2025.
  5. 9to5Google, Google Maps limited view for signed-out users, February 2026.
  6. Apify, Google Maps Scraper actor; Outscraper, Pricing; Bright Data, Google Maps scraper, all seen October 31, 2026.
  7. Google for Developers, Place resource reference ("A maximum of 5 reviews can be returned"; up to 10 photos), seen November 3, 2026.

Lead lists for the trades in this article