Google Maps Business & Contact Scraper avatar

Google Maps Business & Contact Scraper

Pricing

from $7.00 / 1,000 results

Go to Apify Store
Google Maps Business & Contact Scraper

Google Maps Business & Contact Scraper

Scrape Google Maps businesses with emails, reviews, images & social links. 33% cheaper than alternatives — emails included in base price. Compass-compatible input.

Pricing

from $7.00 / 1,000 results

Rating

0.0

(0)

Developer

bootforge

bootforge

Maintained by Community

Actor stats

1

Bookmarked

51

Total users

19

Monthly active users

1.6 hours

Issues response

8 hours ago

Last modified

Share

Google Maps Scraper

The Google Maps Scraper is an Apify actor that extracts business data from Google Maps by search term and location — name, address, phone, website, emails, social links, ratings, reviews, images, hours, and coordinates across 24 data fields per business. Emails, social links, reviews, and images are all included at one flat rate, no add-on events.

Use it for lead generation, local SEO monitoring, market research, or sales prospecting — exported to JSON, CSV, or Excel. Input field names match compass/crawler-google-places, so switching over is a copy-paste.

Table of contents

What the Google Maps scraper does

  • 🔎 Search by term + location — query any keyword (dentist, plumber, restaurant) scoped to a city, state, or country.
  • 📧 Deep email extraction — crawls each business's homepage, /contact, and /about pages and classifies emails as personal vs generic.
  • 🔗 Social links included — Facebook, Instagram, LinkedIn, X, YouTube, and TikTok profiles, at no extra charge.
  • HTTP-first pipeline — basic data pulls in ~1s per query with no browser; Google blocks trigger an automatic Playwright fallback.
  • 🗺️ Geo-split for scale — auto-splits large areas into a grid to beat Google's ~120-result-per-viewport ceiling.
  • 🧹 Zero duplicates — deduplicated by Google Maps place ID.

How to scrape Google Maps

  1. Click Try for free and open the actor.
  2. Enter one or more searchStringsArray terms and a locationQuery.
  3. Set maxCrawledPlacesPerSearch (default 100).
  4. Optional: keep scrapeContacts on for emails/social links, or set maxReviews / maxImages above 0 for review and image detail.
  5. Click Start and watch results stream into the dataset.
  6. Export as JSON, CSV, or Excel, or pull from the Apify API.
{
"searchStringsArray": ["dentist"],
"locationQuery": "Austin, TX",
"maxCrawledPlacesPerSearch": 20,
"scrapeContacts": true
}

Scrape a large area with emails and 5 reviews per place:

{
"searchStringsArray": ["coffee shop"],
"locationQuery": "California, USA",
"maxCrawledPlacesPerSearch": 500,
"scrapeContacts": true,
"maxReviews": 5,
"geo_split": true
}

Google Maps scraper input

FieldDefaultDescription
searchStringsArrayrequiredSearch terms to look up on Google Maps
locationQuerynullLocation context, e.g. Austin, TX, London, UK
maxCrawledPlacesPerSearch100Max businesses per query (1–500); Google shows ~120 per viewport
languageenResults language (19 supported)
scrapeContactstrueCrawl business websites for emails and social links (included)
scrapePlaceDetailPagetrueVisit place detail page for phone, hours, reviews, images
scrapeSocialMediaProfilesall onToggle per platform (Facebook, Instagram, YouTube, TikTok, X, LinkedIn)
maxReviews0Reviews per business (0 = skip)
reviewsSortnewestnewest, mostRelevant, highestRating, lowestRating
maxImages0Image URLs per business (0–50)
placeMinimumStars""Drop places rated below 1/2/3/4/4.5
skipClosedPlacestrueSkip permanently closed businesses
websiteallPlaceswithWebsite / withoutWebsite (lead-gen) filter
geo_splitfalseAuto-split large areas into a grid
cache_providermemorymemory / file / apify (cross-run KVS) cache for detail data
max_concurrency1Parallel detail pages (1–5)
proxyApify residentialProxy configuration (see below)

Google Maps data output

Each business is one dataset row. Sample:

{
"place_id": "ChIJb5gBC-u0RIYRHkntaUcdJGs",
"name": "ATX Family Dental",
"address": "1700 S 1st St, Austin, TX 78704, United States",
"phone": "+1 512-717-3147",
"website": "https://www.atxfamilydental.com/",
"emails": ["info@atxfamilydental.com"],
"email_type": "generic",
"rating": 4.9,
"review_count": 802,
"categories": ["Dentist", "Cosmetic dentist", "Pediatric dentist"],
"hours": {"Monday": "8 AM–4 PM", "Tuesday": "8 AM–4 PM"},
"latitude": 30.2482229,
"longitude": -97.7559705,
"google_maps_url": "https://www.google.com/maps/place/...",
"social_links": {"facebook": "https://facebook.com/...", "instagram": "https://instagram.com/..."},
"reviews": [
{"author": "John Smith", "rating": 5, "text": "Great dentist!", "time": "2 months ago", "response": "Thank you!"}
],
"images": ["https://lh3.googleusercontent.com/..."],
"neighborhood": "Bouldin Creek",
"timezone": "America/Chicago",
"country_code": "US",
"business_photo": "https://lh5.googleusercontent.com/...",
"open_status": "Open · Closes 4 PM",
"price_level": "$$",
"popular_times": "Not busy",
"scraped_at": "2026-03-27T01:00:00+00:00"
}

What each toggle adds:

FieldsSource
name, address, phone, website, rating, categories, latitude, longitude, place_id, google_maps_url, neighborhood, timezone, country_code, business_photo, open_status, scraped_atAlways (HTTP, no browser)
emails, email_type, social_linksscrapeContacts: true
review_count, hours, reviews, images, price_level, popular_timesmaxReviews/maxImages > 0 (detail page)

How much it costs

This actor uses pay-per-event pricing — a flat all-in rate, no add-on charges for emails, social links, reviews, or images.

EventUSD
Actor start (per GB memory)$0.01
Business result (24-field record)$0.007

At the default 3 GB memory the start fee is ~$0.03 per run.

Typical runCost
100 businesses, basic data~$0.73
1,000 businesses with emails~$7.03
1,000 businesses + 5 reviews each~$7.03
10,000 businesses with emails (geo_split: true)~$70.03

Every cost includes emails, social links, reviews, and images — one flat $7 per 1,000 results, no subscription needed.

Google Maps rate-limits datacenter IPs and forces a slower browser fallback, so residential proxies are recommended for any run over ~100 results. The proxy input is prefilled with Apify Proxy (RESIDENTIAL) — supported out of the box, billed separately by the platform. Small runs work with no proxy at all.

If you run your own scrapers (inside or outside Apify) and need reliable residential proxies for Google Maps, lead-gen, or e-commerce sites, we use DataImpulse — pay-as-you-go, per-country targeting, no monthly minimum:

👉 Get DataImpulse residential proxies (referral link)

You can also supply Bright Data, Oxylabs, SmartProxy, or any raw proxy URL via a provider object in the proxy field.

Why this Google Maps scraper

  • Emails included, not an add-on — homepage + /contact + /about crawl with personal/generic classification, at the flat rate.
  • HTTP-first, browser-second — ~1s per query on the fast path; automatic Playwright fallback only when Google blocks.
  • Compass-compatible input — same field names as compass/crawler-google-places; copy your existing config.
  • 24 data fields — including neighborhood, timezone, price level, and popular times.
  • Geo-split — beats Google's ~120-per-viewport ceiling for state- and country-level scrapes.
  • Open source — the underlying google-maps-scraper Python package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.

FAQ

Do I need a proxy to scrape Google Maps? No for small runs (under ~100 results). For larger scrapes, use a residential proxy to avoid rate limits. The proxy field defaults to Apify Proxy residential; for your own scrapers we recommend DataImpulse (referral link).

How many results can I scrape per search? Google Maps returns ~120 businesses per viewport. Set geo_split: true to auto-split a large area into a grid and collect thousands of results across the region.

Why did I get fewer results than expected? A filter usually removed them. website: "withoutWebsite" keeps only places with no website, placeMinimumStars drops anything below the threshold, and skipClosedPlaces drops closed businesses. The run log names the active filters — relax them if needed.

How do I extract Google Maps reviews? Set maxReviews above 0. Each review includes author, star rating, text, date, and the owner's response. For high-volume review pulls, use the dedicated Google Maps Reviews Scraper.

Why are some emails missing? Not every business lists an email. Service businesses (law firms, dentists, plumbers) typically have far better email coverage than restaurants or retail.

Is scraping Google Maps legal? This actor collects only publicly available business data. You are responsible for complying with Google's terms and applicable laws. Do not collect personal data without a lawful basis.

Rate this actor ⭐

If the Google Maps scraper saved you time, please leave a review on its Apify Store page — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue through the actor's Issues tab and we'll fix it fast — recency and reliability are what keep this actor ranking.

Building a full data pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.

  • Google Maps Reviews Scraper — pull every review for any place: text + English translation, star rating, photos, owner replies, and reviewer details.
  • LinkedIn Profile Scraper — scrape LinkedIn profiles via your li_at cookie: structured fields, full experience history, optional email/phone enrichment.
  • LinkedIn Jobs Scraper — scrape LinkedIn job listings with company enrichment, salary, and recruiter info. No login required.
  • TikTok Shop Product Scraper — scrape TikTok Shop products across 10 regions: variants, prices, seller info, ratings, and sold counts.