DRAFT tutorial. Not indexed by search engines. Not yet listed on the tutorials hub. Review + iterate in the Claude Code session, then merge the "Publish tutorial" PR to make it public.

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. Key output fields
  12. What it costs
  13. 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.

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