Aurelix

Tools › Leads

Google Maps Phone Scraper

Turn any "trade + city" search on Google Maps into a ready-to-call lead list (phones, websites, ratings, hours) for $0.85 per 1,000 places, no login.

For agencies, B2B sellers and local SEO teams. Many search terms in many cities in one run, each place returned once; website emails and socials are optional and charged only when found.

$0.85 per 1,000 places ($0.75 on paid Apify plans)

At a glance

What the Google Maps Phone Scraper does

Search by
Search terms x locations, e.g. dentist in Calgary AB
Results
Up to 300 places per term and location; each place once per run
Output
26 fields per place, plus emails, phones and socials from the website when turned on; JSON, CSV, Excel, API
Automate
Only new places since last run, schedules, webhooks, Zapier, Make, n8n, MCP for AI agents

Who it is for

  • Agencies and B2B sellers building local lead lists by trade and city
  • Franchise and retail teams mapping competitors and locations in a market
  • Local SEO consultants comparing ratings, review counts and categories in an area
  • Data teams adding coordinates, hours and place IDs to store or prospect lists

Output

What you get

  • place_id, cid, name, category, categories, google_maps_url
  • address, street, neighborhood, city, region, postal_code, country_code, latitude, longitude, timezone
  • phone (E.164), phone_display, website
  • with 'Add website emails and socials' on: primary_email, emails, website_phones, social_profiles, facebook_url, instagram_url, linkedin_url, x_url, youtube_url (each with its source page; null when off)
  • rating (average out of 5), review_count (count only, no review text), hours (Monday to Sunday, as Google shows them)
  • search_term, search_location, source_url, scraped_at (ISO 8601 UTC)

Example

Input and output

Input

{
  "searchTerms": [
    "dentist",
    "roofing"
  ],
  "locations": [
    "Calgary AB",
    "Austin, TX"
  ],
  "maxResultsPerSearch": 60,
  "language": "en"
}

One output record

{
  "place_id": "ChIJ243-C381K4gRHMKWCGU86iM",
  "cid": "2587947340511232540",
  "name": "Black+Blue Toronto",
  "category": "Restaurant",
  "categories": [
    "Restaurant",
    "Brunch restaurant",
    "Event venue",
    "… 6 more"
  ],
  "address": "130 King St W, Toronto, ON M5X 2A2, Canada",
  "street": "130 King St W",
  "neighborhood": "Old Toronto",
  "city": "Toronto",
  "region": "Ontario",
  "postal_code": "M5X 2A2",
  "country_code": "CA",
  "phone": "+16473688283",
  "phone_display": "+1 647-368-8283",
  "website": "https://blackandbluesteakhouse.ca/toronto-home/",
  "rating": 4.8,
  "review_count": 6748,
  "hours": [
    {
      "day": "Monday",
      "hours": "11:30 AM–12 AM"
    },
    {
      "day": "Tuesday",
      "hours": "11:30 AM–12 AM"
    },
    {
      "day": "Wednesday",
      "hours": "11:30 AM–12 AM"
    },
    "… 4 more"
  ],
  "latitude": 43.648099599999995,
  "longitude": -79.3831247,
  "timezone": "America/Toronto",
  "google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ243-C381K4gRHMKWCGU86iM",
  "search_term": "restaurant",
  "search_location": "Toronto, ON",
  "source_url": "https://www.google.com/maps/place/?q=place_id:ChIJ243-C381K4gRHMKWCGU86iM",
  "scraped_at": "2026-11-04T14:24:30Z"
}

From a real run of this tool; long text and lists shortened here.

How to use it

Three steps

  1. Enter search terms, e.g. dentist or roofing, and locations, e.g. Calgary AB or Austin, TX.
  2. Set Max places per search (up to 300) and the language.
  3. Click Start, then download JSON, CSV or Excel, or send the places to Google Sheets, your CRM, Zapier, Make or n8n through the API.

API

Call it from Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("aurelix/google-maps-scraper").call(run_input={'searchTerms': ['dentist', 'roofing'],
 'locations': ['Calgary AB', 'Austin, TX'],
 'maxResultsPerSearch': 60,
 'language': 'en'})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

pip install apify-client. The same input works from the Apify console, a schedule, Make, n8n, Zapier or an AI agent through the Apify MCP server.

Pricing

Pay per result

Per 1,000 places, free plan$0.85
Per 1,000 places, paid plans$0.75
Contact result, per 1,000, free plan$1.50
Contact result, per 1,000, paid plans$1.05
Start fee per run$0.001

Live prices from the Apify Store; no subscription and no platform usage billed on top. See the Store page.

Honest limits

What it does not do

  • Up to 300 places per search term and location (fewer when Google has fewer).
  • Website emails come only from what the business publishes on its own site (at most 5 pages); many small businesses publish none, and sites that block crawlers in robots.txt are skipped.
  • Fields are read from Google Maps' search results; Google changes this format from time to time, and the daily health check flags any break.
  • Rating, review count, website and hours are null or empty when the business has none on Google Maps.
  • Places are listed in Google's order for the search, which depends on relevance and location.
  • category is the category Google lists first for your search, usually the one matching your search term (e.g. Piano tuning service for a music store found by 'piano tuner'); the business's other categories, including its main one, are in categories.
  • Places whose address Google hides have no address and no coordinates.
  • A place whose name contains a name on the suppression list is skipped (titles such as Dr., case and accents ignored).

FAQ

Questions buyers ask

Will Google block my account?

No. It never uses a Google account, so there is none to block. It reads Google Maps' public search results, with requests spaced two seconds apart.

Is there a cheaper alternative to the Compass Google Maps Scraper?

Yes, for business listings. This Actor costs $0.85 per 1,000 places on Apify's free plan and $0.75 on paid plans; compass/crawler-google-places costs $4.00 and $3.00, and lukaskrivka/google-maps-with-contact-details $5.00 and $4.00. None bills platform usage on top. Website emails and socials are an option at $1.50 per 1,000 places, charged only when found. Compass is the better pick if you need review text, images or rating and category filters, which this Actor does not offer.

How do I get Google Maps leads into n8n, Make or an AI agent?

Two ways. For a fixed workflow, add Apify's n8n or Make node, choose **Run Actor**, enter aurelix/google-maps-scraper and map the dataset to the next step. For an AI agent (Claude, ChatGPT, Cursor or an n8n AI Agent node), add https://mcp.apify.com/?tools=aurelix/google-maps-scraper as an MCP server and ask for businesses in plain words; setup for each client is in the section above. Runs bill your own Apify account at the same per-result price.

How much does the Google Maps Phone Scraper cost?

$0.85 per 1,000 places ($0.75 on paid Apify plans), billed through your Apify account; you pay only for results. Apify's free plan includes $5 of credit a month, enough for about 5,882 places.

What is charged?

One place-result ($0.85 per 1,000) per place returned. With 'Add website emails and socials' on, also one contact-result ($1.50 per 1,000) per place whose website gave at least one email, extra phone or social link; nothing for sites with no contacts. Places already returned in the run, places returned by an earlier run when 'Only new places since last run' is on, suppressed places and failed searches are not charged.

Does it find emails?

Yes, optionally. Google Maps does not show emails, so with 'Add website emails and socials' on the Actor reads each business's own website (home page plus up to 4 contact or about pages, robots.txt obeyed) and returns generic business emails such as info@ or sales@, extra phones and social profile links. Emails of named people are not returned.

How do I get only new businesses?

Turn on 'Only new places since last run' and schedule the run. Places returned before are skipped and not charged; give the same 'stateKey' (or the same searches) each time. A place not seen for 60 days is forgotten.

How many places per search?

Up to 300 per search term and location, in Google's ranking order; fewer when Google lists fewer (a broad city search lists about 260 to 290). For more coverage, split large areas into neighbourhoods or use more specific terms, e.g. 'emergency plumber' and 'drain cleaning'.

Are reviews included?

No. Review text, reviewer names and photos are never collected. Only the average rating and the number of reviews are returned.

Does it respect robots.txt?

Yes. Google's robots.txt allows Maps search results (/search?tbm=map), which is the only Google page type this Actor requests. With 'Add website emails and socials' on, it also reads the businesses' own websites, and only the pages their robots.txt allows; a site whose robots.txt disallows us is skipped.

Can I use it from an AI assistant?

Yes. Give 'searchTerms' and 'locations'; it works through Apify's MCP server and API.

Is this legal?

It reads only public data any logged-out visitor can see: Google Maps search results. It goes at a polite pace, respects robots.txt, never logs in and never solves CAPTCHAs. It returns business listing fields (name, categories, address, phone, website, rating, review count, hours, coordinates); no review text or reviewer data. To have a record removed, open an issue on this Actor's Issues tab; if Google formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. anti-spam and privacy laws; this is not legal advice.

How do I get a business removed?

Open an issue in the Issues tab with the business name or website. It is added to the shared suppression list within 7 days.

What happens when a search finds nothing, or fewer places than I asked for?

The run still finishes normally and returns what Google lists. You pay per place returned plus the $0.001 start fee, so a search with no matches costs only the start fee. The run's status message says how many places came from how many searches and lists anything skipped: places returned by an earlier run, suppressed places, or result pages that failed. If you set a maximum charge, the run stops before the next place would pass it and says so; places already returned are kept. A run that nears its timeout stops early and keeps its results.

How are duplicates handled?

By Google's place ID across the whole run. A place found by two searches, e.g. 'coffee shop' and 'cafe' in the same city, is returned and charged once, with the search_term and search_location of the search that found it first. Across runs, use 'Only new places since last run'.

What counts as new in 'Only new places since last run'?

A place whose ID was not returned by an earlier run under the same state name. It is not the date the business opened: a long-standing business that shows up in Google's results for the first time also counts as new. Places that keep appearing stay remembered; one not seen for 60 days is forgotten and can come back as new. Without a stateKey, the name is derived from your search terms, locations and language, so changing any of them starts a fresh memory. Changing Max places per search does not.

Which countries and languages work?

Any location you can type into Google Maps. Our tests covered the US, Canada, the UK, France, Germany and Spain. The language setting (English, French, Spanish or German) changes category names and the opening-hours text; days are always listed Monday to Sunday. Addresses are split into street, city, region, postal code and country code as Google provides them.

How long does a run take?

Each request to Google returns up to 20 places, and requests are spaced two seconds apart, so a 300-place search needs 15 requests. In our test run, 4 searches returning 100 places took 25 s. Website contacts add time: up to 5 pages per site, at most 45 s per site, 5 sites at a time, and each site is read once per run.

What do place_id, cid and the other fields mean?

place_id is Google's place ID, the best key for matching records over time. cid is Google's numeric customer ID for the listing, and google_maps_url opens the place. phone is E.164 (e.g. +14032641736) and phone_display is the number as Google shows it. rating is null when a place has no reviews. timezone is a name such as America/Toronto. search_term and search_location record which search found the place.

Do I need a proxy, and what if Google blocks a request?

The default Apify datacenter proxy is enough; in our tests no request was blocked or shown a CAPTCHA. If Google answers with something other than a Maps result, that search stops, the places found so far are kept, and the status message counts the failed pages. Nothing is charged for a failed search. Website contact pages are fetched directly, without the proxy.

Guides

Tutorials using this tool

Related

Related tools

Try the Google Maps Phone Scraper

Open it on the Apify Store, paste the example input above and click Start. Results download as CSV, Excel or JSON.