Google Maps Scraper: Extract Business Data & Leads avatar

Google Maps Scraper: Extract Business Data & Leads

Under maintenance

Pricing

$19.00/month + usage

Go to Apify Store
Google Maps Scraper: Extract Business Data & Leads

Google Maps Scraper: Extract Business Data & Leads

Under maintenance

Scrape hundreds of Google Maps business listings per query. Extract 45+ fields: phones, emails, reviews, ratings, social profiles, website tech stack, lead scores, GPS coordinates, and operating data. Faster, richer, and uncapped compared to the official Google Maps API.

Pricing

$19.00/month + usage

Rating

5.0

(1)

Developer

Web Harvester

Web Harvester

Maintained by Community

Actor stats

2

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

Google Maps Scraper

Extract 45+ data fields from every Google Maps business listing — phones, emails, reviews, social media, website tech stack, lead scores, and GPS coordinates. All from a single search query.

Apify Actor TypeScript Crawlee


What it does

Google Maps Scraper extracts detailed business information from Google Maps search results. Provide search queries like "restaurants in New York" or "dentists near me in London" and the scraper returns every matching business with its full data profile.

Unlike the Google Maps API, which caps results at 60 per query and charges per request, this scraper returns hundreds of results per query with richer data fields — including reviews, emails, social media, lead scoring, and technology detection.


Features

CategoryWhat you get
Core dataName, address, phone, website, rating, review count, hours, GPS, images, price range, status
ReviewsUp to ~300 reviews per business — text, rating, author, date, owner responses. Sortable by newest / highest / lowest / most relevant
Emails & socialEmails, Instagram, Facebook, Twitter/X, LinkedIn, YouTube, TikTok — crawled from the business website
Tech detectionCMS, ecommerce, booking, analytics, and payment platforms detected on the business website
Smart DataLead score (0–100), review keywords, owner response stats, digital presence audit, recently opened detection
MonitoringIncremental scraping — only outputs new or changed places, perfect for scheduled runs
Grid SearchAutomatically covers large areas with overlapping search points
Interactive mapHTML map with color-coded markers by rating, saved to Key-Value Store
Run MetricsDetailed stage-level execution metrics (discovery, extraction, enrichment) and block tracking
Scraping modesBrowser (Full), Hybrid (Discovery API + Browser), or Fast Mode (API only)
Three input modesSearch queries, direct Google Maps URLs, or both
FilteringBy minimum rating, minimum reviews, operational status, and category
ReliabilityResidential proxy rotation, resume on interruption, multi-language support

Quick start

  1. Open the Google Maps Scraper on Apify
  2. Click Try for free or Start
  3. Enter your search queries — one per line
  4. Optionally enable Extract Reviews and/or Extract Emails
  5. Click Start and wait for the run to finish
  6. Download results as JSON, CSV, Excel, or XML from the Dataset tab

Input examples

Minimal — just a query

{
"queries": ["restaurants in New York"]
}

Full extraction — reviews, emails, geo-targeting

{
"queries": [
"restaurants in New York",
"coffee shops in Brooklyn",
"dentists in Manhattan"
],
"maxResultsPerQuery": 200,
"enableReviews": true,
"enableEmails": true,
"maxReviewsPerPlace": 50,
"reviewSort": "newest",
"geo": "40.7128,-74.0060",
"zoom": 14,
"maxConcurrency": 6
}

Hybrid Mode — discovery API with deep extraction

{
"queries": ["restaurants in Paris"],
"hybridMode": true,
"maxResultsPerQuery": 300,
"enableReviews": true
}

Fast Mode — quick, high-volume extraction

{
"queries": ["coffee shops"],
"fastMode": true,
"geo": "40.7128,-74.0060",
"zoom": 15,
"radius": 5000
}

Direct URLs — enrich specific places

{
"directUrls": [
"https://www.google.com/maps/place/Joe's+Pizza/@40.7303,-74.0023,17z/...",
"https://www.google.com/maps/place/Lombardi's+Pizza/@40.7216,-73.9956,17z/..."
],
"enableReviews": true,
"enableEmails": true
}

Filtering — quality-only results

{
"queries": ["marketing agencies in San Francisco"],
"minRating": 4.0,
"minReviews": 10,
"excludeCategories": ["ATM", "Gas station"],
"statusFilter": "operational",
"enableEmails": true
}

Grid Search — systematic area coverage

{
"queries": ["restaurants"],
"gridSearch": true,
"geo": "48.8566,2.3522",
"radius": 15000,
"zoom": 14
}

Monitoring — daily change tracking

{
"queries": ["competitors near me"],
"geo": "40.7128,-74.0060",
"monitoringMode": true,
"monitoringRatingThreshold": 0.2,
"monitoringReviewThreshold": 10
}

Input parameters

ParameterTypeDefaultDescription
queriesstring[]requiredSearch queries to run on Google Maps. Supports custom IDs via query#!#customId.
directUrlsstring[]Google Maps place URLs to scrape directly (skips search). Normal mode only.
fastModebooleanfalseUse HTTP API instead of browser. Much faster but fewer fields. Requires geo.
hybridModebooleanfalse🚀 API-based discovery + browser-based extraction of 45+ fields. Recommended for >100 results.
maxResultsPerQueryinteger100Maximum places per query. 0 = unlimited. Max 1000.
languagestringenIETF language code (e.g., en, de, fr, ja, ar).
enableReviewsbooleanfalseExtract up to ~300 reviews per place. Not available in Fast Mode.
enableEmailsbooleanfalseCrawl business websites for emails, social media, tech stack, and digital presence.
maxReviewsPerPlaceinteger0Cap reviews per place. 0 = unlimited (~300). Requires enableReviews.
reviewSortstringnewestReview sort order: newest, most_relevant, highest, lowest.
geostringCenter point as lat,lng. Required for Fast Mode and Grid Search.
gridSearchbooleanfalseGenerate overlapping search grid. Requires geo and radius.
radiusnumber10000Radius in meters from the geographic center.
zoominteger15Map zoom level 0–21. Lower = wider area, higher = more focused.
maxConcurrencyinteger6Parallel browser tabs (Normal Mode only). Max 20.
minRatingnumber0Skip businesses below this star rating.
minReviewsinteger0Skip businesses with fewer reviews than this.
excludeCategoriesstring[]Skip businesses matching these categories (case-insensitive partial match).
statusFilterstringanyany or operational (excludes closed/temporarily closed).
monitoringModebooleanfalseOnly output new or changed places. State persists between runs on the same task.
monitoringRatingThresholdnumber0.2Minimum rating change to flag as "changed".
monitoringReviewThresholdinteger10Minimum review count change to flag as "changed".
enableMapOutputbooleantrueGenerate an interactive HTML map with color-coded markers by rating.
proxyConfigobjectResidentialApify Proxy settings. Residential proxies recommended.

Custom input IDs

By default, each result's input_id is set to the search query. To use your own identifier, append #!# (hash-bang-hash) followed by your ID:

{
"queries": [
"restaurants in New York#!#nyc-restaurants",
"coffee shops in Brooklyn#!#bk-coffee"
]
}

Results will have "input_id": "nyc-restaurants" and "input_id": "bk-coffee".

Zoom level reference

ZoomAreaBest for
10~50 kmEntire metro area or region
12~15 kmCity-wide search
14~3 kmDistrict or neighborhood
15 (default)~1.5 kmFocused neighborhood
17~300 mSingle street or block
19~50 mIndividual building

Output

Each result contains 45+ structured fields. Results are downloadable as JSON, CSV, Excel, or XML.

Output example

{
"input_id": "restaurants in New York",
"title": "Joe's Pizza",
"category": "Pizza restaurant",
"categories": ["Pizza restaurant", "Italian restaurant", "Restaurant"],
"address": "7 Carmine St, New York, NY 10014",
"complete_address": {
"borough": "Greenwich Village",
"street": "7 Carmine St",
"city": "New York",
"state": "NY",
"postal_code": "10014",
"country": "US"
},
"phone": "+1 212-366-1182",
"web_site": "http://www.joespizzanyc.com",
"link": "https://www.google.com/maps/place/Joe's+Pizza/@40.7303,-74.0023,17z/...",
"place_id": "ChIJLwjSR7VZwokRxlbSPGZPAhc",
"cid": "1659568553828468934",
"latitude": 40.7303,
"longitude": -74.0023,
"review_count": 12847,
"review_rating": 4.4,
"reviews_per_rating": { "1": 512, "2": 384, "3": 897, "4": 2689, "5": 8365 },
"status": "OPERATIONAL",
"description": "No-frills, old-school pizzeria serving classic NY-style slices since 1975.",
"price_range": "$",
"timezone": "America/New_York",
"open_hours": { "Monday": ["10:00 AM - 2:00 AM"] },
"popular_times": { "Monday": { "12": 55, "18": 85, "20": 60 } },
"thumbnail": "https://lh5.googleusercontent.com/p/...",
"images": [
{ "title": "All", "image": "https://lh5.googleusercontent.com/p/..." }
],
"owner": { "id": "103194...", "name": "Joe's Pizza", "link": "https://..." },
"is_claimed": true,
"is_recently_opened": false,
"emails": ["info@joespizzanyc.com"],
"social_media": {
"instagram": ["https://instagram.com/joespizzanyc"],
"facebook": ["https://facebook.com/joespizzanyc"],
"twitter": [],
"linkedin": [],
"youtube": [],
"tiktok": ["https://tiktok.com/@joespizzanyc"]
},
"website_tech": {
"cms": ["WordPress"],
"ecommerce": [],
"booking": [],
"analytics": ["Google Analytics", "Google Tag Manager"],
"payment": ["Square"]
},
"digital_presence": {
"score": 72,
"has_ssl": true,
"has_mobile_viewport": true,
"has_analytics": true,
"has_structured_data": true,
"cms_detected": true,
"social_platforms_count": 2
},
"owner_response_stats": {
"response_rate": 0.34,
"total_responses": 17,
"total_reviews_analyzed": 50
},
"review_keywords": [
{ "keyword": "slice", "count": 89 },
{ "keyword": "best pizza", "count": 67 },
{ "keyword": "long wait", "count": 23 }
],
"lead_score": 78,
"user_reviews": [
{
"Name": "Sarah M.",
"Rating": 5,
"Description": "Best pizza in NYC, hands down.",
"When": "3 months ago"
}
],
"user_reviews_extended": []
}

Complete field reference

FieldTypeDescription
input_idstringSearch query or custom ID that produced this result
titlestringBusiness name
categorystringPrimary category
categoriesstring[]All categories
addressstringFull formatted address
complete_addressobjectStructured address: street, city, state, postal_code, country, borough
phonestringPhone number
web_sitestringBusiness website URL
linkstringGoogle Maps URL for this place
place_idstringGoogle Place ID
cidstringGoogle CID
data_idstringGoogle internal data ID
latitudenumberGPS latitude
longitudenumberGPS longitude
review_countnumberTotal number of reviews
review_ratingnumberAverage star rating (1.0–5.0)
reviews_per_ratingobjectReview count by star rating (1–5)
reviews_linkstringDirect link to reviews page
statusstringOperating status: OPERATIONAL, CLOSED, etc.
descriptionstringBusiness description from Google
price_rangestringPrice level: $, $$, $$$, $$$$
timezonestringIANA timezone (e.g., America/New_York)
plus_codestringGoogle Plus Code
open_hoursobjectOpening hours by day of week
popular_timesobjectFoot traffic by day and hour (0–100 scale)
thumbnailstringMain thumbnail image URL
imagesarrayGallery images with titles
ownerobjectBusiness owner info: id, name, link
is_claimedbooleanWhether the listing has been claimed by the owner
is_recently_openedbooleanHeuristic: likely a recently opened business
reservationsarrayReservation links (e.g., OpenTable, Resy)
order_onlinearrayOnline ordering links (e.g., DoorDash, Uber Eats)
menuobjectMenu link and source
aboutarrayBusiness attributes: service options, accessibility, payments, etc.
user_reviewsarrayInline reviews from the listing page (up to ~8)
user_reviews_extendedarrayFull reviews when enableReviews is on (up to ~300)
emailsarrayEmail addresses found on the business website
social_mediaobjectSocial profiles: Instagram, Facebook, Twitter/X, LinkedIn, YouTube, TikTok
website_techobjectDetected technologies: CMS, ecommerce, booking, analytics, payment
digital_presenceobjectWebsite audit: SSL, mobile viewport, analytics, structured data, CMS, score
owner_response_statsobjectOwner reply metrics: response_rate, total_responses, total_reviews_analyzed
review_keywordsarrayTop keywords from reviews with frequency counts
lead_scorenumberLead quality score (0–100) based on multiple business signals

Fast Mode field availability

Fast Mode uses Google's internal HTTP API, which returns a reduced field set.

Available: input_id, title, category, categories, address, phone, web_site, latitude, longitude, review_count, review_rating, status, timezone, plus_code, open_hours, data_id, lead_score

Not available: description, popular_times, thumbnail, images, owner, reservations, order_online, menu, about, user_reviews, user_reviews_extended, emails, social_media, website_tech, digital_presence, owner_response_stats, review_keywords, is_claimed, is_recently_opened


Smart Data

Every place extraction automatically computes these intelligence fields — no extra configuration needed.

Note: social_media, website_tech, and digital_presence require enableEmails: true since they are derived from crawling the business website.

Lead score (0–100)

A composite score that ranks businesses by outreach potential:

SignalWeightWhat it measures
Website presence+15 ptsWhether the business has a website
Email availability+20 ptsContact accessibility
Social media+2 ptsPer platform (max 10 pts)
Review volume+10 pts50+ reviews
Review rating+10 pts4.0+ average rating
Is claimed+10 ptsVerified owner listing
Photos+10 pts5+ listing images
Owner response+15 ptsScaled by % reply rate

Review keywords

Top keywords and two-word phrases (bigrams) extracted from reviews using NLP. The engine tokenizes text, filters out 190+ stopwords, and ranks phrases by frequency. Requires a minimum appearance of 2 reviews.

Owner response stats

  • Response rate — % of reviews with an owner reply
  • Total responses — count of owner replies
  • Total reviews analyzed — sample size examined

Digital presence score (0–100)

CheckPointsWhat it detects
SSL (HTTPS)20Secure connection
Mobile viewport20width=device-width tag
CMS detected10Professional platform
Analytics15Traffic tracking tools
Social platforms155 pts per platform (max 15)
Structured data20Schema.org / JSON-LD

Website technology detection

CategoryExamples
CMSWordPress, Wix, Squarespace, Webflow, GoDaddy, Weebly, Joomla, Drupal
EcommerceShopify, WooCommerce, BigCommerce, Magento, PrestaShop
BookingCalendly, Acuity, OpenTable, Booking.com, Yelp Reservations, Mindbody
AnalyticsGoogle Analytics, Google Tag Manager, Facebook Pixel, Hotjar, Microsoft Clarity
PaymentStripe, Square, PayPal, Braintree

Recently opened detection

Multi-factor heuristic based on low review counts relative to rating, recency of reviews, and business metadata signals.


Monitoring mode

Track businesses over time with incremental scraping. On each run, only new or changed places are output — everything else is silently skipped.

How it works

  1. First run — all places are output and their state (rating, review count, status) is saved
  2. Subsequent runs — each place is compared against saved state
  3. New places — output with _monitoring.is_new: true
  4. Changed places — output with _monitoring.change_reasons listing what changed (rating, review count, or status). Includes previous_rating, previous_review_count, and previous_status fields.
  5. Unchanged places — silently skipped (state is still updated)

Setup

{
"queries": ["restaurants near me"],
"geo": "40.7128,-74.0060",
"monitoringMode": true,
"monitoringRatingThreshold": 0.2,
"monitoringReviewThreshold": 10
}
  • monitoringRatingThreshold: 0.2 — a rating shift from 4.5 → 4.3 triggers output; 4.5 → 4.4 does not
  • monitoringReviewThreshold: 10 — gaining 10+ new reviews since the last run triggers output

Schedule on an Apify Task to run daily or weekly. State is tied to the task — separate tasks maintain separate state stores.

Note: Monitoring mode is not supported in Fast Mode.


Use cases

Lead generation

Build targeted prospect lists with verified contact information. Get phone numbers, websites, emails, social media profiles, and lead scores — ready for outreach or CRM import.

Example: "marketing agencies in San Francisco" with enableEmails: true → 200+ agencies with phone, email, social media, tech stack, and a lead score ranking each by outreach potential.

Market research and competitive analysis

Compare ratings, review counts, price ranges, service options, and digital presence scores across hundreds of businesses instantly.

Example: "fitness gyms in Austin TX" → Compare 150+ gyms by rating, review volume, price range, website tech, and lead score.

Local SEO monitoring

Track your business and competitors over time with Monitoring Mode. Get alerted when ratings drop, review counts spike, or new competitors appear.

Review analysis

Extract thousands of reviews for sentiment analysis, trend detection, and customer feedback research. Use review keywords to identify recurring themes and owner response stats to benchmark engagement.

Data enrichment

Augment existing business databases with fresh Google Maps data. Pass a list of specific Google Maps URLs via directUrls to enrich them with the full 45+ field extraction.

Location intelligence

Use Grid Search to map every business of a given type within a radius. Download the interactive HTML map from Key-Value Store for visual analysis.

Example: Grid search for "restaurants" with geo: "40.7484,-73.9857" and radius: 2000 → maps every restaurant within 2 km of the Empire State Building.


Advanced configuration

Fast Mode

Fast Mode uses Google Maps' internal HTTP API instead of browser rendering. Significantly faster and less memory-intensive, but returns fewer fields.

Use when you need:

  • Basic business info only (name, address, phone, website, ratings, hours)
  • High-volume, speed-optimised extraction
  • No reviews or email enrichment

Requirements: geo is mandatory. radius controls the search area (default 10 km). No proxy support.

Divides a circular area into a grid of overlapping search points. Each query runs at every grid point. Results are automatically deduplicated in Fast Mode by data_id.

Requirements: geo and radius are mandatory. Works in both Normal Mode and Fast Mode.

Direct URLs

Skip search entirely by providing specific Google Maps place URLs. Ideal for enriching an existing list of businesses, re-scraping specific places, or processing a curated competitor set.

Result filtering

Apply filters to skip unwanted businesses before they reach the dataset:

{
"queries": ["restaurants in New York"],
"minRating": 4.0,
"minReviews": 10,
"excludeCategories": ["Gas station", "ATM", "Parking lot"],
"statusFilter": "operational"
}

Scraping large datasets (10,000+ places)

  • Memory — Allocate 4–8 GB
  • maxConcurrency — 4–8 browser tabs for 4 GB RAM; 2–4 for 2 GB
  • Resume — Crawlee's request queue persists progress automatically. If a run stops, restart with the same input to continue from where it left off.

Integrations

Connect Google Maps Scraper data to your existing tools:

IntegrationHow
REST APIApify API v2 — fetch datasets, trigger runs, get webhooks
Pythonapify-client PyPI package
JavaScript / Node.jsapify-client npm package
Google SheetsAuto-export results to a spreadsheet
Zapier / MakeConnect to 5,000+ apps
SlackRun completion notifications
WebhooksTrigger on run start, success, or failure

Scraping publicly available data from Google Maps is generally considered legal. The landmark hiQ Labs v. LinkedIn ruling confirmed that accessing publicly accessible data does not violate the Computer Fraud and Abuse Act.

You should however:

  • Respect Google's Terms of Service and use the data responsibly
  • Comply with local data privacy laws (GDPR, CCPA, etc.) when handling personal data such as reviewer names
  • Avoid aggressive scraping that could disrupt the service
  • Use data ethically — do not use scraped contact information for spam or harassment

This Actor does not bypass authentication or access controls. It only extracts data that is publicly visible to any Google Maps user.


Limitations

LimitationDetail
Review limitGoogle shows a maximum of ~300 reviews per business
Email scopeOnly the business website's landing page is checked
Social media scopeOnly links visible on the landing page are extracted
Fast ModeReduced fields, no proxy support, no reviews or emails
Monitoring ModeNot supported in Fast Mode
MemoryLarge runs (10K+ places) need 4–8 GB
Result countDepends on what Google Maps returns for the query
longitude fieldGPS longitude coordinate

FAQ

How many results can I get per query? Dense urban areas with broad queries (e.g., "restaurants in New York") can return 500+ results. Niche queries in small towns may return fewer than 20. Set maxResultsPerQuery: 0 for unlimited. Use Grid Search to cover larger areas.

How long does a run take? ~2–5 minutes for 100 places without reviews. Enabling reviews adds a few seconds per place. Email extraction adds a few more. Fast Mode is significantly quicker for basic data.

What happens if a run is interrupted? Crawlee's request queue persists progress automatically. Restart with the same input and it picks up where it left off — no duplicates, no lost data.

Can I target a specific location by coordinates? Yes — use the geo parameter with lat,lng format and adjust zoom. See Advanced configuration.

Why are some fields empty? Not all businesses have every field on Google Maps. price_range, description, popular_times, and menu depend on the business. In Fast Mode, many fields are always empty by design. social_media, website_tech, and digital_presence require enableEmails: true.

What are Smart Data features? Automatically computed intelligence fields: lead scoring (0–100), review keyword analysis, owner response tracking, and recently opened detection. Social media, tech detection, and digital presence require enableEmails: true.

How does lead scoring work? The score (0–100) combines review rating, review volume, website presence, email availability, social media activity, and digital presence quality. Computed for every place — including Fast Mode (with partial data).

What is Monitoring Mode? Incremental scraping: the first run saves all place states. Subsequent runs only output places that are new or have changed beyond the configured thresholds. Unchanged places are silently skipped.

What's the difference between Normal, Hybrid, and Fast Mode? Normal Mode uses a real Playwright browser for the entire process. Hybrid Mode uses Google's internal API to find results (discovery) and browsers only for extraction, which is faster and more reliable for large queries. Fast Mode uses the API for both discovery and extraction — 10x faster but returns fewer fields.

What proxy should I use? Residential proxies (the default) give the best results and lowest block rate in Normal Mode. Datacenter proxies may work for small runs. Fast Mode does not use proxies.

How does Grid Search work? Grid Search divides a circle (defined by geo + radius) into overlapping search points. Each query runs at every point, ensuring complete area coverage. Fast Mode results are deduplicated by data_id.