Google Maps Scraper avatar

Google Maps Scraper

Pricing

from $0.35 / 1,000 results

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Fast HTTP-only Google Maps scraper for places, reviews, photos, phones, emails, websites, social profiles, opening hours and lead data. Export clean business contacts at scale with no browser runtime.

Pricing

from $0.35 / 1,000 results

Rating

0.0

(0)

Developer

Blynx

Blynx

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

3

Monthly active users

2 days ago

Last modified

Share

πŸ“ Google Maps Business Leads Scraper

Find local businesses on Google Maps and export clean place, contact, review, photo, and lead-quality data.

Use it for lead generation, local SEO research, competitor mapping, CRM enrichment, review analysis, and market research by city, keyword, URL, Place ID, or an existing Apify dataset.


✨ What You Get

  • 🏒 Google Maps places: name, category, address, city, country, coordinates, Maps URL
  • ⭐ Ratings and reputation: rating, reviews count, review text, reviewer, date, likes, owner replies when available
  • πŸ“ž Business contacts: phone, website, domain, public emails, extra phones, contact pages
  • 🌐 Social profiles: Facebook, Instagram, LinkedIn, Twitter/X, YouTube, TikTok, Pinterest, Discord when found on the business website
  • πŸ–ΌοΈ Photos: main image and spreadsheet-friendly photo1Url to photo5Url
  • 🧭 Direct place enrichment: scrape from Google Maps URLs, Place IDs, feature IDs, or a previous dataset
  • πŸ“Š Lead scoring: leadScore, contactCompletenessScore, and dataQuality
  • 🩺 Run diagnostics: clear status and action hints when input, filters, or Google Maps responses produce no results

πŸš€ Quick Start

Search businesses by keyword and location

{
"mode": "FULL",
"searchStringsArray": ["dentists", "orthodontists"],
"locationQueries": ["Austin, TX"],
"maxCrawledPlacesPerSearch": 100,
"scrapePlaceDetailPage": true,
"scrapeContacts": true,
"maxContactPages": 3,
"website": "withWebsite",
"placeMinimumStars": 4,
"language": "en",
"countryCode": "US"
}

Fast search cards only

{
"mode": "SEARCH",
"searchStringsArray": ["restaurants"],
"locationQueries": ["New York, USA"],
"maxCrawledPlacesPerSearch": 50,
"scrapePlaceDetailPage": false,
"scrapeContacts": false,
"scrapeReviews": false
}

Reviews as separate rows

{
"mode": "REVIEWS",
"startUrls": [
{
"url": "https://www.google.com/maps/place/?q=place_id:ChIJvSQIgqFZwokRFYQbJdzceSs"
}
],
"maxReviews": 100,
"reviewsSort": "newest",
"outputMode": "REVIEW_ITEMS"
}

Enrich your own list

{
"mode": "CONTACTS",
"datasetId": "YOUR_DATASET_ID",
"scrapeContacts": true,
"maxContactPages": 5
}

🧭 Modes

ModeBest forMain output
FULLSearch + details + optional contacts/reviewsRich place rows
SEARCHFast discovery from keyword + locationLightweight place rows
DETAILYou already have Maps URLs / Place IDsDetailed place rows
REVIEWSReview text and ratingsReview rows or place rows with reviews
CONTACTSEmail, phone, and social enrichmentContact-ready lead rows

🧩 Input Guide

FieldDescription
searchStringsArraySearch terms such as restaurants, plumbers, hotels, coffee shops.
locationQueriesCities, states, countries, neighborhoods, or ZIP/postal codes.
maxCrawledPlacesPerSearchMaximum places saved per search term + location pair.
startUrlsDirect Google Maps place or search URLs.
placeIdsGoogle Place IDs.
featureIdsGoogle Maps feature/data IDs like 0x...:0x....
datasetIdRead places from a previous dataset containing url, googleMapsUrl, placeId, dataId, or featureId.
scrapePlaceDetailPageAdds richer place fields such as descriptions, attributes, posts, and extra links.
scrapeContactsLooks for public contact data on business websites.
maxContactPagesWebsite pages inspected per business.
scrapeReviewsFetches review text and ratings when available.
maxReviewsMaximum reviews per place. Use 1, 10, 50, etc.
reviewsSortrelevant, newest, highest, or lowest.
outputModePLACE_ITEMS keeps reviews under each place. REVIEW_ITEMS saves one row per review.
categoryFilterWordsKeep places whose category contains at least one word from your list.
placeMinimumStarsSkip places below a rating threshold.
websiteKeep all places, only places with websites, or only places without websites.
skipClosedPlacesSkip permanently closed places when the status is available.
language / countryCodeResult language and country context.
maxImagesNumber of image URLs kept per place.

πŸ“€ Output Views

The default dataset includes focused views so users do not have to dig through raw JSON.

ViewWhat it shows
OverviewMain business table: photo, name, category, address, phone, website, rating, reviews count, scores, Maps URL
Lead generationSales-ready fields: phone, emails, extra phones, website, socials, lead score, address
ContactsWebsite contact enrichment: emails, phones, social arrays, crawled contact pages, website status
ReviewsOne review per row when outputMode is REVIEW_ITEMS
PhotosMain image and photo1Url to photo5Url
DiagnosticsInput warnings, recoverable errors, and suggested next actions
All fieldsFull dataset rows

The Actor also saves a Run summary to the key-value store under OUTPUT, including status, counts, filters, diagnostics, and the dataset URL.


🧾 Example Place Row

{
"recordType": "place",
"title": "La Grande Boucherie",
"categoryName": "French restaurant",
"address": "145 W 53rd St, New York, NY 10019",
"city": "New York",
"countryCode": "US",
"phone": "(212) 510-7714",
"website": "https://www.boucherieus.com/",
"domain": "boucherieus.com",
"totalScore": 4.6,
"reviewsCount": 10342,
"latitude": 40.7626274,
"longitude": -73.9808411,
"location": {
"lat": 40.7626274,
"lng": -73.9808411
},
"url": "https://www.google.com/maps/place/?q=place_id:...",
"imageUrl": "https://lh3.googleusercontent.com/...",
"leadScore": 82,
"contactCompletenessScore": 70,
"scrapedAt": "2026-07-07T18:38:06.495091+00:00"
}

πŸ’¬ Example Review Row

{
"recordType": "review",
"placeTitle": "La Grande Boucherie",
"authorName": "Ryan VanCompernolle",
"rating": 5,
"publishedAt": "7 hours ago",
"text": "Great food and excellent service.",
"likesCount": 2,
"placeId": "ChIJ...",
"dataId": "0x...:0x...",
"placeUrl": "https://www.google.com/maps/place/?q=place_id:...",
"scrapedAt": "2026-07-07T18:38:06.495091+00:00"
}

🩺 Example Diagnostic Row

{
"recordType": "run-diagnostic",
"status": "INPUT_NEEDS_ATTENTION",
"severity": "warning",
"errorType": "input_error",
"message": "SEARCH mode requires at least one search term.",
"actionNeeded": "Add a search term such as restaurants, dentists, plumbers, or hotels.",
"scrapedAt": "2026-07-07T18:38:06.495091+00:00"
}

🧠 Practical Recipes

Find restaurants with websites and emails

{
"mode": "FULL",
"searchStringsArray": ["restaurant"],
"locationQueries": ["Chicago, IL"],
"maxCrawledPlacesPerSearch": 200,
"website": "withWebsite",
"scrapeContacts": true,
"maxContactPages": 5
}

Find businesses missing websites

{
"mode": "SEARCH",
"searchStringsArray": ["plumbers"],
"locationQueries": ["Phoenix, AZ"],
"maxCrawledPlacesPerSearch": 100,
"website": "withoutWebsite"
}

Get the newest 10 reviews for known places

{
"mode": "REVIEWS",
"startUrls": [
{ "url": "https://www.google.com/maps/place/?q=place_id:ChIJ..." }
],
"maxReviews": 10,
"reviewsSort": "newest",
"outputMode": "REVIEW_ITEMS"
}

Enrich a previous run with contacts

{
"mode": "CONTACTS",
"datasetId": "YOUR_PREVIOUS_DATASET_ID",
"scrapeContacts": true,
"maxContactPages": 3
}

βœ… Tips for Clean Runs

  • Start with a small test: 5-10 places.
  • Use one search term and one location first, then scale up.
  • Keep maxReviews reasonable for review-heavy runs.
  • Use website: "withWebsite" when you want emails or social profiles.
  • Use the Diagnostics view and Run summary if a run returns no places.
  • If filters are too strict, the run may succeed but save only a diagnostic row.

❓ FAQ

Can it extract emails from Google Maps directly?
Google Maps usually does not publish email addresses. The Actor looks for public emails on the business website when scrapeContacts is enabled.

Why are some contact fields empty?
Some businesses do not publish emails, extra phones, or social links. This is normal. The contactCompletenessScore helps you sort stronger leads.

How do I choose the number of reviews?
Set maxReviews. For example, 1 saves one review per place, 10 saves up to ten, and 50 saves up to fifty.

How are reviews matched to the right business?
Every review row includes placeTitle, placeId, dataId, and placeUrl, so reviews stay tied to their source place.

What if the run finishes with no places?
Open Results β†’ Diagnostics or Run summary. The Actor saves a diagnostic row with the likely reason and next action.

Can I use a previous dataset as input?
Yes. Use datasetId. The dataset can contain url, googleMapsUrl, placeId, dataId, featureId, or cid.


🏷️ Tags

google maps scraper Β· google maps leads Β· business contacts Β· email scraper Β· local lead generation Β· place scraper Β· google reviews Β· maps api alternative Β· crm enrichment Β· local SEO