Google Maps Scraper — 12 Fields, Cross-Run Dedupe, No Login avatar

Google Maps Scraper — 12 Fields, Cross-Run Dedupe, No Login

Pricing

from $0.90 / 1,000 place scrapeds

Go to Apify Store
Google Maps Scraper — 12 Fields, Cross-Run Dedupe, No Login

Google Maps Scraper — 12 Fields, Cross-Run Dedupe, No Login

Scrape Google Maps business listings by search query: name, category, address, phone, website, rating, review count, hours, coordinates. No login, no email guessing. Pay only per place delivered. Works in Claude, ChatGPT & any MCP agent.

Pricing

from $0.90 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

📍 Google Maps Search Scraper: Business Listings, No Login

Overview

Google Maps Search Scraper turns any Google Maps search ("coffee shops in Austin TX", "plumbers in Chicago", "dentists in Mumbai") into a clean list of business listings. Each record carries name, category, address, phone, website, rating, review count, opening hours, and coordinates, straight from what Google Maps itself shows. No email guessing, no MX verification, no website crawling, no Google account, no login, no API key.

This is the plain, bare version of Maps scraping: search in, business listings out. If you need verified emails on top of the listing data, use Google Maps Leads Scraper instead. This actor is the cheaper, faster option when you just need the listings themselves.

{
"name": "Mozart's Coffee Roasters",
"address": "3825 Lake Austin Blvd, Austin, TX 78703",
"phone": "(512) 477-2900",
"website": "https://mozartscoffee.com",
"rating": 4.5,
"review_count": 10743,
"opening_hours": {
"Tuesday": "7 AM-12 AM",
"Wednesday": "7 AM-12 AM",
"Thursday": "7 AM-12 AM",
"Friday": "7 AM-12 AM",
"Saturday": "7 AM-12 AM",
"Sunday": "7 AM-12 AM",
"Monday": "7 AM-12 AM"
},
"latitude": 30.2954696,
"longitude": -97.7839512,
"google_maps_url": "https://www.google.com/maps/place/Mozart's+Coffee+Roasters/@30.2954696,-97.7839512,17z/data=!3m1!4b1!4m6!3m5!1s0x8644b5554461664d:0xbc4ff333ec9ad1ad!8m2!3d30.2954696!4d-97.7839512!16s%2Fm%2F020z4hc",
"business_status": "OPERATIONAL",
"query_used": "coffee shops in Austin, TX",
"charged": true,
"scraped_at": "2026-07-15T01:58:49.938Z"
}

This is a real record captured on a live QA run, not a placeholder. The charged flag is shown as it reads under current billing: every listing delivered to your dataset is charged.

✅ No login required | ✅ No API key | ✅ No email guessing, pure listing data | ✅ MCP-ready for AI agents

Features

Beyond the 120-results ceiling. Drives Google Maps like a person, so you go past the map's per-area cap. Bulk queries in one run. Pass a single query and location, or a list of full search strings for bulk runs. Full listing coverage. Name, category, address, phone, website, rating, reviews, hours, and coordinates. Cross-run deduplication. Businesses seen in a previous run are skipped automatically. Residential proxy by default, pinned to the US to avoid Google's EU consent interstitial.

How it works

The official Google Places API caps search results and Google Maps itself will only display about 120 places per area. This scraper drives Google Maps the way a person would: it searches, scrolls the results feed to load more cards past the fold, then opens each place page and reads the same fields a visitor sees. There is no email-finding step and no website crawl, which is what keeps this actor cheap and fast next to a full lead-enrichment scraper.

Every field is read straight from the rendered Google Maps DOM. Business status is read from the "permanently closed" banner when present; when the banner selector cannot confirm a closure, the actor reports the business as operational rather than guessing closed, since a false "closed" would silently hide a real business from your results.

🧾 Input configuration

{
"query": "coffee shops",
"location": "Austin, TX",
"maxResults": 5,
"skipClosedBusinesses": true,
"deduplicateAcrossRuns": true,
"proxyConfig": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

For bulk runs, replace query + location with a searchQueries array, e.g. ["plumbers in Chicago", "dentists in Mumbai"].

📤 Output format

{
"name": "Mozart's Coffee Roasters",
"address": "3825 Lake Austin Blvd, Austin, TX 78703",
"phone": "(512) 477-2900",
"website": "https://mozartscoffee.com",
"rating": 4.5,
"review_count": 10743,
"opening_hours": { "Monday": "7 AM-12 AM" },
"latitude": 30.2954696,
"longitude": -97.7839512,
"google_maps_url": "https://www.google.com/maps/place/Mozart's+Coffee+Roasters/...",
"business_status": "OPERATIONAL",
"query_used": "coffee shops in Austin, TX",
"charged": true,
"scraped_at": "2026-07-15T01:58:49.938Z"
}

Every listing record contains these fields:

FieldDescription
🏢 nameBusiness name
🏷️ categoryBusiness category, when Google Maps exposes it on the place page
📍 addressFull address
📞 phonePhone number
🌐 websiteBusiness website URL
ratingGoogle Maps star rating
💬 review_countNumber of Google Maps reviews
🕒 opening_hoursBusiness hours by day
🗺️ latitude / longitudeCoordinates
🔗 google_maps_urlCanonical Google Maps place URL
🚦 business_statusOPERATIONAL / CLOSED_PERMANENTLY / etc.
🔎 query_usedSearch query that returned this business
💳 chargedWhether this result was billed via PPE
🆔 place_idGoogle Maps place ID (used for cross-run dedup)
🕰️ scraped_atISO 8601 timestamp

💼 Common use cases

Market mapping and territory research Pull every business in a category and city to size a market or plan sales territories. Compare listing density and rating spread across neighborhoods.

Local marketing and agency prospecting Build a raw list of local businesses in a niche before deciding who's worth enriching further. Hand qualified subsets to Google Maps Leads Scraper once you know who to email.

Directory and app data Populate a local directory, map overlay, or comparison app with live business listings. Keep name, address, phone, and hours current with scheduled re-runs.

Competitive and reputation tracking Track rating and review-count trends for competitors in a category over time. Feed google_maps_url values straight into Google Maps Reviews Scraper for a deeper read.

🚀 Getting started

  1. Open the actor and enter a search query (e.g. coffee shops) and a location (e.g. Austin, TX), or switch to searchQueries for a bulk list of full search strings.
  2. Set maxResults per query (default 5) to control volume and cost.
  3. Leave skipClosedBusinesses on so permanently closed listings never cost you a result.
  4. Keep deduplicateAcrossRuns on to avoid paying for the same business twice across runs.
  5. Click Start, then download the dataset as JSON, CSV, or Excel, or pull it via API or MCP.

FAQ

How do you go past Google's 120-results ceiling? A plain Google Maps search only exposes about 120 places before the scroll ends. This scraper runs each query as its own search and drives the map like a real user, so across queries you can pull far more than a single map screen would show. Use several distinct, local queries for the widest coverage.

When am I charged? Per business listing successfully delivered, at the place-scraped event. There is no free tier. Permanently closed businesses (when skipClosedBusinesses is on), extraction failures, and businesses already seen in a previous run (when deduplicateAcrossRuns is on) are never charged. Blocked and empty runs are never charged either: you only pay for a listing that actually reaches your dataset.

Does this actor find email addresses? No, by design. This is the plain, bare listing scraper; it never visits a business's own website and never guesses or verifies emails. For verified emails on top of the same listing fields, use Google Maps Leads Scraper.

Does it need a login or API key? No. It reads only public Google Maps data through Apify's residential proxy. No Google account, no cookies, no third-party data API.

Can I use it inside an AI agent? Yes. It is exposed as an MCP tool. See below.

Use in Claude, ChatGPT & any MCP agent

https://mcp.apify.com/?tools=themineworks/google-maps-search-scraper

Or call it programmatically with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/google-maps-search-scraper').call({
query: 'coffee shops',
location: 'Austin, TX',
maxResults: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => !i._type));

🛠️ Complete your Google Maps pipeline

This actor is the entry point to a full Google Maps and lead-gen suite:

Typical flow: google-maps-search-scraper finds the businesses, maps-leads adds verified emails for outbound, google-maps-reviews pulls reviews for reputation and market research on the same businesses.

Your feedback

Found a field that doesn't match what Google Maps shows, or want a field added? Reach out through the Apify profile. Bug reports with a query and location that reproduce the issue get fixed fastest.