How to Use a Google Maps Scraper to Extract Business Leads and Contact Data

The Google Maps Places API costs $17 per 1,000 results for the full details tier, requires a billing account, and gets expensive fast at scale. The NanoScrape Google Maps Scraper on Apify costs $1 per 1,000 places, needs no API key, and returns 30+ fields including phone, website, rating, opening hours, and GPS coordinates. You can optionally chain on email extraction, AI-powered contacts, job listings, and personalized outreach lines. This guide walks through setup, all input options, and the enrichment stack.

Apify dataset table showing scraped Google Maps places with columns for business name, category, address, phone, website, and rating
The dataset output: one row per place with name, address, phone, website, rating, and all other structured fields.
Difficulty: Beginner
Time: 5 minutes
Cost: $1.00 per 1,000 places; reviews $0.30 per 1,000 (optional); free tier covers first $5/month
Tools: Apify, NanoScrape Google Maps Scraper
Open the Google Maps Scraper on Apify See pricing details

In this tutorial

  1. What you get
  2. Prerequisites
  3. Step 1: Create a free Apify account
  4. Step 2: Open the Google Maps Scraper
  5. Step 3: Configure your search
  6. Step 4: Run the actor
  7. Step 5: Export your results
  8. Enrichment: emails, contacts, and more
  9. Advanced: structured queries
  10. Connect to AI agents via MCP
  11. Copy-paste prompt for Claude
  12. Examples from our Shorts
  13. Key output fields
  14. What it costs
  15. FAQ

What you get

The NanoScrape Google Maps Scraper runs on Apify and accepts plain search strings (like "coffee shops in Berlin" or "dentists in Chicago") or structured query objects with location, country, and your own internal ID. Each run returns up to 10,000 places by default, works in any country and language, and completes most small batches in under a minute.

All enrichment fields merge into the same dataset row as the Maps data. You get one flat file per run, ready to load into a CRM, paste into a spreadsheet, or pass to a downstream workflow.

Prerequisites

STEP 1

Create a free Apify account

  1. Open the actor page on Apify and click Try for free.
  2. Sign up with Google or email. The form takes about a minute.
  3. You land on the actor's input form inside Apify Console. The $5 free credit is added automatically.
Already have an account? Click the actor link above. You land directly on the input form.
STEP 2

Open the Google Maps Scraper

After signing in you are on the actor's page. The Information tab shows pricing, a description of all features, and example inputs. The Input tab is where you fill in your search queries.

Apify Console showing the Google Maps Scraper actor information page with pricing and feature overview
The actor's Information tab: pricing, description, and a summary of all enrichment options.
STEP 3

Configure your search

Click Input in the left sidebar. The simplest setup is a list of search strings. Combine the business type and location inside the same string:

{
  "searchStrings": [
    "restaurants in Paris",
    "coffee shops in Tokyo",
    "dentists in New York"
  ],
  "maxResultsPerQuery": 20
}

Key input fields:

Apify Console Google Maps Scraper input form showing searchStrings field filled with coffee shop queries for three cities
The Input tab with three search queries. Each runs as its own Google Maps search; results are combined into one dataset.
STEP 4

Run the actor

  1. Click Start at the bottom of the Input tab.
  2. The run opens automatically and you see the Log tab. Each line represents one batch of places fetched.
  3. When the run finishes you see Status: SUCCEEDED and the item count in the top stats bar.
  4. Click Dataset in the left sidebar to preview the results.
Apify run log showing Google Maps Scraper fetching places with status SUCCEEDED and item count displayed
The run log. Each line is one batch. The status bar at the top shows total items once the run finishes.
Most runs with under 100 places finish in under 30 seconds. Larger batches (1,000+ places) typically take 2 to 5 minutes.
STEP 5

Export your results

Click Dataset in the left sidebar. You see a table with one row per place. Use the Export dropdown to download in the format you need:

You can also access the dataset programmatically via the Apify API. The dataset URL is shown at the top of the Dataset tab. Append /items?format=json&token=YOUR_TOKEN to fetch all results into any script.

Enrichment: emails, contacts, and more

Every place in the dataset includes a website field where Google Maps has one. The scraper can visit those websites and pull additional data, all merged into the same dataset row.

Email extraction (no API key required)

Add "enableEmailExtraction": true to your input. The scraper visits each website and extracts emails, phone numbers, and social links via regex. Results appear in emails_from_website, phones_from_website, and social_urls.

{
  "searchStrings": ["accountants in Munich"],
  "maxResultsPerQuery": 50,
  "enableEmailExtraction": true
}

AI contacts and job listings (bring your own API key)

Pass your own Gemini, Groq, or OpenRouter API key to extract structured contacts (name, position, email, phone) and open job listings from each website. Set "waitForAddOns": true so the results merge into the place row before the run ends.

{
  "searchStrings": ["IT companies in Berlin"],
  "maxResultsPerQuery": 20,
  "enableContactExtraction": true,
  "enableJobExtraction": true,
  "enableEmailExtraction": true,
  "groqApiKey": "gsk_your_own_key",
  "waitForAddOns": true
}

AI icebreakers for cold outreach

Set "enableAiIcebreaker": true along with a tone, a focus note, and an output language to generate one personalized opening line per place. Useful when you want to prep a cold email batch without writing each intro manually.

{
  "searchStrings": ["care homes in Zurich"],
  "maxResultsPerQuery": 30,
  "enableEmailExtraction": true,
  "enableAiIcebreaker": true,
  "icebreakerTone": "professional",
  "icebreakerFocus": "We specialize in compliance software for care facilities",
  "outputLanguage": "de",
  "geminiApiKey": "your_gemini_key",
  "waitForAddOns": true
}
AI enrichment (contacts, job listings, icebreakers) is billed by your LLM provider, not by Apify. The actor passes each website's text to your Gemini, Groq, or OpenRouter key.

Advanced: structured queries

Use the queries field instead of searchStrings when you need to attach your own internal ID per search, split the search term from the location, or specify the country for accurate geo-targeting.

{
  "queries": [
    {
      "query": "software companies",
      "location": "Berlin",
      "country": "DE",
      "company_id": "campaign-berlin-tech-2026"
    },
    {
      "query": "plumbers",
      "location": "London",
      "country": "GB",
      "company_id": "campaign-london-plumbers"
    }
  ],
  "maxResultsPerQuery": 50
}

The company_id you set on each query flows through to every place row in that query's results as the company_id field. That lets you join the dataset back to your own campaign or client records without a separate lookup step.

Connect to AI agents via MCP

The scraper is available as an MCP (Model Context Protocol) tool. Paste this server URL into any MCP-compatible client (Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex):

https://mcp.apify.com?tools=santamaria-automations/google-maps-scraper

Once connected, prompt your AI client in plain English. The client calls the actor with the right input and returns the structured data:

Find pediatric dentists in Zurich and put the results in a table.

Clients that support dynamic tool discovery (Claude.ai, VS Code) receive the full input schema automatically so the model can fill in any field without you specifying parameters manually.

Copy-paste prompt for Claude

Connected the MCP server above? Paste this prompt into Claude. It asks Claude to tell you the cost first and wait for your OK before it starts a run. Swap the search for your own, for example "plumbers in Manchester".

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with the search
"dentists in London" and at most 100 results.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, give me a table with name, phone, website, rating and postcode, sorted by rating,
and leave out practices without a website.

Auf Deutsch

Ersetzen Sie die Suche durch Ihre eigene, zum Beispiel „Steuerberater in München“.

Nutze den Apify MCP Server. Starte den Actor santamaria-automations/google-maps-scraper mit der Suche
"Zahnarzt in Hamburg" und höchstens 100 Ergebnissen.
Sag mir vor dem Start, was der Lauf kostet, und warte auf mein OK.
Wenn er fertig ist, gib mir eine Tabelle mit Name, Telefon, Website, Bewertung und PLZ, sortiert nach Bewertung,
ohne Praxen ohne Website.

Examples from our Shorts

Complete runs behind our YouTube Shorts, with the exact input, a Claude prompt and the numbers after clean-up. All use the same trick for a big city: one search per district instead of one search for the whole city, then duplicates removed by place_id. They were our own test runs on 2026-10-19 (London, Manchester), 2026-10-20 (Austin) and 2026-10-21 (Dallas); the costs are estimates from the row count and the current price.

Dentists in London: 1,415 practices

Five real rows from the run: London dental practices with phone and address

33 searches, one per borough ("dentist in Camden, London" and so on), up to 200 places each.

  • 4,002 rows came back; neighbouring boroughs overlap.
  • Duplicates removed, dental categories only (dentist, orthodontist, endodontist, periodontist, implant clinic), London postcodes only: 1,415 practices.
  • 1,214 have a website, 966 are rated 4.5 or higher.
  • Cost estimate: 4,002 places × $0.001 = about $4.00 on the free plan.
Show the input with all 33 boroughs
{
  "searchStrings": [
    "dentist in City of London, London",
    "dentist in Westminster, London",
    "dentist in Camden, London",
    "dentist in Islington, London",
    "dentist in Hackney, London",
    "dentist in Tower Hamlets, London",
    "dentist in Southwark, London",
    "dentist in Lambeth, London",
    "dentist in Kensington and Chelsea, London",
    "dentist in Hammersmith and Fulham, London",
    "dentist in Wandsworth, London",
    "dentist in Lewisham, London",
    "dentist in Greenwich, London",
    "dentist in Newham, London",
    "dentist in Barking and Dagenham, London",
    "dentist in Redbridge, London",
    "dentist in Havering, London",
    "dentist in Waltham Forest, London",
    "dentist in Haringey, London",
    "dentist in Enfield, London",
    "dentist in Barnet, London",
    "dentist in Harrow, London",
    "dentist in Brent, London",
    "dentist in Ealing, London",
    "dentist in Hillingdon, London",
    "dentist in Hounslow, London",
    "dentist in Richmond upon Thames, London",
    "dentist in Kingston upon Thames, London",
    "dentist in Merton, London",
    "dentist in Sutton, London",
    "dentist in Croydon, London",
    "dentist in Bromley, London",
    "dentist in Bexley, London"
  ],
  "maxResultsPerQuery": 200,
  "language": "en"
}

Claude prompt (set up the MCP server as in Connect to AI agents via MCP):

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with one search per London borough ("dentist in City of London, London", "dentist in Westminster, London", and so on for all 33 boroughs), at most 200 results per search, language en.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, remove duplicates by place_id, keep only dental practices with a London postcode, and give me a table with name, phone, website, rating and postcode, sorted by rating, and leave out practices without a website.

Plumbers around Manchester: 426 businesses

All 426 plumbers from the run placed on a map of the Manchester area by their coordinates

30 searches, one per area ("plumber in Didsbury, Manchester" and so on), up to 200 places each.

  • 1,841 rows came back, 802 after removing duplicates.
  • Categories Plumber and Heating contractor, with a Greater Manchester postcode (M, SK, OL, BL, WN, WA) or no address but coordinates around Manchester: 426 plumbers. That includes Stockport, Sale, Urmston and other towns around the city, so it is not every plumber in Manchester.
  • 289 have a website, 283 are rated 4.5 or higher, 409 have a phone. Top postcode districts: M20 (18), M33 (13), M9 (12), SK8 (10), M25 (9), SK4 (9).
  • Cost estimate: 1,841 places × $0.001 = about $1.85 on the free plan.
Service-area businesses. Many plumbers show a service area on Google Maps instead of a street address: 161 of the 426 had none. Filtering by postcode alone would drop about a third of them, so the prompt also keeps listings without an address whose coordinates fall around Manchester.
Show the input with all 30 areas
{
  "searchStrings": [
    "plumber in City Centre, Manchester",
    "plumber in Ancoats, Manchester",
    "plumber in Ardwick, Manchester",
    "plumber in Hulme, Manchester",
    "plumber in Moss Side, Manchester",
    "plumber in Whalley Range, Manchester",
    "plumber in Chorlton, Manchester",
    "plumber in Chorlton-cum-Hardy, Manchester",
    "plumber in Didsbury, Manchester",
    "plumber in West Didsbury, Manchester",
    "plumber in Withington, Manchester",
    "plumber in Fallowfield, Manchester",
    "plumber in Rusholme, Manchester",
    "plumber in Levenshulme, Manchester",
    "plumber in Longsight, Manchester",
    "plumber in Gorton, Manchester",
    "plumber in Openshaw, Manchester",
    "plumber in Clayton, Manchester",
    "plumber in Beswick, Manchester",
    "plumber in Miles Platting, Manchester",
    "plumber in Newton Heath, Manchester",
    "plumber in Moston, Manchester",
    "plumber in Harpurhey, Manchester",
    "plumber in Blackley, Manchester",
    "plumber in Crumpsall, Manchester",
    "plumber in Cheetham Hill, Manchester",
    "plumber in Burnage, Manchester",
    "plumber in Northenden, Manchester",
    "plumber in Wythenshawe, Manchester",
    "plumber in Baguley, Manchester"
  ],
  "maxResultsPerQuery": 200,
  "language": "en"
}

Claude prompt:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with one search per Manchester area ("plumber in City Centre, Manchester", "plumber in Didsbury, Manchester", and so on for these areas: City Centre, Ancoats, Ardwick, Hulme, Moss Side, Whalley Range, Chorlton, Chorlton-cum-Hardy, Didsbury, West Didsbury, Withington, Fallowfield, Rusholme, Levenshulme, Longsight, Gorton, Openshaw, Clayton, Beswick, Miles Platting, Newton Heath, Moston, Harpurhey, Blackley, Crumpsall, Cheetham Hill, Burnage, Northenden, Wythenshawe, Baguley), at most 200 results per search, language en.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, remove duplicates by place_id and keep only the categories Plumber and Heating contractor. Keep a business if its address has a Greater Manchester postcode (M, SK, OL, BL, WN or WA), or if it has no address but its coordinates are inside latitude 53.33 to 53.69 and longitude -2.73 to -1.91: many plumbers are service-area businesses without a street address. Give me a table with name, phone, website, rating and postcode, sorted by rating.

For a cheaper first test, keep 3 or 4 districts and set maxResultsPerQuery to 50. In German: the same method for all dentists in Hamburg.

Gyms in Austin, Texas: 179 gyms

Map of the Austin city limits with one dot per gym from the run
City outline © OpenStreetMap contributors (ODbL)

30 searches, one per neighborhood ("gym in Zilker, Austin, TX" and so on), up to 200 places each.

  • 2,782 rows came back, 1,268 after removing duplicates. About half were hotels and apartment buildings that list a gym.
  • Categories Gym, Fitness center, Boxing gym and Muay Thai boxing gym, a 787xx ZIP code, a phone or a website, and no apartment, residence, hotel, clubhouse, park, outdoor, yoga or pilates in the name: 200. Of those, 179 gyms are inside the Austin city limits; the other 21 have an Austin mailing address in places like Westlake or Belterra.
  • 166 have a phone, 168 a website, 155 both; 133 are rated 4.5 or higher. Top ZIP codes: 78704 (27), 78702 (13), 78757 (12), 78751 (11), 78745 (10), 78758 (10).
  • Cost estimate: 2,782 places × $0.001 = about $2.80 on the free plan.
Show the input with all 30 neighborhoods
{
  "searchStrings": [
    "gym in Downtown, Austin, TX",
    "gym in East Austin, Austin, TX",
    "gym in South Congress, Austin, TX",
    "gym in Zilker, Austin, TX",
    "gym in Hyde Park, Austin, TX",
    "gym in North Loop, Austin, TX",
    "gym in Mueller, Austin, TX",
    "gym in Riverside, Austin, TX",
    "gym in Montopolis, Austin, TX",
    "gym in South Lamar, Austin, TX",
    "gym in Bouldin Creek, Austin, TX",
    "gym in Travis Heights, Austin, TX",
    "gym in Clarksville, Austin, TX",
    "gym in Tarrytown, Austin, TX",
    "gym in Allandale, Austin, TX",
    "gym in Crestview, Austin, TX",
    "gym in North Burnet, Austin, TX",
    "gym in The Domain, Austin, TX",
    "gym in Brentwood, Austin, TX",
    "gym in Windsor Park, Austin, TX",
    "gym in Cherrywood, Austin, TX",
    "gym in Govalle, Austin, TX",
    "gym in Dove Springs, Austin, TX",
    "gym in Onion Creek, Austin, TX",
    "gym in Circle C Ranch, Austin, TX",
    "gym in Oak Hill, Austin, TX",
    "gym in Barton Hills, Austin, TX",
    "gym in Rosedale, Austin, TX",
    "gym in Northwest Hills, Austin, TX",
    "gym in Anderson Mill, Austin, TX"
  ],
  "maxResultsPerQuery": 200,
  "language": "en"
}

Claude prompt:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with one search per Austin neighborhood ("gym in Downtown, Austin, TX", "gym in Zilker, Austin, TX", and so on for these neighborhoods: Downtown, East Austin, South Congress, Zilker, Hyde Park, North Loop, Mueller, Riverside, Montopolis, South Lamar, Bouldin Creek, Travis Heights, Clarksville, Tarrytown, Allandale, Crestview, North Burnet, The Domain, Brentwood, Windsor Park, Cherrywood, Govalle, Dove Springs, Onion Creek, Circle C Ranch, Oak Hill, Barton Hills, Rosedale, Northwest Hills, Anderson Mill), up to 200 results per search, language en.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, remove duplicates by place_id and keep only the categories Gym, Fitness center, Boxing gym and Muay Thai boxing gym with a 787xx ZIP code and a phone or website. Drop places whose name contains apartment, residence, hotel, clubhouse, park, outdoor, yoga or pilates. Give me a table with name, phone, website, rating and ZIP code, sorted by rating.

Roofers in Dallas, Texas: 412 roofing contractors

Map of the Dallas city limits with one dot per roofing contractor from the run
City outline © OpenStreetMap contributors (ODbL)

30 searches, one per neighborhood ("roofing contractor in Oak Cliff, Dallas, TX" and so on), up to 200 places each.

  • 2,172 rows came back, 1,140 after removing duplicates.
  • Category Roofing contractor: 888. Inside the Dallas city limits (by coordinates): 423. With a phone or a website: 412 roofers. 61 of them have no ZIP code: they serve an area and show no street address, but their pin is inside the city.
  • 409 have a phone, 315 a website; 314 are rated 4.5 or higher. Top ZIP codes: 75243 (32), 75201 (25), 75208 (20), 75238 (20), 75204 (14), 75206 (14).
  • Cost estimate: 2,172 places × $0.001 = about $2.17 on the free plan.
Show the input with all 30 neighborhoods
{
  "searchStrings": [
    "roofing contractor in Downtown, Dallas, TX",
    "roofing contractor in Uptown, Dallas, TX",
    "roofing contractor in Deep Ellum, Dallas, TX",
    "roofing contractor in Oak Lawn, Dallas, TX",
    "roofing contractor in Bishop Arts, Dallas, TX",
    "roofing contractor in Oak Cliff, Dallas, TX",
    "roofing contractor in Lakewood, Dallas, TX",
    "roofing contractor in East Dallas, Dallas, TX",
    "roofing contractor in Lake Highlands, Dallas, TX",
    "roofing contractor in Preston Hollow, Dallas, TX",
    "roofing contractor in North Dallas, Dallas, TX",
    "roofing contractor in Far North Dallas, Dallas, TX",
    "roofing contractor in Lower Greenville, Dallas, TX",
    "roofing contractor in Knox-Henderson, Dallas, TX",
    "roofing contractor in Design District, Dallas, TX",
    "roofing contractor in The Cedars, Dallas, TX",
    "roofing contractor in Fair Park, Dallas, TX",
    "roofing contractor in South Dallas, Dallas, TX",
    "roofing contractor in Pleasant Grove, Dallas, TX",
    "roofing contractor in Kessler Park, Dallas, TX",
    "roofing contractor in Casa Linda, Dallas, TX",
    "roofing contractor in White Rock, Dallas, TX",
    "roofing contractor in Vickery Meadow, Dallas, TX",
    "roofing contractor in Love Field, Dallas, TX",
    "roofing contractor in Bluffview, Dallas, TX",
    "roofing contractor in Red Bird, Dallas, TX",
    "roofing contractor in Mountain Creek, Dallas, TX",
    "roofing contractor in Kleberg, Dallas, TX",
    "roofing contractor in Wynnewood, Dallas, TX",
    "roofing contractor in Lochwood, Dallas, TX"
  ],
  "maxResultsPerQuery": 200,
  "language": "en"
}

Claude prompt:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with one search per Dallas neighborhood ("roofing contractor in Downtown, Dallas, TX", "roofing contractor in Oak Cliff, Dallas, TX", and so on for these neighborhoods: Downtown, Uptown, Deep Ellum, Oak Lawn, Bishop Arts, Oak Cliff, Lakewood, East Dallas, Lake Highlands, Preston Hollow, North Dallas, Far North Dallas, Lower Greenville, Knox-Henderson, Design District, The Cedars, Fair Park, South Dallas, Pleasant Grove, Kessler Park, Casa Linda, White Rock, Vickery Meadow, Love Field, Bluffview, Red Bird, Mountain Creek, Kleberg, Wynnewood, Lochwood), up to 200 results per search, language en.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, remove duplicates by place_id and keep only the category Roofing contractor with a phone or website. Keep a business only if its coordinates are inside the Dallas city limits. Give me a table with name, phone, website, rating and ZIP code, sorted by rating.

The 97 roofers without a website, and a call script

315 of the 412 roofers list a website, so 97 have none, and every one of those 97 has a phone number. For a web designer these are the easiest calls to make. The business clearly exists, it gets found on Google Maps, and there is nothing to send customers to. Use the same run as above and ask Claude for this list instead:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with the search "roofing contractor in Dallas, TX" and at most 200 results. Before you start the run, tell me what it will cost and wait for my OK.
When it's done, list only the businesses without a website: name, phone, rating and review count, sorted by review count.
Then write me a short cold-call script that offers a free demo website and asks for a 15-minute meeting. Book the meeting first, build the site after.

One search returns at most 200 places, so this prompt gives you part of the list. For all 97, use the 30 neighborhood searches above and add "keep only the businesses without a website".

How to use the call script

HVAC companies in Phoenix, Arizona: 662 firms

Map of the Phoenix city limits with one dot per HVAC company from the run
City outline © OpenStreetMap contributors (ODbL)

20 searches, one per neighborhood ("HVAC contractor in Laveen, Phoenix, AZ" and so on), up to 200 places each. Run on 21 October 2026.

  • 2,379 rows came back, 1,196 after removing duplicates.
  • Primary category HVAC contractor, Air conditioning contractor, Air conditioning repair service or Heating contractor: 1,109. Inside the Phoenix city limits (by coordinates): 678. With a phone or a website: 662 HVAC firms.
  • 658 have a phone, 484 a website; 479 are rated 4.5 or higher.
  • Cost estimate: 2,379 places × $0.001 = about $2.38 on the free plan.
Show the input with all 20 neighborhoods
{
  "searchStrings": [
    "HVAC contractor in Downtown, Phoenix, AZ",
    "HVAC contractor in Midtown, Phoenix, AZ",
    "HVAC contractor in Arcadia, Phoenix, AZ",
    "HVAC contractor in Ahwatukee, Phoenix, AZ",
    "HVAC contractor in Maryvale, Phoenix, AZ",
    "HVAC contractor in Laveen, Phoenix, AZ",
    "HVAC contractor in South Mountain, Phoenix, AZ",
    "HVAC contractor in Deer Valley, Phoenix, AZ",
    "HVAC contractor in North Mountain, Phoenix, AZ",
    "HVAC contractor in Paradise Valley Village, Phoenix, AZ",
    "HVAC contractor in Camelback East, Phoenix, AZ",
    "HVAC contractor in Encanto, Phoenix, AZ",
    "HVAC contractor in Alhambra, Phoenix, AZ",
    "HVAC contractor in Desert View, Phoenix, AZ",
    "HVAC contractor in North Gateway, Phoenix, AZ",
    "HVAC contractor in Estrella, Phoenix, AZ",
    "HVAC contractor in Central City, Phoenix, AZ",
    "HVAC contractor in Biltmore, Phoenix, AZ",
    "HVAC contractor in Sunnyslope, Phoenix, AZ",
    "HVAC contractor in Moon Valley, Phoenix, AZ"
  ],
  "maxResultsPerQuery": 200,
  "language": "en"
}

Claude prompt:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with one search per Phoenix neighborhood ("HVAC contractor in Downtown, Phoenix, AZ", "HVAC contractor in Laveen, Phoenix, AZ", and so on for these neighborhoods: Downtown, Midtown, Arcadia, Ahwatukee, Maryvale, Laveen, South Mountain, Deer Valley, North Mountain, Paradise Valley Village, Camelback East, Encanto, Alhambra, Desert View, North Gateway, Estrella, Central City, Biltmore, Sunnyslope, Moon Valley), up to 200 places per search, language en.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, remove duplicates by place_id and keep only the categories HVAC contractor, Air conditioning contractor, Air conditioning repair service and Heating contractor with a phone or website. Keep a business only if its coordinates are inside the Phoenix city limits. Give me a table with name, phone, website, rating and ZIP code, sorted by rating.

Which Phoenix HVAC websites have gone quiet? 83 with no update in 6+ months

The website freshness add-on (enableFreshnessCheck, no API key needed) checks up to four signals on each website: the newest date in the sitemap, the homepage's Last-Modified header, RSS or Atom feed dates and, as the weakest signal, the copyright year in the footer. It then marks each site active (updated in the last 6 months), stale (6 to 18 months), abandoned (more than 18 months) or unknown.

We ran the same checker that the add-on uses on the 477 unique websites of the 662 Phoenix HVAC firms above (some firms share a website, so we count each website once). Local run on 23 October 2026:

Who uses this: web agencies looking for businesses whose site has gone quiet, with a concrete opener ("your sitemap was last updated in 2023"). Filter on freshness.stale_flag.

To get it in one run, add this line to the Phoenix input above:

"enableFreshnessCheck": true

Cost estimate: the add-on is billed by the Website Freshness Detector in your Apify account, $0.001 per run plus $0.003 per website. For our 477 websites that is $0.001 + 477 × $0.003 = about $1.43, on top of the places. In one combined run the add-on checks every place with a website before you filter, so expect somewhat more.

Claude prompt:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with the same input as the Phoenix HVAC example (one search per neighborhood, maxResultsPerQuery 200, language en) plus enableFreshnessCheck true.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, keep one row per website and give me a table of the sites whose freshness.stale_flag is stale or abandoned: name, website, phone, freshness.most_recent_signal and freshness.most_recent_source, oldest first. Then tell me how many sites were active, stale, abandoned and unknown.

Real estate agencies in Miami, Florida: 249 agencies

Map of the Miami city limits with one dot per real estate agency from the run
City outline © OpenStreetMap contributors (ODbL)

20 searches, one per neighborhood ("real estate agent in Coral Way, Miami, FL" and so on), up to 200 places each. Run on 21 October 2026.

  • 2,439 rows came back, 1,463 after removing duplicates.
  • Primary category Real estate agency or Commercial real estate agency: 363 (the category Real estate agent is left out, because those are mostly individual agents). Inside the Miami city limits (by coordinates): 257. With a phone or a website: 249 agencies.
  • 248 have a phone, 195 a website; 106 are rated 4.5 or higher.
  • Cost estimate: 2,439 places × $0.001 = about $2.44 on the free plan.
Show the input with all 20 neighborhoods
{
  "searchStrings": [
    "real estate agent in Downtown, Miami, FL",
    "real estate agent in Brickell, Miami, FL",
    "real estate agent in Wynwood, Miami, FL",
    "real estate agent in Little Havana, Miami, FL",
    "real estate agent in Coconut Grove, Miami, FL",
    "real estate agent in Coral Way, Miami, FL",
    "real estate agent in Edgewater, Miami, FL",
    "real estate agent in Midtown, Miami, FL",
    "real estate agent in Design District, Miami, FL",
    "real estate agent in Little Haiti, Miami, FL",
    "real estate agent in Allapattah, Miami, FL",
    "real estate agent in Overtown, Miami, FL",
    "real estate agent in Flagami, Miami, FL",
    "real estate agent in West Flagler, Miami, FL",
    "real estate agent in Upper East Side, Miami, FL",
    "real estate agent in Morningside, Miami, FL",
    "real estate agent in Buena Vista, Miami, FL",
    "real estate agent in Shenandoah, Miami, FL",
    "real estate agent in Silver Bluff, Miami, FL",
    "real estate agent in Liberty City, Miami, FL"
  ],
  "maxResultsPerQuery": 200,
  "language": "en"
}

Claude prompt:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with one search per Miami neighborhood ("real estate agent in Downtown, Miami, FL", "real estate agent in Coral Way, Miami, FL", and so on for these neighborhoods: Downtown, Brickell, Wynwood, Little Havana, Coconut Grove, Coral Way, Edgewater, Midtown, Design District, Little Haiti, Allapattah, Overtown, Flagami, West Flagler, Upper East Side, Morningside, Buena Vista, Shenandoah, Silver Bluff, Liberty City), up to 200 places per search, language en.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, remove duplicates by place_id and keep only the categories Real estate agency and Commercial real estate agency (not Real estate agent, which is mostly individual agents) with a phone or website. Keep a business only if its coordinates are inside the Miami city limits. Give me a table with name, phone, website, rating and ZIP code, sorted by rating.

Plumbers in Chicago, Illinois: 322 plumbers

Map of the Chicago city limits with one dot per plumber from the run
City outline © OpenStreetMap contributors (ODbL)

30 searches, one per neighborhood ("plumber in Logan Square, Chicago, IL" and so on), up to 200 places each. Run on 21 October 2026.

  • 2,223 rows came back, 991 after removing duplicates.
  • Category Plumber: 639. Inside the Chicago city limits (by coordinates): 328. Many results are in the suburbs. With a phone or a website: 322 plumbers.
  • 320 have a phone, 217 a website; 202 are rated 4.5 or higher.
  • Cost estimate: 2,223 places × $0.001 = about $2.22 on the free plan.
Show the input with all 30 neighborhoods
{
  "searchStrings": [
    "plumber in Loop, Chicago, IL",
    "plumber in River North, Chicago, IL",
    "plumber in Lincoln Park, Chicago, IL",
    "plumber in Lakeview, Chicago, IL",
    "plumber in Wicker Park, Chicago, IL",
    "plumber in Logan Square, Chicago, IL",
    "plumber in Hyde Park, Chicago, IL",
    "plumber in Pilsen, Chicago, IL",
    "plumber in Bridgeport, Chicago, IL",
    "plumber in Uptown, Chicago, IL",
    "plumber in Rogers Park, Chicago, IL",
    "plumber in Edgewater, Chicago, IL",
    "plumber in West Loop, Chicago, IL",
    "plumber in South Loop, Chicago, IL",
    "plumber in Bronzeville, Chicago, IL",
    "plumber in Austin, Chicago, IL",
    "plumber in Humboldt Park, Chicago, IL",
    "plumber in Albany Park, Chicago, IL",
    "plumber in Portage Park, Chicago, IL",
    "plumber in Jefferson Park, Chicago, IL",
    "plumber in Beverly, Chicago, IL",
    "plumber in Chatham, Chicago, IL",
    "plumber in South Shore, Chicago, IL",
    "plumber in Englewood, Chicago, IL",
    "plumber in Garfield Park, Chicago, IL",
    "plumber in Irving Park, Chicago, IL",
    "plumber in Avondale, Chicago, IL",
    "plumber in Norwood Park, Chicago, IL",
    "plumber in Dunning, Chicago, IL",
    "plumber in Ashburn, Chicago, IL"
  ],
  "maxResultsPerQuery": 200,
  "language": "en"
}

Claude prompt:

Use the Apify MCP server. Run the actor santamaria-automations/google-maps-scraper with one search per Chicago neighborhood ("plumber in Loop, Chicago, IL", "plumber in Logan Square, Chicago, IL", and so on for these neighborhoods: Loop, River North, Lincoln Park, Lakeview, Wicker Park, Logan Square, Hyde Park, Pilsen, Bridgeport, Uptown, Rogers Park, Edgewater, West Loop, South Loop, Bronzeville, Austin, Humboldt Park, Albany Park, Portage Park, Jefferson Park, Beverly, Chatham, South Shore, Englewood, Garfield Park, Irving Park, Avondale, Norwood Park, Dunning, Ashburn), up to 200 places per search, language en.
Before you start the run, tell me what it will cost and wait for my OK.
When it's done, remove duplicates by place_id and keep only the category Plumber with a phone or website. Keep a business only if its coordinates are inside the Chicago city limits. Give me a table with name, phone, website, rating and ZIP code, sorted by rating.

Key output fields

Each place row in the dataset includes:

Enrichment adds: emails_from_website, phones_from_website, social_urls (email extraction); contacts, jobs (AI enrichment); ai_icebreaker (icebreaker option).

What it costs

The scraper uses pay-per-result billing on Apify. You are charged per place extracted, not per run.

The Apify free tier gives $5 of credit every month. At $1.00 per 1,000 places that covers 5,000 places per month at no cost. There is no subscription required.

Email extraction and AI enrichment (contacts, jobs, icebreakers) are billed by your LLM provider, not by Apify. The actor itself only charges per place.

FAQ

Do I need the Google Maps Places API to use this scraper?

No. The scraper does not use the Google Maps Places API at all. It scrapes Google Maps directly without any API key. You only need an Apify account.

Is there a limit on how many places I can scrape per run?

By default each run can return up to 10,000 places. You can set maxTotalResults in your input to cap it at any lower number. For larger datasets, run the actor multiple times with different queries.

What countries and languages does it support?

The scraper works in any country where Google Maps has data. Pass the ISO 639-1 language code in the language field (for example, de, fr, ja, zh) to get localized business names, categories, and addresses.

Can I run it on a schedule or via the API?

Yes. From the Apify Console you can set up a schedule (cron syntax) to run the actor automatically. You can also call it programmatically via the Apify API or the JavaScript/Python SDKs. The API endpoint is POST /v2/acts/santamaria-automations~google-maps-scraper/runs.

Does the scraper return phone numbers and email addresses?

Phone numbers come from Google Maps directly and are included in every place row as the phone field. Email addresses are not on Google Maps itself: to get them, enable enableEmailExtraction so the scraper visits each business's website and extracts contact emails via regex.

How is this different from the basic 'scrape Google Maps' approach?

The basic approach returns name, address, phone, and rating. This actor adds structured complete_address, GPS coordinates, opening hours, popular times, reviews, and a full enrichment stack: email extraction, AI-powered contacts, job listings, and cold-outreach icebreakers. Everything merges into one flat dataset row per place.

Related resources

Open the Google Maps Scraper on Apify Browse all actors