📍 Google Maps & Local Scraper Suite: B2B Leads & Emails ($1.00/1K), 10K Reviews ($0.25/1K), Change Tracker, Local Guides, 4K Photos & Naver Place API
Complete Google Maps & Local B2B lead generation, website email & ad pixel enrichment ($1.00/1K), 10,000-review bulk extraction ($0.25/1K), stateful review change & removal tracking (NEW/REMOVED/EDITED), Local Guide forensics, uncompressed (=s0) 4K photo/menu extraction, and Naver Place Korea POI suite on Apify.
🚀 Try Live on Apify • 📓 Open in Google Colab • ⚡ RapidAPI Hub • ⚡ Zyla API Hub • ⚡ Official n8n Creator Hub • 🔧 41 Free n8n Templates • 📖 Documentation & Schemas • 📚 Engineering Playbooks
⚡ 1-Click Free Trial: Test live queries using Apify's `$5` free monthly credit • Zero login or cookies required
This repository contains ready-to-run Python SDK scripts, an interactive 1-Click Google Colab notebook (notebooks/quickstart.ipynb), 9-node n8n automation workflow .json templates, AI Agent MCP configuration (.cursor/mcp.json), and sample output datasets (JSON & CSV):
- 📓 1-Click Interactive Google Colab Notebook: Open
notebooks/quickstart.ipynbdirectly in your browser via Google Colab ↗ to inspect sample DataFrames and test live API queries with zero local setup. - 🤖 Cursor, Windsurf & Claude Code MCP Ready: Includes
.cursor/mcp.jsonpre-configured withhttps://mcp.apify.comso AI coding agents can invoke these UnitBytes scrapers natively. - 💡 Using n8n? Explore our official creator profile at n8n.io/creators/unitbytes or copy all 41 pre-built 9-node scraping workflows (
Ctrl+V) at unitbytes.com/n8n. - 📚 Engineering Playbooks: 10K Reviews Extraction Playbook • Review Monitor & Change Tracker Playbook • B2B Leads & Email Prospecting Playbook • Fake Review Forensic Playbook • Places Photo API Pricing Teardown — or browse all guides at unitbytes.com/blog.
Launch pre-configured extraction templates directly in the Apify Cloud Console with zero parameter setup:
| Task Preset | Target Extraction Use Case | Direct Launch |
|---|---|---|
| Extract Up to 10,000 Google Maps Reviews per Business (Bypass 5-Review Cap) | Bypass the official Google Places API 5-review limit. Extract full review text, star ratings, owner replies, aspect tags, and customer photos at $0.25/1K. |
⚡ Run Task Preset |
| Track Google Maps Review Deletions & Edits | Monitor Google Maps reviews for silent removals, text edits, and star rating changes. Get structured ACTIVE/REMOVED status per review URL | ⚡ Run Task Preset |
| Monitor Reviews for Car Dealers & Local Businesses | Audit Google Maps reviews for auto dealers and local businesses. Detect fake review removal, rating changes, and owner reply updates in bulk | ⚡ Run Task Preset |
| Verify Google Maps Review Removal Takedowns | Confirm if your reported Google Maps reviews were successfully removed. Verify takedown requests and get ACTIVE/REMOVED status instantly | ⚡ Run Task Preset |
| Verify Fake Google Review Takedown & Deletion | Confirm if reported fake or defamatory 1-star reviews were removed by Google. Get timestamped ACTIVE or REMOVED verification without manual checking. | ⚡ Run Task Preset |
| Local SEO Client Google Review Removal Audit | Audit client Google Business Profiles for unexpectedly dropped or filtered 5-star reviews. Differentiate between active and quietly deleted reviews. | ⚡ Run Task Preset |
| Restaurant & Hotel Google Review Change Monitor | Monitor hospitality reviews for star rating modifications, text updates, and owner reply changes. Export audit logs for brand reputation defense. | ⚡ Run Task Preset |
| Scrape Google Maps B2B Leads with Verified Emails, Tech Stacks & Ad Pixels | Extract 48 B2B lead fields per business: verified emails, phones, social profiles, website tech stack, missing ad pixel flags, and AI outreach hooks. | ⚡ Run Task Preset |
| Audit Local Guide Reviews & Contribution History | Extract full review history, ratings, photos, and places visited by an active Google Local Guide. Audit reviewer authority, credibility, and sentiment. | ⚡ Run Task Preset |
| Export Google Contributor Reviews to Excel / CSV | Download all Google Maps reviews by a contributor into a spreadsheet. Includes star ratings, review text, permalinks, and owner replies. | ⚡ Run Task Preset |
| Analyze Competitor Google Maps Reviewers | Investigate reviewers who reviewed competitors. Uncover which other businesses they frequent, their rating patterns, and identify potential brand advocates. | ⚡ Run Task Preset |
| Find Local Food & Restaurant Influencers on Google Maps | Identify Level 6-10 food critics and culinary Local Guides with hundreds of high-quality dining reviews and uploaded photos. | ⚡ Run Task Preset |
| Scout Travel & Hotel Local Guides for Tourism Marketing | Find prolific travel reviewers and hospitality Local Guides who frequently review resorts, boutique hotels, and tourist attractions. | ⚡ Run Task Preset |
| Extract High-Resolution Local Guide Photos in Original Quality | Download original full-resolution (=s0) photos uploaded by top Google Maps Local Guides with dimensions, captions, and place coordinates. | ⚡ Run Task Preset |
| Scrape Restaurant Food, Dishes & Menu Photos on Google Maps | Extract authentic customer-uploaded food, dish, drink, and menu photos with restaurant name, category, and place IDs. | ⚡ Run Task Preset |
| Track Local Guide Total Photo Views & Influencer Reach | Measure total aggregate photo view counts (e.g. 15M+ views), Local Guide levels, and points to identify top visual influencers. | ⚡ Run Task Preset |
| Extract Hotel, Resort & Vacation Photos Uploaded by Guests | Collect authentic guest-uploaded travel photos of hotel rooms, amenities, pools, and resorts with exact GPS coordinates. | ⚡ Run Task Preset |
| Audit Storefronts, Retail Signage & Commercial Photos | Gather exterior storefront images, entrance photos, and commercial signage uploaded by local contributors across US cities. | ⚡ Run Task Preset |
| Map Contributor Photos to Place IDs & GPS Coordinates | Extract photos with verified Google Place IDs, CIDs, addresses, and latitude/longitude coordinates for GIS and spatial mapping. | ⚡ Run Task Preset |
| Scrape Naver Place (네이버 플레이스) Korean Businesses, Menus & Receipt Reviews | Extract South Korean restaurants, clinics, cafes, KRW menu prices, and verified receipt reviews (영수증 리뷰) from Naver Place without Korean IP blocks. |
⚡ Run Task Preset |
| Use Case / Capability | 🧲 B2B Leads & Email Scraper | ⭐ 10K Bulk Reviews Scraper | 🛡️ Review Monitor & Change Tracker | 🕵️ Contributor & Local Guide Scraper | 📸 4K Photos, Menus & Videos Scraper | 🇰🇷 Naver Map & Place Korea Scraper | Official Google Places API |
|---|---|---|---|---|---|---|---|
| Primary Best Fit | B2B Cold Outreach, SMMA & Local SEO Prospecting | Bulk Historical Review Datasets & Sentiment AI | Scheduled Change Diffing (NEW/REMOVED/EDITED), SLA & ORM |
Fake Review Forensics & Influencer Scouting | Uncompressed (=s0) Menus, Storefronts & MP4s |
South Korea POI Leads, KRW Menus & Blog Reviews | Basic map widget display |
| Starting Price | 💰 $1.00 – $2.00 / 1K leads |
💰 $0.25 – $0.35 / 1K reviews |
$1.20 – $1.50 / 1K checks |
$0.80 – $1.00 / 1K reviews |
💰 $0.50 – $1.50 / 1K photos |
$0.80 – $1.40 / 1K items |
❌ $17.00 – $40.00+ / 1K calls |
| Verified Emails, Phones & Socials | ✅ Included Free (primary_email, emails, 6 Socials) |
— | — | — | — | ✅ Phone, Virtual Phone, Homepage & SNS Links | ❌ Emails/Socials never returned |
| Website CMS, Ad Pixels & Pitch Flags | ✅ 12 CMS + Meta/Google Pixels + 9 agency_opportunity_flags |
— | — | — | — | ✅ SmartPlace, Booking, NPay & Vertical Extras | ❌ Never returned |
| Review Extraction Depth | ✅ 1 Review Hook + 1-Click Report Link | Up to 10,000 reviews/place | Up to 10,000 reviews/place | Up to 200 reviews/user | — | ✅ Visitor Receipt + Naver Blog Reviews | Max 5 reviews (unsortable) |
| Server-Side Sort & Filter | most_relevant, lowest_rating, newest |
✅ newest, lowest_rating, highest_rating, reviewKeyword |
✅ newest, lowest_rating, highest_rating, reviewKeyword |
Chronological feed | ✅ All 9 Gallery Tabs (menu, videos, food_and_drink, etc.) |
✅ isPhotoUsed Photo Filter & KRW Menus |
❌ Capped at 5 reviews / 10 photos |
Stateful Cross-Run Diff (change_type) |
— | Stateless bulk | ✅ NEW, REMOVED, RATING_CHANGED, TEXT_EDITED, OWNER_REPLIED |
— | — | — | ❌ Not supported |
Fast, low-cost Google Maps Reviews Scraper ($0.25–$0.35/1K). Extract up to 10,000 reviews per business from Place URLs (/maps/place/...), Search Queries, or Place IDs (ChIJ...).
- Pricing:
$0.00035 / item(Pay-Per-Event —$0.00035review scraped (volume tiers from$0.00025)) - Cloud Console: https://apify.com/unitbytes/google-maps-reviews-scraper?fpr=939u3w&fp_sid=gh_gmaps
- Full Documentation & Schema: https://unitbytes.com/actors/google-maps-reviews-scraper/
- n8n Workflow File:
n8n/google-maps-reviews-scraper-n8n-workflow.json - Engineering Playbook: How to Scrape All 10,000 Google Maps Reviews per Business in 2026 (
$0.25/1Kvs. The 5-Review API Cap)
- Dual-Mode Place & Direct Review Link Extraction: Scrape up to 10,000 reviews per Business Place URL, Place ID (ChIJ...), or Search Query, OR verify individual review share links (maps.app.goo.gl/... or /maps/reviews/data=...) in one engine.
- 55 Flat Fields with SLA, Sentiment & Burner Triage: Outputs 55 flat spreadsheet columns including response_time_hours, unanswered_hours, needs_urgent_reply, is_burner_account, sentiment, aspect_tags, dining/hotel attributes, and review_report_url.
- Instant Takedown Proof & Post-Publication Edit Detection: Confirms when a disputed review is removed (status: REMOVED) while preserving business metadata for ORM billing proof, and flags silent rating or text edits (is_edited).
- 10x Faster Server-Side Sorting & Keyword Filtering: Executes reviewsSort (newest, lowest_rating, highest_rating, most_relevant) and reviewKeyword directly on Google servers, extracting 1,000+ reviews in ~10 seconds at
$0.25–$0.35/1K.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
reviewsToCheck |
array |
["https://www.google.com/maps/place/Katz's+Delic |
Paste your Google Maps Business Place URLs (/maps/place/...), Location / Business Search Queries (e.g. Katz's Delicatessen New York, Juhu), Place IDs (ChIJ...), Google Search #lrd= links, g.page/r/.../review or writereview?placeid=... |
maxReviewsPerPlace |
integer |
50 |
Maximum number of reviews to paginate and extract for each business place (/maps/place/...) or search result. (Default: 50, Max: 10,000) |
maxPlacesPerQuery |
integer |
1 |
When a plain-text search query or /maps/search/... URL is provided (e.g. Dentists in Austin TX or Restaurants in Soho), how many matching businesses from that search to extract reviews for (up to maxReviewsPerPlace reviews per business). |
reviewsSort |
string |
newest |
Choose how to sort and prioritize reviews when scraping a Google Maps Business / Place URL or Search Query: • Newest / Most Recent First (newest): Extracts the latest reviews in chronological order (newest to oldest). |
reviewKeyword |
string |
— | Optional server-side keyword filter when scraping a Business Place URL or Search Query (e.g. service, refund, manager, food, cleanliness). Leave empty to extract all reviews. |
language |
string |
en |
ISO language code (hl) for Google Maps interface and server-side review translation (e.g. en, es, fr, de, pt-BR, ar, ja, zh-TW). Foreign-language reviews are automatically translated by Google into this language inside review_text while preserving original text metadata. |
region |
string |
us |
2-letter ISO country code (gl) used to bias plain-text search queries and Google Maps regional results (e.g. us, gb, ca, au, de, fr, ae, in). |
proxyConfiguration |
object |
{"useApifyProxy": true} |
Select the proxies to use. Google actively rate-limits datacenter IPs, so Apify Residential Proxies are automatically enabled by default for maximum reliability. |
maxConcurrency |
integer |
3 |
How many targets to process in parallel. Higher values run faster. (Default: 3, Max: 10) |
Need instant synchronous GET JSON responses (<500ms live / <150ms cached) for a live B2B CRM enrichment webhook, agency prospecting dashboard, or reputation triage widget without polling async batch jobs? Use our 6-Endpoint Google Maps B2B Leads, Website Contacts, Reviews, 4K Photos & Contributor REST API:
- 👉 Test Live on RapidAPI Hub (
$0Free Tier) (x-rapidapi-host: google-maps-b2b-leads-email-tech-stack-reviews-data-api.p.rapidapi.com) - 👉 Test Live on Zyla API Hub (7-Day Free Trial) (Listing ID
14553) - 🐍 Runnable Python Script:
examples/run_gmaps_rapidapi.py
| Category | Endpoint | Method | Description |
|---|---|---|---|
| 1. B2B Lead Discovery | /v1/gmaps/search |
GET |
Search Google Maps businesses by query (e.g. dentists in Austin TX) with optional real-time website contact crawling (enrich_contacts=true), review hooks (include_review_hook=true), CMS/ad pixel detection, and 0–100 agency leadScore. |
| 2. Single Place Lead Profile | /v1/gmaps/place |
GET |
Retrieve the complete 48-field B2B lead profile for a single business by place_id (ChIJ...), Google Maps url, or exact query, including verified emails, 6 social profiles, CMS tech stack, and agencyOpportunityFlags. |
| 3. Customer Reviews & ORM | /v1/gmaps/reviews |
GET |
Extract sorted customer reviews (most_relevant, newest, highest_rating, lowest_rating) with cursor pagination, star ratings, full review text, owner replies, owner response SLA turnaround hours, and reputation triageFlags. |
| 4. Domain & Tech Stack Enrichment | /v1/gmaps/contacts |
GET |
Standalone website crawler (url or domain) extracting verified emails, phones, WhatsApp links, online booking URLs (Calendly, Mindbody, Toast), 6 social platforms, CMS platform, and Meta/Google/TikTok ad pixels. |
| 5. 4K Photos, Menus & Videos | /v1/gmaps/photos |
GET |
Extract uncompressed original/4K (=s0) photos, restaurant menus, storefront media, and MP4 videos by place_id, url, or user_id with gallery category filtering (all, menu, videos, by_owner, vibe, food_and_drink, latest, street_view_and_360). |
| 6. Contributor & Review Forensics | /v1/gmaps/contributor |
GET |
Extract Local Guide contributor profile by 21-digit user_id or /maps/contrib/... url, returning Local Guide level, points, contribution breakdown, fake-review forensicFlags, and chronological reviews across all businesses. |
from apify_client import ApifyClient
APIFY_TOKEN = os.getenv("APIFY_API_TOKEN", "YOUR_APIFY_API_TOKEN")
if not APIFY_TOKEN or APIFY_TOKEN.startswith("YOUR_"):
raise SystemExit("Please set your Apify API token: export APIFY_API_TOKEN='apify_api_...'")
client = ApifyClient(APIFY_TOKEN)
run_input = {
"reviewsToCheck": [
"https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/"
],
"reviewsSort": "newest",
"language": "en",
"region": "us",
"maxReviewsPerPlace": 50,
"maxPlacesPerQuery": 1
}
run = client.actor("unitbytes/google-maps-reviews-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("place_name"), item.get("reviewer_name"), item.get("review_stars"), item.get("review_text")){
"input_url": "https://maps.app.goo.gl/examplePlaceLink1",
"resolved_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC!2m1!1s0x89c25a177d4bf5db:0x84e51f23e8c0a75c",
"status": "ACTIVE",
"is_active": true,
"is_removed": false,
"review_id": "Ci9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC",
"place_id": "ChIJ2_VLfRdawokRXKfA6CMf5YQ",
"place_cid": "0x89c25a177d4bf5db:0x84e51f23e8c0a75c",
"review_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC!2m1!1s0x89c25a177d4bf5db:0x84e51f23e8c0a75c",
"review_report_url": "https://www.google.com/local/content/rap/report?postId=Ci9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC",
"is_edited": false,
"review_modified_timestamp": null,
"reviewer_name": "Jordan K. (Local Guide)",
"reviewer_id": "100000000000000000001",
"reviewer_url": "https://www.google.com/maps/contrib/100000000000000000001",
"reviewer_avatar_url": "https://lh3.googleusercontent.com/a-/ALV-UjW9kL2mP4qR7tV8wX1zB3cF5hJ0nM6pQ2s=s120-c-rp-mo-br100",
"reviewer_number_of_reviews": 3,
"review_stars": 1,
"review_text": "I visited this location during my first trip to New York and waited over 25 minutes for a mobile order while the counter staff ignored the pickup queue.",
"review_text_original": "I visited this location during my first trip to New York and waited over 25 minutes for a mobile order while the counter staff ignored the pickup queue.",
"review_photos": [
"https://lh3.googleusercontent.com/grass-cs/ACvplmOY0OUAUEn8J7yYHd1cCpWZkL9mP2qR7tV4=w1200-h900-k-no"
],
"review_photos_count": 1,
"review_timestamp": "2024-03-29T16:56:56.125874+00:00",
"review_date": "6 months ago",
"review_language": "en",
"business_name": "McDonald's",
"business_address": "160 Broadway, New York, NY 10038, United States",
"business_place_url": "https://www.google.com/maps/place/?q=place_id:ChIJ2_VLfRdawokRXKfA6CMf5YQ",
"business_categories": [
"Fast food restaurant",
"Coffee shop",
"Breakfast restaurant"
],
"business_primary_category": "Fast food restaurant",
"business_city": "New York",
"business_country": "United States",
"business_country_code": "US",
"business_latitude": 40.7094789,
"business_longitude": -74.0100364,
"business_timezone": "America/New_York",
"business_cover_image_url": "https://lh3.googleusercontent.com/grass-cs/ACvplmMYkL9mP2qR7tV4wX8zB1cF5hJ0nM6pQ2s=w800-h600-k-no",
"has_owner_reply": true,
"owner_reply": "Thank you for bringing this to our attention. We have addressed this with our local team.",
"owner_reply_date": "5 months ago",
"owner_reply_timestamp": "2024-04-02T14:22:10.000000+00:00",
"owner_reply_language": "en",
"text_snippet": "1 stars: I visited this location during my first trip to New York and waited over 25 minutes for a mobile order.",
"error": null,
"check_timestamp": "2026-10-01T21:08:28.579696+00:00",
"place_name": "McDonald's",
"published_at": "2024-03-29T16:56:56.125874+00:00"
}Q: How do I scrape all reviews from a Google Maps Business Place URL or Search Query? Paste any Google Maps business link (/maps/place/...), Place ID (ChIJ...), or Search Query (e.g. 'Katz's Delicatessen New York') into reviewsToCheck and set maxReviewsPerPlace (up to 10,000), reviewsSort ('newest' or 'lowest_rating'), and optional reviewKeyword.
Q: How do I check if a specific Google review was deleted or removed? Copy the share link of any review on Google Maps (Three Dots -> Share review -> Copy link) and paste it into reviewsToCheck. The Actor returns status: 'ACTIVE' (is_removed: false) if live, or status: 'REMOVED' (is_removed: true) if deleted.
Q: What is review_report_url and how does it help ORM agencies? Every active review includes a pre-built review_report_url (google.com/local/content/rap/report?postId=...) that opens Google's official Report a Policy Violation (RAP) dispute screen directly for that exact review.
Q: When a review is deleted (status: 'REMOVED'), can I still see which business it belonged to? Yes. Even after Google deletes the review text and author profile from public view, the Actor resolves and preserves business_name, business_address, place_cid, business_city, and business_categories for client billing proof.
🚀 Google Maps Review Monitor & Change Tracker (Alerts & ORM) (unitbytes/google-maps-reviews-tracker)
Monitor Google Maps businesses for NEW, REMOVED, EDITED, or UNANSWERED reviews. Diff Place URLs across runs, sort 1-star complaints first, filter by keyword, audit owner reply SLAs (response_time_hours), flag burner accounts, and generate 1-click Google dispute links (review_report_url).
- Pricing:
$0.0015 / item(Pay-Per-Event —$0.0015result (volume tiers from$0.0012)) - Cloud Console: https://apify.com/unitbytes/google-maps-reviews-tracker?fpr=939u3w&fp_sid=gh_gmaps
- Full Documentation & Schema: https://unitbytes.com/actors/google-maps-reviews-tracker/
- n8n Workflow File:
n8n/google-maps-reviews-tracker-n8n-workflow.json - Engineering Playbook: Google Maps Review Monitor & Change Tracker Guide (2026): Track New, Removed, Edited & Unanswered Reviews
- Cross-Run Change Detection (trackChanges): Persists a baseline per business across scheduled runs and tags every review with change_type: NEW, REMOVED, RATING_CHANGED, TEXT_EDITED, OWNER_REPLIED, or UNCHANGED.
- Auto-Detect Deleted Reviews & Recover Context: When a tracked review disappears from a Business Place URL, the engine pings its saved permalink to confirm deletion (status: REMOVED) and restores reviewer_name, previous_stars, and previous_text.
- 1-Click Google Policy Dispute Links (RAP): Generates a direct review_report_url for every active review so ORM agencies can open Google's official Report a Policy Violation workflow in one click.
- Dual Direct-Link & Full-Place Audit Modes: Verify specific review share links (maps.app.goo.gl) in seconds or audit up to 10,000 reviews per Google Maps Place URL, Place ID, or search query.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
reviewsToCheck |
array |
["https://www.google.com/maps/place/Katz's+Delic |
Paste your Google Maps Business Place URLs (/maps/place/...), Search Queries (e.g. Katz's Delicatessen New York), Place IDs (ChIJ...), OR individual Review Share Links (maps.app.goo.gl/..., /maps/reviews/data=...) here. |
trackChanges |
boolean |
True |
Saves a persistent baseline snapshot per Place in the review-audit-baseline Named Key-Value Store across runs. On subsequent runs, automatically tags every review with change_type (NEW, REMOVED, RATING_CHANGED, TEXT_EDITED, OWNER_REPLIED, or UNCHANGED), computes. |
verifyDisappearedReviews |
boolean |
True |
When trackChanges is enabled and a previously seen review disappears from the current Place batch, automatically performs a direct single-review verification check to confirm if Google removed/deleted it (status: REMOVED, change_type: REMOVED) and restores its original author. |
maxReviewsPerPlace |
integer |
50 |
Maximum number of reviews to inspect for each Google Maps Business / Place URL (/maps/place/...) or search result. (Default: 50, Max: 10,000) |
maxPlacesPerQuery |
integer |
1 |
When monitoring a plain-text search query or /maps/search/... URL (e.g. Dentists in Austin TX), how many matching businesses from that search to audit (up to maxReviewsPerPlace reviews per business). (Default: 1, Max: 20) |
reviewsSort |
string |
newest |
Choose how to sort reviews when inspecting a Business Place URL or Search Query: • Newest / Most Recent First (newest): Inspects the latest reviews in chronological order. |
reviewKeyword |
string |
— | Optional server-side keyword filter when auditing a Business Place URL or Search Query (e.g. scam, refund, rude, fake, manager). Leave empty to inspect all reviews. |
language |
string |
en |
ISO language code (hl) for Google Maps interface and server-side review translation (e.g. en, es, fr, de, pt-BR, ar, ja, zh-TW). Foreign-language reviews are automatically translated by Google into this language inside review_text. |
region |
string |
us |
2-letter ISO country code (gl) used to bias plain-text search queries and Google Maps regional results (e.g. us, gb, ca, au, de, fr, ae, in). |
proxyConfiguration |
object |
{"useApifyProxy": true} |
Select the proxies to use. Google actively rate-limits datacenter IPs, so Apify Residential Proxies are automatically enabled by default for maximum reliability. |
maxConcurrency |
integer |
3 |
How many targets to verify in parallel. Higher values run faster. (Default: 3, Max: 10) |
from apify_client import ApifyClient
APIFY_TOKEN = os.getenv("APIFY_API_TOKEN", "YOUR_APIFY_API_TOKEN")
if not APIFY_TOKEN or APIFY_TOKEN.startswith("YOUR_"):
raise SystemExit("Please set your Apify API token: export APIFY_API_TOKEN='apify_api_...'")
client = ApifyClient(APIFY_TOKEN)
run_input = {
"reviewsToCheck": [
"https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/"
],
"trackChanges": True,
"verifyDisappearedReviews": True,
"reviewsSort": "newest",
"language": "en",
"region": "us"
}
run = client.actor("unitbytes/google-maps-reviews-tracker").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("place_name"), item.get("change_type"), item.get("review_stars"), item.get("review_text")){
"input_url": "https://maps.app.goo.gl/examplePlaceLink1",
"resolved_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC!2m1!1s0x89c25a177d4bf5db:0x84e51f23e8c0a75c",
"status": "ACTIVE",
"change_type": "NEW",
"previous_stars": null,
"stars_delta": null,
"previous_text": null,
"response_time_hours": 93.43,
"unanswered_hours": null,
"is_burner_suspect": false,
"triage_flags": [
"NEW_REVIEW"
],
"is_active": true,
"is_removed": false,
"review_id": "Ci9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC",
"place_id": "ChIJ2_VLfRdawokRXKfA6CMf5YQ",
"place_cid": "0x89c25a177d4bf5db:0x84e51f23e8c0a75c",
"review_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC!2m1!1s0x89c25a177d4bf5db:0x84e51f23e8c0a75c",
"review_report_url": "https://www.google.com/local/content/rap/report?postId=Ci9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC",
"is_edited": false,
"review_modified_timestamp": null,
"reviewer_name": "Jordan K. (Local Guide)",
"reviewer_id": "100000000000000000001",
"reviewer_url": "https://www.google.com/maps/contrib/100000000000000000001",
"reviewer_avatar_url": "https://lh3.googleusercontent.com/a-/ALV-UjW9kL2mP4qR7tV8wX1zB3cF5hJ0nM6pQ2s=s120-c-rp-mo-br100",
"reviewer_number_of_reviews": 3,
"review_stars": 1,
"review_text": "I visited this location during my first trip to New York and waited over 25 minutes for a mobile order while the counter staff ignored the pickup queue.",
"review_text_original": "I visited this location during my first trip to New York and waited over 25 minutes for a mobile order while the counter staff ignored the pickup queue.",
"review_photos": [
"https://lh3.googleusercontent.com/grass-cs/ACvplmOY0OUAUEn8J7yYHd1cCpWZkL9mP2qR7tV4=w1200-h900-k-no"
],
"review_photos_count": 1,
"review_timestamp": "2024-03-29T16:56:56.125874+00:00",
"review_date": "6 months ago",
"review_language": "en",
"business_name": "McDonald's",
"business_address": "160 Broadway, New York, NY 10038, United States",
"business_place_url": "https://www.google.com/maps/place/?q=place_id:ChIJ2_VLfRdawokRXKfA6CMf5YQ",
"business_categories": [
"Fast food restaurant",
"Coffee shop",
"Breakfast restaurant"
],
"business_primary_category": "Fast food restaurant",
"business_city": "New York",
"business_country": "United States",
"business_country_code": "US",
"business_latitude": 40.7094789,
"business_longitude": -74.0100364,
"business_timezone": "America/New_York",
"business_cover_image_url": "https://lh3.googleusercontent.com/grass-cs/ACvplmMYkL9mP2qR7tV4wX8zB1cF5hJ0nM6pQ2s=w800-h600-k-no",
"has_owner_reply": true,
"owner_reply": "Thank you for bringing this to our attention. We have addressed this with our local team.",
"owner_reply_date": "5 months ago",
"owner_reply_timestamp": "2024-04-02T14:22:10.000000+00:00",
"owner_reply_language": "en",
"text_snippet": "1 stars: I visited this location during my first trip to New York and waited over 25 minutes for a mobile order.",
"error": null,
"check_timestamp": "2026-10-01T21:08:28.579696+00:00",
"place_name": "McDonald's",
"published_at": "2024-03-29T16:56:56.125874+00:00"
}Q: How do I check if a specific Google review was deleted or removed? On Google Maps, click Share review → Copy link on any review and paste that link (maps.app.goo.gl/... or /maps/reviews/data=...) into reviewsToCheck. The Actor returns status: ACTIVE or REMOVED in seconds.
Q: Can I also audit all reviews from a Google Maps Business Place URL or Search Query? Yes. Paste any Google Maps business link (/maps/place/...), Place ID (ChIJ...), or search query into reviewsToCheck and set maxReviewsPerPlace (up to 10,000 reviews), sort order, and star rating filters.
Q: What is review_report_url and how does it help ORM agencies? Every active review includes a pre-built review_report_url (https://www.google.com/local/content/rap/report?postId=...) that opens Google's official Report a Policy Violation (RAP) dispute screen in one click.
Q: How does cross-run change detection (trackChanges) work? When trackChanges is enabled, the Actor compares current reviews against your saved baseline and tags every review as NEW, REMOVED, RATING_CHANGED, TEXT_EDITED, OWNER_REPLIED, or UNCHANGED.
Fast, low-cost Google Maps B2B Leads & Email Scraper ($1.00–$2.00/1K). Extract verified business emails, phones, WhatsApp, LinkedIn/Instagram/Facebook profiles, unclaimed GMB status, tech stack (WordPress/Shopify/Pixels), and cold-outreach review hooks into 48 flat CSV/Excel fields.
- Pricing:
$0.002 / item(Pay-Per-Event —$0.002b2b lead & contact scraped (volume tiers from$0.001)) - Cloud Console: https://apify.com/unitbytes/google-maps-leads-scraper?fpr=939u3w&fp_sid=gh_gmaps
- Full Documentation & Schema: https://unitbytes.com/actors/google-maps-leads-scraper/
- n8n Workflow File:
n8n/google-maps-leads-scraper-n8n-workflow.json - Engineering Playbook: Google Maps B2B Leads & Email Scraper Guide (2026): Extract Verified Emails, Tech Stacks, Ad Pixels & Outreach Hooks (
$1.00/1K)
- Google Maps + Website Email & Social Enrichment: Automatically visits each business's official website plus /contact and /about subpages to extract verified emails (prioritizing owner@, founder@, ceo@, contact@ in primary_email) and E.164 phone numbers.
- High-Intent Agency Opportunity Flags & Lead Score (0–100): Audits every prospect for actionable marketing gaps including UNCLAIMED_GBP (with 1-click claim_business_url), MISSING_META_PIXEL, MISSING_GOOGLE_TAG, NO_ONLINE_BOOKING, and LOW_RATING_UNDER_4_2.
- Website CMS, Ad Pixels & Online Booking Detection: Detects 12 CMS platforms (WordPress, Shopify, Wix, Webflow, GoHighLevel), 12 martech/ad pixels (Meta Pixel, Google Ads, TikTok Pixel, HubSpot), and 12+ booking widgets (Calendly, Mindbody, Toast, OpenTable).
- Built-In Cold-Outreach Review Hooks (reviewHookType): Extracts a real customer review snippet (review_hook_text, review_hook_stars, review_hook_author) plus a 1-click Google dispute link in most_relevant, lowest_rating, or newest modes.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
searchQueries |
array |
["dentists in Austin TX"] |
Enter your B2B category + city search queries (e.g. dentists in Austin TX, roofing contractors in Miami FL, medspas in Beverly Hills), Google Maps Search URLs (/maps/search/...), Business Place URLs (/maps/place/...), Place IDs (ChIJ...), or GPS coordinates (30.2672, -97.7431). |
maxPlacesPerQuery |
integer |
20 |
Maximum number of businesses to discover and enrich for each search query or /maps/search/... URL. (Default: 20, Max: 200) |
scrapeContacts |
boolean |
True |
When enabled (default), automatically visits each business's official website and /contact / /about pages to extract verified email addresses (primary_email, emails), social media links (linkedin_url, instagram_url, facebook_url, tiktok_url, youtube_url), WhatsApp links, online booking links, website CMS (WordPress, Shopify, Wix, Webflow), and advertising pixels (Meta Pixel, Google Tag Manager). |
includeReviewHook |
boolean |
True |
When enabled (default), extracts a featured customer review snippet (review_hook_text, review_hook_stars, review_hook_author, review_hook_date, review_hook_report_url) for each business so you can personalize cold emails or pitch reputation management services. |
reviewHookType |
string |
most_relevant |
Choose which review to extract for the cold-outreach hook: • Most Relevant Highlight (most_relevant): Best overall review snippet for personalized cold email icebreakers. • Lowest Rating / 1-Star Complaint First (lowest_rating): Pulls a 1-star or 2-star complaint plus its 1-click Google dispute link (review_hook_report_url) — ideal for reputation management (ORM) agencies. • Newest Review (newest): Pulls the most recent customer review. |
language |
string |
en |
ISO language code (hl) for Google Maps results and categories (e.g. en, es, fr, de, pt-BR, ar, ja). |
region |
string |
us |
2-letter ISO country code (gl) used to bias search queries (e.g. us, gb, ca, au, de, fr, ae, in). |
proxyConfiguration |
object |
{"useApifyProxy": true} |
Select the proxies to use. Apify Residential Proxies are automatically enabled by default for reliable Google Maps discovery. |
maxConcurrency |
integer |
3 |
How many search targets to process in parallel. (Default: 3, Max: 10) |
Need instant synchronous GET JSON responses (<500ms live / <150ms cached) for a live B2B CRM enrichment webhook, agency prospecting dashboard, or reputation triage widget without polling async batch jobs? Use our 6-Endpoint Google Maps B2B Leads, Website Contacts, Reviews, 4K Photos & Contributor REST API:
- 👉 Test Live on RapidAPI Hub (
$0Free Tier) (x-rapidapi-host: google-maps-b2b-leads-email-tech-stack-reviews-data-api.p.rapidapi.com) - 👉 Test Live on Zyla API Hub (7-Day Free Trial) (Listing ID
14553) - 🐍 Runnable Python Script:
examples/run_gmaps_rapidapi.py
| Category | Endpoint | Method | Description |
|---|---|---|---|
| 1. B2B Lead Discovery | /v1/gmaps/search |
GET |
Search Google Maps businesses by query (e.g. dentists in Austin TX) with optional real-time website contact crawling (enrich_contacts=true), review hooks (include_review_hook=true), CMS/ad pixel detection, and 0–100 agency leadScore. |
| 2. Single Place Lead Profile | /v1/gmaps/place |
GET |
Retrieve the complete 48-field B2B lead profile for a single business by place_id (ChIJ...), Google Maps url, or exact query, including verified emails, 6 social profiles, CMS tech stack, and agencyOpportunityFlags. |
| 3. Customer Reviews & ORM | /v1/gmaps/reviews |
GET |
Extract sorted customer reviews (most_relevant, newest, highest_rating, lowest_rating) with cursor pagination, star ratings, full review text, owner replies, owner response SLA turnaround hours, and reputation triageFlags. |
| 4. Domain & Tech Stack Enrichment | /v1/gmaps/contacts |
GET |
Standalone website crawler (url or domain) extracting verified emails, phones, WhatsApp links, online booking URLs (Calendly, Mindbody, Toast), 6 social platforms, CMS platform, and Meta/Google/TikTok ad pixels. |
| 5. 4K Photos, Menus & Videos | /v1/gmaps/photos |
GET |
Extract uncompressed original/4K (=s0) photos, restaurant menus, storefront media, and MP4 videos by place_id, url, or user_id with gallery category filtering (all, menu, videos, by_owner, vibe, food_and_drink, latest, street_view_and_360). |
| 6. Contributor & Review Forensics | /v1/gmaps/contributor |
GET |
Extract Local Guide contributor profile by 21-digit user_id or /maps/contrib/... url, returning Local Guide level, points, contribution breakdown, fake-review forensicFlags, and chronological reviews across all businesses. |
from apify_client import ApifyClient
APIFY_TOKEN = os.getenv("APIFY_API_TOKEN", "YOUR_APIFY_API_TOKEN")
if not APIFY_TOKEN or APIFY_TOKEN.startswith("YOUR_"):
raise SystemExit("Please set your Apify API token: export APIFY_API_TOKEN='apify_api_...'")
client = ApifyClient(APIFY_TOKEN)
run_input = {
"searchQueries": ["dentists in Austin TX"],
"maxPlacesPerQuery": 20,
"reviewHookType": "most_relevant",
"language": "en",
"region": "us"
}
run = client.actor("unitbytes/google-maps-leads-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("business_name"), item.get("primary_email"), item.get("phone"), item.get("website"), item.get("rating")){
"input_query": "dentists in Austin TX",
"status": "ACTIVE",
"scraped_at": "2026-10-24T17:30:00.000000+00:00",
"error": null,
"business_name": "Austin Smile & Implant Center",
"place_id": "ChIJL6x82jK1RIYR8k8W1z0X5aA",
"place_cid": "9576097791875393372",
"feature_id": "0x8644b599a0f15555:0x84e51f23e8c0a75c",
"knowledge_graph_id": "/g/11b6_r8xyz",
"primary_category": "Dentist",
"categories": [
"Dentist",
"Cosmetic dentist",
"Dental clinic"
],
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJL6x82jK1RIYR8k8W1z0X5aA",
"price_level": null,
"primary_email": "contact@austinsmilecenter.example.com",
"emails": [
"contact@austinsmilecenter.example.com"
],
"email_count": 1,
"has_email": true,
"phone": "(512) 555-0199",
"phone_international": "+15125550199",
"website_phones": [],
"whatsapp_url": null,
"website": "https://www.austinsmilecenter.example.com/",
"domain": "austinsmilecenter.example.com",
"contact_page_url": "https://www.austinsmilecenter.example.com/contact/",
"booking_url": "https://calendly.com/austin-smile-center",
"linkedin_url": null,
"instagram_url": "https://www.instagram.com/austinsmilecenter",
"facebook_url": "https://www.facebook.com/austinsmilecenter",
"twitter_url": null,
"youtube_url": null,
"tiktok_url": null,
"social_urls": [
"https://www.instagram.com/austinsmilecenter",
"https://www.facebook.com/austinsmilecenter"
],
"address": "1200 Congress Ave, Austin, TX 78701",
"street": "1200 Congress Ave",
"neighborhood": "Downtown Austin",
"city": "Austin",
"state": "Texas",
"postal_code": "78701",
"country_code": "US",
"country": "United States",
"plus_code": "7624+8P Austin, Texas",
"latitude": 30.273412,
"longitude": -97.740518,
"timezone": "America/Chicago",
"rating": 4.9,
"reviews_count": 342,
"is_claimed": true,
"claim_business_url": null,
"working_hours": [
"Monday: 8 AM–5 PM",
"Tuesday: 8 AM–5 PM",
"Wednesday: 8 AM–5 PM"
],
"cover_image_url": "https://lh3.googleusercontent.com/p/AF1QipMkL9mP2qR7tV4wX8zB1cF5hJ0nM6pQ2s=s0",
"website_cms": "WordPress",
"website_tech_stack": [
"WordPress",
"Calendly"
],
"has_meta_pixel": false,
"has_google_ads_tag": false,
"lead_score": 100,
"agency_opportunity_flags": [
"MISSING_META_PIXEL",
"MISSING_GOOGLE_TAG"
],
"review_hook_stars": 5,
"review_hook_author": "Alex M.",
"review_hook_date": "2 weeks ago",
"review_hook_text": "Great experience with the dental team. Fast check-in, modern office, and very helpful staff.",
"review_hook_report_url": "https://www.google.com/local/review/rap/report?postId=Ci9DQUlRQUNvZENodHljRjlvT2xSallXNWtVbTlqYTJWMWMyVnlVbkJ5YjJacGJHVm5ZeUFC"
}Q: Does Google Maps show email addresses natively, and how does this Actor extract them? Google Maps does not display email addresses on business cards. When scrapeContacts is enabled, this Actor visits each business's official website plus /contact and /about pages to extract verified business emails.
Q: How does decision-maker email prioritization (primary_email) work? The enrichment engine decodes obfuscated mailto links, filters out noreply/sentry/asset strings, and ranks verified emails by prioritizing domain-matched executive prefixes (owner@, founder@, ceo@, dr@, info@).
Q: What are agency_opportunity_flags and lead_score (0–100)? Every business is audited for digital marketing gaps and tagged with filterable flags—UNCLAIMED_GBP, NO_WEBSITE, NO_EMAIL_ON_SITE, MISSING_META_PIXEL, MISSING_GOOGLE_TAG, NO_ONLINE_BOOKING, and LOW_RATING_UNDER_4_2.
Q: How much does enriched Google Maps B2B lead extraction cost?
Runs start at $1.00 per 1,000 leads ($0.0010–$0.0020/lead) with all 48 flat fields—website emails, social links, CMS/ad pixels, booking widgets, and review hooks—included at zero extra add-on fees.
🚀 Google Maps Contributor Reviews Scraper (Local Guides) (unitbytes/google-maps-contributor-scraper)
Scrape Google Maps contributor reviews, reviewer profiles, and Local Guide histories in <2s. Paste any Google Maps business place URL, search query, review link, or contributor URL to extract all reviews, reviewer ratings, levels, photos, owner replies & fake review flags.
- Pricing:
$0.002 / profile(Pay-Per-Event —$0.002contributor profile,$0.001extracted review (volume tiers from$0.0008)) - Cloud Console: https://apify.com/unitbytes/google-maps-contributor-scraper?fpr=939u3w&fp_sid=gh_gmaps
- Full Documentation & Schema: https://unitbytes.com/actors/google-maps-contributor-scraper/
- n8n Workflow File:
n8n/google-maps-contributor-scraper-n8n-workflow.json - Engineering Playbook: How to Audit Fake 1-Star Google Reviews, Local Guide Contributors & Track Takedowns in 2026
- Deleted & Edited Review Auditing: Track changes across review histories to identify when critical reviews are quietly scrubbed or modified.
- Local Guide Points & Level Scoring: Extracts exact contributor level (Level 1-10), total review points, badge history, and review trust weights.
- Syndicate & Review Farm Detection: Audit reviewer historical patterns to detect coordinated 1-star attack networks or paid review rings.
- Full Review Text & Rating Distribution: Extracts star rating, detailed review paragraphs, owner response timestamps, and attached review photo links.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
contributors |
array |
["https://www.google.com/maps/contrib/1000000000 |
Type any Business Search Query (e.g. Katz's Delicatessen New York), Area/Neighborhood Query (Juhu), or paste a Google Maps Business Place URL, Direct Review Link, Contributor Profile URL, Google Search #lrd= Link, writereview?placeid= Link, g.page/r/... |
maxReviews |
integer |
10 |
How many reviews to extract per contributor (0 to 200). Prefilled at 50 for rich review history auditing; set up to 200 for complete review history (200 is Google Maps' maximum per contributor query). |
scrapeReviews |
boolean |
True |
If enabled, extracts full reviews written by the contributor, including stars, full text, direct review permalinks, place info, and owner replies. |
placeSort |
string |
negative_and_newest |
When entering a Business Search Query or Business Place URL (/maps/place/...), choose which reviewers to discover and audit: • Negative (1/2) + Newest (Default): Prioritizes 1-star & 2-star negative reviewers first, followed by newest reviewers. |
maxReviewersPerPlace |
integer |
20 |
Maximum number of unique reviewers to discover when a Business Search Query or Business Place URL (/maps/place/...) is provided (1 to 10,000, default 20). |
keyword |
string |
— | Optional server-side keyword filter (e.g. pastrami, scam, rude, manager, refund, wait time). When discovering contributors from a Business Place URL or Business Search Query, Google Maps filters the business's reviews to only those mentioning this keyword and audits those. |
outputFormat |
string |
flattened |
Choose dataset layout: 'flattened' produces 1 row per review (best for Excel, CSV, Google Sheets), while 'nested' outputs 1 complete record per contributor profile with a reviews array (best for JSON/API integrations). |
language |
string |
en |
Language code for Google Maps results (e.g. 'en', 'es', 'fr', 'de'). Default is 'en'. |
country |
string |
us |
Two-letter country code for regional formatting and location bias (e.g. 'us', 'gb', 'fr', 'de'). Default is 'us'. |
proxyConfiguration |
object |
{"useApifyProxy": true, "apifyProxyGroups": ["RE |
Proxies to use. Apify Residential Proxies are enabled by default to prevent Google rate limits and 429/403 blocks. |
maxConcurrency |
integer |
3 |
Number of profiles to scrape concurrently (1 to 10). |
Need instant synchronous GET JSON responses (<500ms live / <150ms cached) for a live B2B CRM enrichment webhook, agency prospecting dashboard, or reputation triage widget without polling async batch jobs? Use our 6-Endpoint Google Maps B2B Leads, Website Contacts, Reviews, 4K Photos & Contributor REST API:
- 👉 Test Live on RapidAPI Hub (
$0Free Tier) (x-rapidapi-host: google-maps-b2b-leads-email-tech-stack-reviews-data-api.p.rapidapi.com) - 👉 Test Live on Zyla API Hub (7-Day Free Trial) (Listing ID
14553) - 🐍 Runnable Python Script:
examples/run_gmaps_rapidapi.py
| Category | Endpoint | Method | Description |
|---|---|---|---|
| 1. B2B Lead Discovery | /v1/gmaps/search |
GET |
Search Google Maps businesses by query (e.g. dentists in Austin TX) with optional real-time website contact crawling (enrich_contacts=true), review hooks (include_review_hook=true), CMS/ad pixel detection, and 0–100 agency leadScore. |
| 2. Single Place Lead Profile | /v1/gmaps/place |
GET |
Retrieve the complete 48-field B2B lead profile for a single business by place_id (ChIJ...), Google Maps url, or exact query, including verified emails, 6 social profiles, CMS tech stack, and agencyOpportunityFlags. |
| 3. Customer Reviews & ORM | /v1/gmaps/reviews |
GET |
Extract sorted customer reviews (most_relevant, newest, highest_rating, lowest_rating) with cursor pagination, star ratings, full review text, owner replies, owner response SLA turnaround hours, and reputation triageFlags. |
| 4. Domain & Tech Stack Enrichment | /v1/gmaps/contacts |
GET |
Standalone website crawler (url or domain) extracting verified emails, phones, WhatsApp links, online booking URLs (Calendly, Mindbody, Toast), 6 social platforms, CMS platform, and Meta/Google/TikTok ad pixels. |
| 5. 4K Photos, Menus & Videos | /v1/gmaps/photos |
GET |
Extract uncompressed original/4K (=s0) photos, restaurant menus, storefront media, and MP4 videos by place_id, url, or user_id with gallery category filtering (all, menu, videos, by_owner, vibe, food_and_drink, latest, street_view_and_360). |
| 6. Contributor & Review Forensics | /v1/gmaps/contributor |
GET |
Extract Local Guide contributor profile by 21-digit user_id or /maps/contrib/... url, returning Local Guide level, points, contribution breakdown, fake-review forensicFlags, and chronological reviews across all businesses. |
from apify_client import ApifyClient
APIFY_TOKEN = os.getenv("APIFY_API_TOKEN", "YOUR_APIFY_API_TOKEN")
if not APIFY_TOKEN or APIFY_TOKEN.startswith("YOUR_"):
raise SystemExit("Please set your Apify API token: export APIFY_API_TOKEN='apify_api_...'")
client = ApifyClient(APIFY_TOKEN)
run_input = {
"contributors": ["https://www.google.com/maps/contrib/100000000000000000002"],
"maxReviews": 50,
"maxReviewersPerPlace": 20,
"scrapeReviews": True,
"placeSort": "negative_and_newest",
"outputFormat": "flattened"
}
run = client.actor("unitbytes/google-maps-contributor-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("contributor_name"), item.get("place_name"), item.get("rating"), item.get("review_text")){
"contributor_name": "Alex M. (Local Guide)",
"contributor_id": "100000000000000000002",
"contributor_url": "https://www.google.com/maps/contrib/100000000000000000002/reviews",
"avatar_url": "https://lh3.googleusercontent.com/a-/ALV-UjXc8pSarhgq2xG0mE6F3jK9vL2pQ8wR5tY1=s120-c-rp-mo-ba5-br100",
"is_local_guide": true,
"local_guide_level": 7,
"local_guide_points": 8119,
"points_to_next_level": 15000,
"points_away_from_next_level": "6,881 points to Level 8",
"current_level_min_points": 5000,
"next_level_target_points": 15000,
"badge_url": "https://maps.gstatic.com/mapfiles/localguides/badges/18px/level7.png",
"next_level_badge_url": "https://maps.gstatic.com/mapfiles/localguides/badges/18px/level8.png",
"total_reviews_count": 113,
"total_ratings_count": 11,
"total_photos_count": 878,
"total_videos_count": 21,
"total_captions_count": 45,
"total_answers_count": 557,
"total_edits_count": 3,
"total_places_added_count": 1,
"total_roads_added_count": 0,
"total_qa_count": 8,
"total_reported_incorrect_count": 0,
"is_private": false,
"status": "ACTIVE",
"review_id": "Ci9DQUlRQUNvZENodHljRjlvT2p4R2FtVlhNblJ2Ym1sMFVHMXdaVFl3WkV4V1lXYxAB",
"place_name": "Harbor View Bistro",
"place_category": "Cafe",
"place_category_slug": "cafe",
"place_address": "450 Broadway, New York, NY 10013",
"place_street_address": "517 Union Blvd Unit B",
"place_id": "ChIJv8t4KBT_wokRCf-EIyWAT54",
"place_url": "https://www.google.com/maps/place//data=!4m2!3m1!1s0x89c2ff142878cbbf:0x9e4f80252384ff09",
"place_cover_photo_url": "https://lh3.googleusercontent.com/p/AF1QipN38Xy54W_kL9mP2qR7tV4wX8zB1cF5hJ0=w800-h600-k-no",
"place_city": "Totowa",
"place_country": "United States",
"place_country_code": "US",
"place_timezone": "America/New_York",
"place_kgmid": "/g/11bwh5xyjm",
"place_price_range": "$10–20",
"latitude": 40.901379,
"longitude": -74.216956,
"stars": 5,
"review_date": "2 weeks ago",
"review_timestamp": 1760529600000,
"review_datetime_utc": "2026-09-05T18:18:21+00:00",
"is_review_edited": false,
"review_created_timestamp": 1760529600000,
"review_created_datetime_utc": "2026-09-05T18:18:21+00:00",
"review_updated_timestamp": 1760529600000,
"review_updated_datetime_utc": "2026-09-05T18:18:21+00:00",
"review_text": "Harbor View Bistro is a wonderful new addition to the area. The beachy atmosphere is bright and welcoming, and the brunch menu had fantastic vegetarian options with attentive service.",
"review_language": "en",
"review_permalink": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2p4R2FtVlhNblJ2Ym1sMFVHMXdaVFl3WkV4V1lXYxAB!2m1!1s0x0:0x9e4f80252384ff09",
"review_report_url": "https://www.google.com/local/content/rap/report?postId=Ci9DQUlRQUNvZENodHljRjlvT2p4R2FtVlhNblJ2Ym1sMFVHMXdaVFl3WkV4V1lXYxAB",
"contrib_place_url": "https://www.google.com/maps/contrib/100000000000000000002/place/ChIJv8t4KBT_wokRCf-EIyWAT54",
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ACvplmNaKbdVwMT1TibHnx1u8sfePPuH8hInF7w7ROzAMp5U9kL2mQ=w1200-h900-k-no"
],
"dining_mode": "Dine in",
"meal_type": "Brunch",
"spend_per_person": "$50–60",
"food_rating": 5,
"service_rating": 5,
"atmosphere_rating": 5,
"wait_time": "No wait",
"noise_level": "Quiet",
"seating_type": "Indoor dining",
"reservation_policy": "No reservation needed",
"group_size": "2 people",
"vegetarian_recommended": true,
"review_aspects": {
"mode": "Dine in",
"meal_type": "Brunch",
"price_range": "$50–60",
"food_aspect": 5,
"service_aspect": 5,
"atmosphere_aspect": 5,
"wait_time": "No wait",
"noise_level": "Quiet",
"seating_type": "Indoor dining",
"reservation_policy": "No reservation needed",
"group_size": "2 people",
"vegetarian_recommended": true
},
"has_owner_reply": true,
"owner_reply": "Thanks so much for such a thoughtful review, Alex! We’re so glad you enjoyed your visit.",
"owner_reply_date": "2 weeks ago",
"owner_reply_timestamp": 1760536800000,
"owner_reply_datetime_utc": "2026-09-05T20:29:30+00:00",
"owner_reply_language": "en",
"error": null,
"timestamp": "2026-09-25T11:00:00.000Z"
}Q: What does the Google Maps Contributor & Local Guide Scraper extract? Given any contributor profile ID, contributor URL, review link, or business place URL, it extracts the contributor's Local Guide level, points, badges, and up to 200 historical reviews across all businesses they have rated.
Q: How many historical reviews can I extract per contributor profile? You can extract up to 200 public reviews per contributor profile in a single fast call, including star ratings, review text, timestamps, place coordinates, and attached photo URLs.
Q: Can I enter a Business Place URL or Search Query to audit its reviewers? Yes. If you pass a Google Maps Business Place URL (/maps/place/...), Place ID, or search query, the Actor automatically resolves its reviewers and extracts their full cross-business contributor histories.
Q: How do ORM teams use contributor history to spot fake review rings? By mapping every business a 1-star attacker has reviewed, ORM analysts uncover coordinated review pods that attack multiple competitors while boosting the same client.
Download full-resolution (=s0) Google Maps photos & MP4 videos from any business place, restaurant menu, food, vibe, street view, or Google Maps Contributor & Local Guide profile.
- Pricing:
$0.0015 / item(Pay-Per-Event —$0.0015photo,$0.002profile scraped (volume tiers from$0.001)) - Cloud Console: https://apify.com/unitbytes/google-maps-photos-scraper?fpr=939u3w&fp_sid=gh_gmaps
- Full Documentation & Schema: https://unitbytes.com/actors/google-maps-photos-scraper/
- n8n Workflow File:
n8n/google-maps-photos-scraper-n8n-workflow.json - Engineering Playbook: Google Places Photo API Pricing & 10-Photo Limit in 2026 (
$7.00/1Kvs.$0.50/1KAlternatives)
- Uncompressed Original Resolution (=s0) & 4 Presets: Every record includes image_url_original (=s0 full camera resolution), image_url_hd (w1920-h1080), image_url_medium (w800-h600), and image_url_thumbnail alongside exact pixel dimensions.
- All 9 Native Gallery Tabs & Dish Keyword Filtering: Filter upstream by any Google Maps gallery tab ('menu', 'food_and_drink', 'vibe', 'exterior', 'by_owner', 'videos', 'street_view', 'rooms', 'amenities') or custom dish keyword across up to 20 places per query.
- Direct MP4 Video Streams & Street View 360°: Automatically captures playable MP4 walk-through video streams (video_url) and 360-degree Street View imagery with GPS latitude, longitude, and compass heading.
- 92%+ Cheaper Than Official Google Places Photo API: Extract thousands of restaurant menu pages, hotel room galleries, and Local Guide photos at
$1.50/1K($1.00/1Kvolume) instead of$7.00/1Kon the official Places API.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
placeUrls |
array |
["https://www.google.com/maps/place/Katz's+Delic |
Paste Google Maps business/place URLs, place_id: links, share shortlinks, or location search queries to extract high-resolution photo galleries, food & menu photos, and customer review images. |
category |
string |
— | Optional upstream Google Maps filter to extract specific gallery tabs or dish/topic keywords: • Gallery Tabs: menu, food_and_drink (or food), vibe (or interior), exterior, by_owner, videos, street_view, rooms, amenities • Custom Keywords: Any dish or feature keyword (e.g. |
maxPhotos |
integer |
50 |
Maximum number of photos to extract per place or contributor profile (0 to 1000). Default is 50. |
maxPlacesPerSearch |
integer |
1 |
When entering a general text search query (e.g. pizza in New York or boutique hotels in Miami), how many matching places to discover and scrape from that search (1 to 20). Default is 1. |
highResOnly |
boolean |
True |
Automatically upgrade Google Maps photo URLs to =s0 to retrieve the original uncompressed, full-resolution image. |
scrapePhotos |
boolean |
True |
If enabled, extracts individual photo items with full-resolution links, dimensions, captions, uploader details, and place metadata. If disabled, only extracts the target summary. |
contributors |
array |
— | Optional: Paste Google Maps contributor profile URLs or numeric User IDs to extract all photos uploaded by a specific Local Guide or reviewer, along with their total photo views and badge level. |
proxyConfiguration |
object |
{"useApifyProxy": true, "apifyProxyGroups": ["RE |
Proxies to use. Apify Residential Proxies are recommended for reliable extraction. |
maxConcurrency |
integer |
3 |
Number of places or contributor profiles to scrape in parallel (1 to 10). |
Need instant synchronous GET JSON responses (<500ms live / <150ms cached) for a live B2B CRM enrichment webhook, agency prospecting dashboard, or reputation triage widget without polling async batch jobs? Use our 6-Endpoint Google Maps B2B Leads, Website Contacts, Reviews, 4K Photos & Contributor REST API:
- 👉 Test Live on RapidAPI Hub (
$0Free Tier) (x-rapidapi-host: google-maps-b2b-leads-email-tech-stack-reviews-data-api.p.rapidapi.com) - 👉 Test Live on Zyla API Hub (7-Day Free Trial) (Listing ID
14553) - 🐍 Runnable Python Script:
examples/run_gmaps_rapidapi.py
| Category | Endpoint | Method | Description |
|---|---|---|---|
| 1. B2B Lead Discovery | /v1/gmaps/search |
GET |
Search Google Maps businesses by query (e.g. dentists in Austin TX) with optional real-time website contact crawling (enrich_contacts=true), review hooks (include_review_hook=true), CMS/ad pixel detection, and 0–100 agency leadScore. |
| 2. Single Place Lead Profile | /v1/gmaps/place |
GET |
Retrieve the complete 48-field B2B lead profile for a single business by place_id (ChIJ...), Google Maps url, or exact query, including verified emails, 6 social profiles, CMS tech stack, and agencyOpportunityFlags. |
| 3. Customer Reviews & ORM | /v1/gmaps/reviews |
GET |
Extract sorted customer reviews (most_relevant, newest, highest_rating, lowest_rating) with cursor pagination, star ratings, full review text, owner replies, owner response SLA turnaround hours, and reputation triageFlags. |
| 4. Domain & Tech Stack Enrichment | /v1/gmaps/contacts |
GET |
Standalone website crawler (url or domain) extracting verified emails, phones, WhatsApp links, online booking URLs (Calendly, Mindbody, Toast), 6 social platforms, CMS platform, and Meta/Google/TikTok ad pixels. |
| 5. 4K Photos, Menus & Videos | /v1/gmaps/photos |
GET |
Extract uncompressed original/4K (=s0) photos, restaurant menus, storefront media, and MP4 videos by place_id, url, or user_id with gallery category filtering (all, menu, videos, by_owner, vibe, food_and_drink, latest, street_view_and_360). |
| 6. Contributor & Review Forensics | /v1/gmaps/contributor |
GET |
Extract Local Guide contributor profile by 21-digit user_id or /maps/contrib/... url, returning Local Guide level, points, contribution breakdown, fake-review forensicFlags, and chronological reviews across all businesses. |
from apify_client import ApifyClient
APIFY_TOKEN = os.getenv("APIFY_API_TOKEN", "YOUR_APIFY_API_TOKEN")
if not APIFY_TOKEN or APIFY_TOKEN.startswith("YOUR_"):
raise SystemExit("Please set your Apify API token: export APIFY_API_TOKEN='apify_api_...'")
client = ApifyClient(APIFY_TOKEN)
run_input = {
"placeUrls": [
"https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/"
],
"maxPhotos": 50,
"maxPlacesPerSearch": 1,
"highResOnly": True,
"scrapePhotos": True
}
run = client.actor("unitbytes/google-maps-photos-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("placeName"), item.get("category"), item.get("photoUrlHighRes")){
"targetType": "contributor",
"name": "Alex M. (Local Guide)",
"userId": "100000000000000000002",
"contributorUrl": "https://www.google.com/maps/contrib/100000000000000000002/photos",
"isLocalGuide": true,
"localGuideLevel": 7,
"localGuidePoints": 8119,
"totalPhotosCount": 878,
"totalPhotoViews": 16439131,
"photoId": "CIABIhA_6alxtNVk22yu_5rt7M6b",
"photoCategory": "food_and_drink",
"mediaType": "photo",
"uploadedByOwner": false,
"photoSource": "visitor",
"caption": "Side of red chili sauce",
"photoUrlHighRes": "https://lh3.googleusercontent.com/gps-cs/AH1DqX9kL2mP4qR7tV8wX1zB3cF5hJ0nM6pQ2s=s0",
"photoUrl": "https://lh3.googleusercontent.com/gps-cs/AH1DqX9kL2mP4qR7tV8wX1zB3cF5hJ0nM6pQ2s=s0",
"thumbnailUrl": "https://lh3.googleusercontent.com/gps-cs/AH1DqX9kL2mP4qR7tV8wX1zB3cF5hJ0nM6pQ2s=w400-h400-k-no",
"imageWidth": 4032,
"imageHeight": 3024,
"uploadDate": "2026-09-05",
"placeName": "Juhu",
"placeAddress": "450 Broadway, New York, NY 10013",
"placeCategory": "Cafe",
"placeId": "ChIJv8t4KBT_wokRCf-EIyWAT54",
"placeCid": "0x89c2ff142878cbbf:0x9e4f80252384ff09",
"placeRating": 5.0,
"placeReviewsCount": 71,
"latitude": 40.901379,
"longitude": -74.216956,
"isPrivate": false,
"status": "OK",
"error": null,
"scrapedAt": "2026-10-22T18:00:00.000Z",
"category": "food_and_drink"
}Q: Can I scrape photos from any Google Maps business, restaurant, or hotel? Yes. Paste any Google Maps place URL, place_id link, maps.app.goo.gl shortlink, or plain-text search query (such as 'Best Ramen Tokyo') to extract structured media records.
Q: How do I scrape only Menu, Food & Drink, Vibe, or Hotel Room photos? Set the category input field to any native Google Maps gallery tab—'menu', 'food_and_drink', 'vibe', 'exterior', 'by_owner', 'videos', 'street_view', 'rooms', or 'amenities'—or pass any custom dish keyword.
Q: What image resolutions and video formats are returned? Every record includes 4 ready-to-use CDN URLs—image_url_original (=s0 uncompressed camera original), image_url_hd (w1920-h1080), image_url_medium (w800-h600), and image_url_thumbnail—plus direct MP4 video_url streams.
Q: How does pricing compare to the official Google Places Photos API?
Google's official Places Photo API charges $7.00 per 1,000 photo requests and caps you at 10 photos per place. This Actor extracts up to 500+ photos per business at $1.50/1K ($1.00/1K on volume tiers).
네이버 플레이스·지도 수집 ($1.00/1K): 상호명, 전화번호(0507), 도로명주소, 위경도(GPS), 영업시간, 메뉴·가격, 방문자·블로그 리뷰까지 초고속 추출. Fast Naver Place & Map Scraper for Korean local business leads, KRW menus, hours, coordinates & reviews. CSV/Excel & AI ready.
- Pricing:
$0.0014 / item(Pay-Per-Event —$0.0014place or review scraped (volume tiers from$0.001)) - Cloud Console: https://apify.com/unitbytes/naver-place-scraper?fpr=939u3w&fp_sid=gh_gmaps
- Full Documentation & Schema: https://unitbytes.com/actors/naver-place-scraper/
- n8n Workflow File:
n8n/naver-place-scraper-n8n-workflow.json - Engineering Playbook: Google Maps Reviews Scraper Guide (2026): Extract 10,000+ Reviews, SLA Metrics & Fake Review Flags (
$0.25/1K)
- Complete 45+ Field Korean Business Profiles: Extracts Korean business names, categories, phone and SmartCall (0507) numbers, road (도로명) and lot (지번) addresses, postal codes, WGS84 GPS coordinates, 7-day hours, Naver Booking, and Instagram links.
- Full Menus, KRW Prices & POS Insights: Captures every menu item with KRW price, menu description, recommended badges, high-resolution menu photos, popular dishes, average customer spend, and average stay time.
- Verified Visitor Reviews & Naver Blog Reviews: Collects receipt-verified visitor reviews (방문자 리뷰), photo-only review filtering (onlyPhotoReviews), customer sentiment keyword votes (topVotedKeywords), owner replies, and linked Naver Blog reviews.
- All-in-One Pricing &
$0.00Empty Search Protection: Pay a single transparent rate from$2.80/1,000 resultswith menus, hours, and reviews included at no extra add-on fee, and$0.00charged for missing Place IDs or empty searches.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
queries |
array |
["강남 맛집"] |
Keywords to search on Naver Map / Naver Place (e.g., 강남 맛집, 성수동 카페, 강남 피부과, 명동 호텔, 홍대 미용실). You can also paste direct Naver Map / Place URLs or numeric Place IDs here. |
placeUrls |
array |
— | Optional list of direct Naver Map URLs (https://map.naver.com/p/entry/place/2000000001), Mobile Place URLs (https://m.place.naver.com/restaurant/2000000001/home), naver.me shortlinks, search URLs (https://map.naver.com/p/search/강남%20맛집), or raw numeric Place IDs (2000000001). |
mode |
string |
places |
Select whether to output enriched Place records (places — includes menus, hours, contacts, sentiment stats, and embedded reviews) or dedicated individual review rows (reviews — outputs one row per visitor/blog review for deep sentiment analysis). |
scrapeDetails |
boolean |
True |
When enabled (default), extracts 7-day opening hours, full menu list with KRW prices & photos, walking directions, nearest subway stations, parking fees, website/Instagram links, sentiment keyword breakdown, and recent visitor/blog reviews. |
maxItems |
integer |
20 |
Maximum number of items (places in places mode, or reviews in reviews mode) to collect across the run. |
maxReviewsPerPlace |
integer |
10 |
Maximum number of visitor reviews (방문자 리뷰) to fetch per place when scrapeDetails is enabled or in reviews mode. |
includeBlogReviews |
boolean |
True |
Include Naver Blog and Cafe review posts linked to each place (author name, post title, URL, snippet, date, and thumbnail). |
maxBlogReviewsPerPlace |
integer |
10 |
Maximum number of linked Naver Blog / Cafe reviews to fetch per place. |
onlyPhotoReviews |
boolean |
False |
Filter visitor reviews server-side to only return reviews that include customer-uploaded photos or receipt images. |
sortBy |
string |
popular |
Server-side sorting order for Naver Place search results (popular / relevance default, or distance from search coordinates). |
searchCoordinates |
string |
— | Optional GPS center point as latitude,longitude (e.g., 37.497942,127.027610 for Gangnam Station, Seoul) used for localized ranking and distance sorting. |
language |
string |
ko |
Language preference for Naver Place category and address fields (ko for original Korean, en for English localized strings where available). |
startPage |
integer |
1 |
1-indexed search page to start from (50 places per page). |
resumptionToken |
string |
— | Optional compact continuation token emitted at the end of a previous batch run (RESUMPTION_TOKEN in Key-Value Store) to resume pagination with 0 duplicate overlap. |
proxyConfiguration |
object |
{"useApifyProxy": true} |
Proxy settings for accessing Naver Place endpoints reliably. |
from apify_client import ApifyClient
APIFY_TOKEN = os.getenv("APIFY_API_TOKEN", "YOUR_APIFY_API_TOKEN")
if not APIFY_TOKEN or APIFY_TOKEN.startswith("YOUR_"):
raise SystemExit("Please set your Apify API token: export APIFY_API_TOKEN='apify_api_...'")
client = ApifyClient(APIFY_TOKEN)
run_input = {
"queries": ["강남 맛집"],
"mode": "places",
"scrapeDetails": True,
"maxItems": 20,
"maxReviewsPerPlace": 10,
"includeBlogReviews": True
}
run = client.actor("unitbytes/naver-place-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("name"), item.get("category"), item.get("phone"), item.get("visitorReviewScore")){
"placeId": "2000000001",
"name": "강남 시그니처 다이닝",
"businessCategory": "restaurant",
"category": "한식",
"categoryCode": "220053",
"phone": "0507-0000-0000",
"virtualPhone": "0507-0000-0000",
"roadAddress": "서울 강남구 테헤란로 100 1층",
"address": "서울 강남구 역삼동 100-1",
"commonAddress": "서울 강남구 역삼동",
"fullAddress": "서울 강남구 테헤란로 100 1층",
"postalCode": "09680108",
"latitude": 37.5206335,
"longitude": 127.0361667,
"distance": "2.6km",
"directions": "역삼역 3번 출구에서 테헤란로 방향으로 도보 3분 거리 (시그니처타워 1층)",
"nearestSubway": "역삼역 2호선",
"parkingInfo": "2시간 4000원 (발렛파킹 가능)",
"businessStatus": "영업 중",
"businessHoursText": "02:00에 영업 종료",
"businessHours": [
{
"day": "월",
"start": "11:00",
"end": "02:00"
}
],
"rating": 4.97,
"visitorReviewCount": 177,
"blogCafeReviewCount": 37,
"bookingReviewCount": 0,
"imageReviewCount": 143,
"popularMenusText": "소금김밥, 대물 숙성회 정식(광어), 1% 대광어 숙성회",
"menuCount": 6,
"menus": [
{
"name": "1% 대광어 숙성회",
"priceText": "56,000원",
"priceKrw": 56000,
"description": "중 56000 / 대 78000",
"isRecommended": true,
"imageUrl": "https://ldb-phinf.pstatic.net/example_place_photo_01.jpg"
}
],
"topVotedKeywords": [
{
"code": "food_good",
"keyword": "음식이 맛있어요",
"count": 165
},
{
"code": "fresh",
"keyword": "재료가 신선해요",
"count": 121
}
],
"conveniences": [
"포장",
"단체 이용 가능",
"예약"
],
"paymentMethods": [
"간편결제"
],
"hasBooking": true,
"homepageUrl": "https://map.naver.com/p/entry/place/2000000001",
"instagramUrl": null,
"allLinks": [
"https://map.naver.com/p/entry/place/2000000001"
],
"microReview": "한 점 한 점 정성 가득한 숙성회",
"mainImage": "https://ldb-phinf.pstatic.net/example_place_photo_01.jpg",
"imageCount": 57,
"url": "https://map.naver.com/p/entry/place/2000000001",
"mapUrl": "https://m.place.naver.com/restaurant/2000000001/home",
"searchQuery": "강남 맛집",
"detailLevel": "full",
"language": "ko",
"scrapedAt": "2026-10-24T16:30:00.000000+00:00"
}Q: What is the difference between places mode and reviews mode? Places mode (default) extracts complete 45+ field business profiles including menus, hours, sentiment keywords, and embedded visitor/blog reviews. reviews mode streams up to 500 individual receipt-verified visitor reviews per business (1 row per review).
Q: What Naver Map and Naver Place input formats are supported? You can pass Korean search queries (e.g. '강남 맛집', '성수동 카페', '명동 피부과'), desktop Naver Map URLs (map.naver.com/p/entry/place/...), mobile Naver Place URLs (m.place.naver.com/...), naver.me shortlinks, or numeric Place IDs.
Q: Does this scraper extract full restaurant menus and KRW prices? Yes. When includeMenus is enabled (default: true), every business record includes the full menus array with dish name, numeric KRW price, formatted price, menu description, isRecommended badge, and high-resolution menu photo.
Q: Can I filter for photo-only visitor reviews or sort by newest? Yes. In reviews mode, set reviewSort to 'recent' (Newest) or 'recommend' (Most Relevant), and enable onlyPhotoReviews: true to collect exclusively receipt-verified visitor reviews with customer photos.
Click Open in Google Colab ↗ (notebooks/quickstart.ipynb) to inspect the sample output DataFrame immediately and run live extractions in your browser without installing Python locally.
git clone https://github.com/unitbytes/Google-Maps-Reviews-Scraper-API.git
cd Google-Maps-Reviews-Scraper-API
pip install -r requirements.txt
export APIFY_API_TOKEN="your_apify_api_token"
python examples/run_google_maps_reviews_scraper.py- Open any
.jsonfile inside then8n/folder (or copy in 1 click from unitbytes.com/n8n / n8n.io/creators/unitbytes). - Press
Ctrl+V/Cmd+Vdirectly onto your n8n workflow canvas. - Configure your Apify API Token in the
HTTP Header Authcredential on Node2. Run UnitBytes (...)(and customize your search inputs in Node1. Configure Search & Rules), then click Test Workflow.
This repository includes a ready-to-use Model Context Protocol configuration at .cursor/mcp.json pointing to https://mcp.apify.com with this suite's UnitBytes actors pre-registered. Open this folder in Cursor or Windsurf to let your AI agent run live extractions and inspect schemas automatically.
Don't want to manage API tokens or scripts? UnitBytes Data Delivery provides ready-to-use CSV, Excel (.xlsx), Google Sheets, or Webhook feeds tailored to your exact target keywords, cities, or categories.
- 🌐 Request a Sample Dataset: https://unitbytes.com/#enterprise-intake
- 📧 Direct Engineering Contact: contact@unitbytes.com
- ⚡ Explore All 41 Scrapers: https://unitbytes.com/actors/
- 📚 Engineering Playbooks & Guides: https://unitbytes.com/blog/
- 🔗 Official n8n Creator Profile: https://n8n.io/creators/unitbytes/