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.
In this tutorial
- What you get
- Prerequisites
- Step 1: Create a free Apify account
- Step 2: Open the Google Maps Scraper
- Step 3: Configure your search
- Step 4: Run the actor
- Step 5: Export your results
- Enrichment: emails, contacts, and more
- Advanced: structured queries
- Connect to AI agents via MCP
- Copy-paste prompt for Claude
- Examples from our Shorts
- Key output fields
- What it costs
- 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.
- 30+ fields per place: business name, category, full address (structured by street/city/postal code/country), phone, website, rating, review count, GPS coordinates, timezone, price range, and operational status.
- Email extraction: visits each place's website and extracts contact emails, phone numbers, and social links using regex. No API key needed.
- AI contacts and job listings: bring your own Gemini, Groq, or OpenRouter key to extract named contacts (name, title, email, phone) and open job listings from each website.
- Popular times: the crowd-level histogram by hour (Monday through Sunday) where Google provides it.
- Reviews: opt in to pull individual review text, rating, and reviewer name per place.
- AI icebreakers: one personalized cold-outreach opening line per place, written in any output language you specify.
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
- A free Apify account. The free tier gives $5 of usage credit every month, enough for 5,000 places.
- One or more search queries, each including the business category and location (for example, "accountants in Madrid" or "yoga studios in Sydney").
Create a free Apify account
- Open the actor page on Apify and click Try for free.
- Sign up with Google or email. The form takes about a minute.
- You land on the actor's input form inside Apify Console. The $5 free credit is added automatically.
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.
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:
searchStrings: an array of plain search queries. Each runs as a separate Google Maps search. Order them however you like.maxResultsPerQuery: how many places to return per query. Google Maps caps at 120 per page; set to 20 for a quick test or 120 for the maximum.maxTotalResults: optional hard cap across all queries combined. Useful for cost control on large batches.language: ISO 639-1 code (defaulten). Passde,fr,ja, etc. to get localized business names and categories.includeReviewCount: set totrue(the default) to add areview_countfield per place. Adds about 150 ms per result.includePopularTimes: opt-in to add the crowd-level histogram per place.
Run the actor
- Click Start at the bottom of the Input tab.
- The run opens automatically and you see the Log tab. Each line represents one batch of places fetched.
- When the run finishes you see Status: SUCCEEDED and the item count in the top stats bar.
- Click Dataset in the left sidebar to preview the results.
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:
- JSON: full nested structure with all 30+ fields per place. Best for further processing in code or workflows.
- CSV: flat file ready for Google Sheets, Excel, or most CRM import tools. Nested objects (like
complete_address) are flattened automatically. - Excel: .xlsx file, formatted and ready to share.
- XML / JSONL: for specific pipeline integrations.
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
}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-scraperOnce 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

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

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.
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

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

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
- Open with what you saw. "I found you on Google Maps. You have good reviews, but there's no website linked, so people who search for you have nowhere to click."
- Offer something small and concrete. A free one-page demo with their name, phone, service area and reviews. No price on the first call.
- Ask for the meeting, not the sale. "Can I show you a draft in a 15-minute call on Thursday?" Build the demo only after they say yes, so you don't spend time on sites nobody looks at.
- Sort by review count. Businesses with many reviews and no website have the most to lose, and they're the easiest to start a conversation with.
- Respect the rules where you call. Check do-not-call rules for business numbers in your country and state, and stop when someone says no.
HVAC companies in Phoenix, Arizona: 662 firms

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:
- 210 active: updated in the last 6 months.
- 43 stale and 40 abandoned: 83 sites show no update in 6 months or more, 40 of them nothing in more than 18 months.
- 184 unknown: no date signal the checker could rely on. Unknown does not mean old.
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": trueCost 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

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

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:
title: business name as it appears on Google Maps.category/categories: primary category and all associated categories.address: full formatted address string.complete_address: structured object withstreet,city,postal_code,state,country.phone: primary phone number.website: business website URL.rating/review_rating: star rating (1 to 5).review_count: total number of reviews (requiresincludeReviewCount: true).latitude/longitude: GPS coordinates.status:OPERATIONAL,CLOSED_TEMPORARILY, orCLOSED_PERMANENTLY.opening_hours: structured weekly schedule where available.popular_times: crowd-level histogram by hour (requiresincludePopularTimes: true).description: the business's own description text.place_id: Google's permanent identifier for the place.link: direct Google Maps URL for the place.company_id: passes through the value you set in your input query (useful for join-back to your own data).
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.
- Places: $0.001 per place ($1.00 per 1,000) on the Apify Free plan. Drops to $0.00097 on Bronze, $0.00089 on Silver, and $0.00075 ($0.75 per 1,000) on Gold and above.
- Reviews: $0.0003 per review ($0.30 per 1,000), charged only when you set
includeReviews: true. Disabled by default. - Actor start: a small one-time container fee per run (under $0.001 for typical memory settings).
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.
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
- Google Maps Scraper actor page: Full specs, pricing tiers, and comparison with alternatives.
- Google Maps API alternative: When the official Places API is too limited or too expensive, and what to use instead.
- Scrape Google Maps with n8n: Automate Google Maps data collection into your own n8n workflow with no code.
- Google Maps Reviews Scraper: How to extract individual customer reviews from Google Maps at scale.
- Google Maps Scraper on Apify: Full actor documentation, all input parameters, and the complete field reference.
- Google Maps Scraper Tutorial (Deutsch): the same tutorial in German, with all dentists in Hamburg as the example.
- All NanoScrape tutorials: Step-by-step guides for scraping Instagram, Reddit, YouTube, and more.