Skip to content

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

📍 Google Maps & Local Scraper Suite: B2B Leads & Emails ($0.50/1K), 10K Reviews ($0.25/1K), Change Tracker, Local Guides, 4K Photos & Naver Place API

Available on Apify n8n Creator Hub Zero Login Pricing

Complete Google Maps & Local B2B lead generation, website email & ad pixel enrichment ($0.50/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 • ⚡ Official n8n Creator Hub • 🔧 38 Free n8n Templates • 📖 Documentation & Schemas • 📚 Engineering Playbooks


📍 Google Maps & Local Scraper Suite: B2B Leads & Emails ($0.50/1K), 10K Reviews ($0.25/1K), Change Tracker, Local Guides, 4K Photos & Naver Place API

Try it for Free
⚡ 1-Click Free Trial: Test live queries using Apify's $5 free monthly credit • Zero login or cookies required


📦 Included in This Repository (Python Quickstarts, n8n Workflows, MCP & Sample Data)

This repository contains ready-to-run Python SDK scripts, 1-click n8n automation workflow .json templates, AI Agent MCP configuration (.cursor/mcp.json), and sample output datasets (JSON & CSV):

Extraction Engine 🐍 Python SDK Quickstart ⚡ n8n Workflow Template 📊 Sample Output 🚀 Cloud Console
**Google Maps Email & Leads Scraper $0.50/1K B2B Contacts**
unitbytes/google-maps-leads-scraper • Full Schema • Engineering Playbook
examples/run_google_maps_leads_scraper.py n8n/google-maps-leads-scraper-n8n-workflow.json JSON · CSV
**Google Maps Reviews Scraper $0.25/1K All 10K Reviews**
unitbytes/google-maps-reviews-scraper • Full Schema • Engineering Playbook
examples/run_google_maps_reviews_scraper.py n8n/google-maps-reviews-scraper-n8n-workflow.json JSON · CSV
Google Maps Review Monitor & Change Tracker (Alerts & ORM)
unitbytes/google-maps-reviews-tracker • Full Schema • Engineering Playbook
examples/run_google_maps_reviews_tracker.py n8n/google-maps-reviews-tracker-n8n-workflow.json JSON · CSV ⚡ Run on Apify
Google Maps Contributor Reviews Scraper (Local Guides)
unitbytes/google-maps-contributor-scraper • Full Schema • Engineering Playbook
examples/run_google_maps_contributor_scraper.py n8n/google-maps-contributor-scraper-n8n-workflow.json JSON · CSV ⚡ Run on Apify
Google Maps Photos Scraper (Places, Menus & Local Guides)
unitbytes/google-maps-photos-scraper • Full Schema • Engineering Playbook
examples/run_google_maps_photos_scraper.py n8n/google-maps-photos-scraper-n8n-workflow.json JSON · CSV ⚡ Run on Apify
Naver Map & Place Scraper: Places, Menus & Reviews
unitbytes/naver-place-scraper • Full Schema
examples/run_naver_place_scraper.py n8n/naver-place-scraper-n8n-workflow.json JSON · CSV ⚡ Run on Apify

⚡ Pre-Configured 1-Click Task Presets

Launch pre-configured extraction templates directly in the Apify Cloud Console with zero parameter setup:

Task Preset Target Extraction Use Case Direct Launch
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
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

🧭 Which Google Maps Actor Should You Use? (5-Engine Comparison vs. Official Places API)

Use Case / Capability 🧲 B2B Leads & Email Scraper ⭐ 10K Bulk Reviews Scraper 🛡️ Review Monitor & Change Tracker 🕵️ Contributor & Local Guide Scraper 📸 4K Photos, Menus & Videos 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 Basic map widget display
Starting Price 💰 $0.50 – $1.50 / 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 ❌ $17.00 – $40.00+ / 1K calls
Verified Website Emails & 6 Socials ✅ Included Free (primary_email, emails, LI/IG/FB/X/TikTok/YT) — — — — ❌ Never returned
Website CMS, Ad Pixels & Pitch Flags ✅ 12 CMS + Meta/Google Pixels + 9 agency_opportunity_flags — — — — ❌ Never returned
Cold-Outreach Review Hook ✅ 1 Review Hook + 1-Click Report Link Included Up to 10,000 reviews/place Up to 10,000 reviews/place Up to 200 reviews/user — Max 5 reviews (unsortable)
Server-Side Sort & Keyword 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.) ❌ Capped at 5 reviews / 10 photos
Stateful Cross-Run Diff (change_type) — Stateless bulk ✅ NEW, REMOVED, RATING_CHANGED, TEXT_EDITED, OWNER_REPLIED — — ❌ Not supported
Owner Reply SLA & Burner Triage — ✅ response_time_hours, unanswered_hours, is_burner_suspect ✅ response_time_hours, unanswered_hours, is_burner_suspect ✅ Cross-location burner & attack ring detection — ❌ Not supported

🛠️ Extraction Engines in This Suite

🚀 Google Maps Email & Leads Scraper | $0.50/1K B2B Contacts (unitbytes/google-maps-leads-scraper)

Fast, low-cost Google Maps B2B Leads & Email Scraper ($0.50–$1.50/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...

Key Capabilities

  • All-in-One Google Maps + Website Email & Social Enrichment: Automatically visits each business official website plus /contact and /about subpages to extract de-obfuscated emails (prioritizing owner@, founder@, ceo@, dr@, contact@, info@ in primary_email), E.164 phone numbers (phone_international), WhatsApp links, and 6 social media columns.
  • High-Intent Agency Opportunity Flags & Lead Score (0–100): Audits every prospect for actionable digital marketing gaps: UNCLAIMED_GBP (with 1-click claim_business_url), MISSING_META_PIXEL, MISSING_GOOGLE_TAG, NO_ONLINE_BOOKING, NO_WEBSITE, LOW_RATING_UNDER_4_2, LOW_REVIEW_COUNT, NO_EMAIL_ON_SITE, and NO_SOCIAL_LINKS.
  • Website CMS, Ad Pixels & Online Booking Detection: Detects 12 CMS platforms (WordPress, Shopify, Wix, Squarespace, Webflow, GoHighLevel, Duda, HubSpot CMS), 12 martech/ad tags (Meta Pixel, Google Ads / GTag, TikTok Pixel, HubSpot, Birdeye, Podium, Yext), and 12+ booking widgets (Calendly, Zocdoc, NexHealth, Mindbody, OpenTable).
  • Built-In Cold-Outreach Review Hooks (reviewHookType): Extracts a real customer review snippet (review_hook_text, review_hook_stars, review_hook_author, review_hook_date) + 1-click Google dispute link (review_hook_report_url) in most_relevant (cold email icebreaker), lowest_rating (1-star ORM pitch), or newest mode.

Python SDK Quickstart (examples/run_google_maps_leads_scraper.py)

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "searchQueries": ["dentists in Austin TX"],
    "maxPlacesPerQuery": 20,
    "reviewHookType": "most_relevant",
    "language": "en",
    "region": "us",
    "proxyConfiguration": {
        "useApifyProxy": True
    }
}

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("input_query"), item.get("rating"))

Sample Output Schema (samples/google-maps-leads-scraper-sample.json)

{
  "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": "ChIJ2_VLfRdawokRXKfA6CMf5YQ",
  "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:ChIJ2_VLfRdawokRXKfA6CMf5YQ",
  "price_level": null,
  "primary_email": "[email protected]",
  "emails": [
    "[email protected]"
  ],
  "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/AF1QipM...=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=..."
}

Frequently Asked Questions

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 (default: true), this Actor automatically visits each business's official website plus its /contact and /about subpages to extract verified emails (primary_email...

Q: How does decision-maker email prioritization (primary_email) work? The contact enrichment engine decodes obfuscated mailto: links and protected email strings, filters out false-positive image filenames, CSS tokens, and noreply / sentry addresses, and ranks verified business emails by prioritizing domain-matched addresses and...

Q: What are agency_opportunity_flags and lead_score? Every extracted business is audited for digital marketing gaps and tagged with machine-filterable agency_opportunity_flags: UNCLAIMED_GBP, NO_WEBSITE, NO_EMAIL_ON_SITE, MISSING_META_PIXEL, MISSING_GOOGLE_TAG, NO_ONLINE_BOOKING, LOW_RATING_UNDER_4_2...

Q: How do cold-outreach review hooks (includeReviewHook & reviewHookType) work? When includeReviewHook is true, the Actor extracts a customer review snippet (review_hook_text, review_hook_stars, review_hook_author, review_hook_date) and a 1-click Google dispute URL (review_hook_report_url).


🚀 Google Maps Reviews Scraper | $0.25/1K All 10K Reviews (unitbytes/google-maps-reviews-scraper)

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...).

Key Capabilities

  • Dual-Mode Extraction: Scrape up to 10,000 reviews per Business Place URL or Search Query (/maps/place/...) OR verify specific individual review share links (/maps/reviews/data=..., maps.app.goo.gl/..., /maps/contrib/.../place/...)...
  • 10x Faster & Cheaper Than Browser Scrapers: Extracts 1,000+ Place reviews in ~10 seconds and audits 50–100 direct review links per minute on the lightweight 256MB memory tier with Pay-Per-Event billing ($0.00 charged on unsupported links or empty...
  • Instant Takedown & Deletion Proof: Automatically confirms when a disputed review has been deleted by the author or removed by Google, while preserving the business name, address, and Place CID so ORM agencies have timestamped proof for client...
  • Post-Publication Edit Detection: Compares creation vs. modification timestamps to flag when a customer silently changes their star rating or edits their complaint text (review_modified_timestamp).

Python SDK Quickstart (examples/run_google_maps_reviews_scraper.py)

from apify_client import ApifyClient

client = ApifyClient("YOUR_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",
    "proxyConfiguration": {
        "useApifyProxy": True
    }
}

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("reviewer_name"), item.get("business_name"), item.get("review_date"))

Sample Output Schema (samples/google-maps-reviews-scraper-sample.json)

{
  "input_url": "https://maps.app.goo.gl/wSLNNUnwRAwg1T4W9",
  "resolved_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQ...",
  "status": "ACTIVE",
  "is_active": true,
  "is_removed": false,
  "review_id": "Ci9DQUlRQUNvZENodHljRjlvT2tWaWExOUlkRFIwWVhFemJFa3pTekZVTlVjeGNHYxAB",
  "place_id": "0x0:0x84e51f23e8c0a75c",
  "place_cid": "ChIJ2_VLfRdawokRXKfA6CMf5YQ",
  "review_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQ...",
  "review_report_url": "https://www.google.com/local/content/rap/report?postId=Ci9DQUlRQ...",
  "is_edited": false,
  "review_modified_timestamp": null,
  "reviewer_name": "RoRo",
  "reviewer_id": "100000000000000000001",
  "reviewer_url": "https://www.google.com/maps/contrib/100000000000000000001",
  "reviewer_avatar_url": "https://lh3.googleusercontent.com/a-/...",
  "reviewer_number_of_reviews": 3,
  "review_stars": 1,
  "review_text": "I visited this location during my first trip to New York...",
  "review_text_original": "I visited this location during my first trip to New York...",
  "review_photos": [
    "https://lh3.googleusercontent.com/grass-cs/ACvplmOY0OUAUEn8J7yYHd1cCpWZ..."
  ],
  "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/ACvplmMYk...",
  "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...",
  "error": null,
  "check_timestamp": "2026-10-01T21:08:28.579696+00:00"
}

Frequently Asked Questions

Q: How do I check if a specific Google review was deleted or removed? On Google Maps, click the Three Dots (⋮) → Share review → Copy link on any review you want to track, and paste that link (maps.app.goo.gl/... or /maps/reviews/data=...) into reviewsToCheck.

Q: Can I also scrape all reviews from a Google Maps Business Place URL or Search Query? Yes! Simply paste any Google Maps business link (https://www.google.com/maps/place/...), Place ID (ChIJ...), or Search Query (e.g. "Katz's Delicatessen", "Juhu") into reviewsToCheck and set maxReviewsPerPlace (up to 10,000 reviews per place), reviewsSort...

Q: What is review_report_url and how does it help ORM agencies? Every active review extracted by this Actor includes a pre-built review_report_url (https://www.google.com/local/content/rap/report?postId=...).

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, this Actor extracts and preserves the underlying business_name, business_address, place_cid, business_city, and business_categories.


🚀 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...

Key Capabilities

  • Stateful Cross-Run Change Detection (trackChanges): Persists a baseline per business in Apify Named Key-Value Store (google-maps-reviews-tracker-state) across scheduled runs and tags every review with change_type: NEW, REMOVED, RATING_CHANGED, TEXT_EDITED, OWNER_REPLIED, UNCHANGED, or BASELINE.
  • Auto-Detect Deleted Reviews & Recover Context from Place URLs: When a previously tracked review disappears from a Business Place URL, the Tracker automatically pings its saved permalink to confirm deletion (status: REMOVED) and restores reviewer_name, previous_stars, and previous_text from the baseline.
  • 100% Server-Side Sorting & Keyword Filtering: Executes reviewsSort (newest, lowest_rating, highest_rating, most_relevant) and reviewKeyword directly on Google servers so you can pull 1-star complaints first or filter by topic with zero wasted credits.
  • Owner Reply SLA, Burner Detection & 1-Click Report Links: Automatically calculates response_time_hours and unanswered_hours, flags suspicious low-history 1-2 star attacks (is_burner_suspect & triage_flags), and generates a 1-click Google policy violation link (review_report_url) on every review.

Python SDK Quickstart (examples/run_google_maps_reviews_tracker.py)

from apify_client import ApifyClient

client = ApifyClient("YOUR_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",
    "proxyConfiguration": {
        "useApifyProxy": True
    }
}

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("reviewer_name"), item.get("business_name"), item.get("review_date"))

Sample Output Schema (samples/google-maps-reviews-tracker-sample.json)

{
  "input_url": "https://maps.app.goo.gl/wSLNNUnwRAwg1T4W9",
  "resolved_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQ...",
  "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": "Ci9DQUlRQUNvZENodHljRjlvT2tWaWExOUlkRFIwWVhFemJFa3pTekZVTlVjeGNHYxAB",
  "place_id": "0x0:0x84e51f23e8c0a75c",
  "place_cid": "ChIJ2_VLfRdawokRXKfA6CMf5YQ",
  "review_url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQ...",
  "review_report_url": "https://www.google.com/local/content/rap/report?postId=Ci9DQUlRQ...",
  "is_edited": false,
  "review_modified_timestamp": null,
  "reviewer_name": "RoRo",
  "reviewer_id": "100000000000000000001",
  "reviewer_url": "https://www.google.com/maps/contrib/100000000000000000001",
  "reviewer_avatar_url": "https://lh3.googleusercontent.com/a-/...",
  "reviewer_number_of_reviews": 3,
  "review_stars": 1,
  "review_text": "I visited this location during my first trip to New York...",
  "review_text_original": "I visited this location during my first trip to New York...",
  "review_photos": [
    "https://lh3.googleusercontent.com/grass-cs/ACvplmOY0OUAUEn8J7yYHd1cCpWZ..."
  ],
  "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/ACvplmMYk...",
  "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...",
  "error": null,
  "check_timestamp": "2026-10-01T21:08:28.579696+00:00"
}

Frequently Asked Questions

Q: How do I check if a specific Google review was deleted or removed? On Google Maps, click the Three Dots (⋮) → Share review → Copy link on any review you want to track, and paste that link (maps.app.goo.gl/... or /maps/reviews/data=...) into reviewsToCheck.

Q: Can I also scrape all reviews from a Google Maps Business Place URL or Search Query? Yes! Simply paste any Google Maps business link (https://www.google.com/maps/place/...), Place ID (ChIJ...), or Search Query (e.g. "Katz's Delicatessen", "Juhu") into reviewsToCheck and set maxReviewsPerPlace (up to 10,000 reviews per place), reviewsSort...

Q: What is review_report_url and how does it help ORM agencies? Every active review extracted by this Actor includes a pre-built review_report_url (https://www.google.com/local/content/rap/report?postId=...).

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, this Actor extracts and preserves the underlying business_name, business_address, place_cid, business_city, and business_categories.


🚀 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...

Key Capabilities

  • 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.

Python SDK Quickstart (examples/run_google_maps_contributor_scraper.py)

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "contributors": ["https://www.google.com/maps/contrib/100000000000000000002"],
    "maxReviews": 50,
    "maxReviewersPerPlace": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}

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("place_price_range"))

Sample Output Schema (samples/google-maps-contributor-scraper-sample.json)

{
  "contributor_name": "Reema Mulchandani",
  "contributor_id": "100000000000000000002",
  "contributor_url": "https://www.google.com/maps/contrib/100000000000000000002/reviews",
  "avatar_url": "https://lh3.googleusercontent.com/a-/ALV-UjXc8pSarhgq2xG0mE6F3j...",
  "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": "Ci9DQUlRQUNvZENodHljRjlvT2psaGVHNUNWMkpPYlRWVFdqZ3RMVXRmWTJOMk0yYxAB",
  "place_name": "Juhu Cafe",
  "place_category": "Cafe",
  "place_category_slug": "cafe",
  "place_address": "517 Union Blvd Unit B, Totowa, NJ 07512",
  "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_...",
  "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": 1788632301325,
  "review_datetime_utc": "2026-09-05T18:18:21+00:00",
  "is_review_edited": false,
  "review_created_timestamp": 1788632301325,
  "review_created_datetime_utc": "2026-09-05T18:18:21+00:00",
  "review_updated_timestamp": 1788632301325,
  "review_updated_datetime_utc": "2026-09-05T18:18:21+00:00",
  "review_text": "Juhu Cafe is a wonderful new addition to the area. The beachy atmosphere is bright and welcoming...",
  "review_language": "en",
  "review_permalink": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2psaGVHNUNWMkpPYlRWVFdqZ3RMVXRmWTJOMk0yYxAB!2m1!1s0x0:0x9e4f80252384ff09",
  "review_report_url": "https://www.google.com/local/content/rap/report?postId=Ci9DQUlRQUNvZENodHljRjlvT2psaGVHNUNWMkpPYlRWVFdqZ3RMVXRmWTJOMk0yYxAB",
  "contrib_place_url": "https://www.google.com/maps/contrib/100000000000000000002/place/ChIJv8t4KBT_wokRCf-EIyWAT54",
  "photos": [
    "https://lh3.googleusercontent.com/grass-cs/ACvplmNaKbdVwMT1TibHnx1u8sfePPuH8hInF7w7ROzAMp5U..."
  ],
  "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, Reema! We’re so glad you enjoyed your visit.",
  "owner_reply_date": "2 weeks ago",
  "owner_reply_timestamp": 1788640170000,
  "owner_reply_datetime_utc": "2026-09-05T20:29:30+00:00",
  "owner_reply_language": "en",
  "error": null,
  "timestamp": "2026-09-25T11:00:00.000Z"
}

Frequently Asked Questions

Q: Do I need programming or coding skills to use this Google Maps Contributor Scraper? Not at all! This tool is designed for non-technical users, business owners, agency marketers, and data teams alike. You can run everything directly in the Apify Console and download ready-to-open Excel (.xlsx) or CSV files with a single click.

Q: How many reviews can I extract per Google Maps Contributor profile? The Actor extracts up to your configured maxReviews (0 to 200, prefilled at 50 in Console; set to 200 for full historical review exports) or the total number of public reviews available on the contributor profile in a single fast call (200 is Google's maximum...

Q: Can I enter a Business Search Query, Business Place URL (/maps/place/...), or Review Link directly? Yes! You don't need to know how to find a Contributor URL. If you type a plain-text Business Search Query (e.g. "Katz's Delicatessen New York"), paste a Google Maps Business Place URL (/maps/place/...), or pass a Place ID (place_id:ChIJ...), the Actor...

Q: Does it extract photos uploaded by contributors? Yes! Every review object in the dataset includes the full photos: [...] list of high-resolution image URLs attached to that specific review, plus the contributor's avatar and total lifetime photos count (total_photos_count).


🚀 Google Maps Photos Scraper (Places, Menus & Local Guides) (unitbytes/google-maps-photos-scraper)

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.

Key Capabilities

  • Uncompressed =s0 4K Photos & Playable MP4 Videos: Automatically upgrades Google Maps thumbnails to =s0 (4000x3000+ px) and extracts playable MP4 video streams (videoUrl, videoDurationMs), bypassing the official Places Photo API 1600px cap and $7/1,000 request fee.
  • All 9 Native Gallery Tabs & Multi-Place Search: 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, and discover up to 20 places per search query (maxPlacesPerSearch).
  • Verified Owner Attribution & Local Guide Reach: Distinguishes verified business owner uploads (uploadedByOwner, photoSource) from customer photos, and audits any contributor profile for Local Guide level (1-10) and cumulative photo views (10M-50M+ views).
  • Venue, Per-Photo Camera GPS & Compass Heading: Every record includes placeName, placeCategory, placeRating, placeId (ChIJ...), placeCid, venue coordinates, plus per-photo camera GPS (photoLatitude, photoLongitude) and compass bearing (heading 0-360°).

Python SDK Quickstart (examples/run_google_maps_photos_scraper.py)

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "placeUrls": [
        "https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}

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("name"), item.get("placeName"), item.get("placeRating"))

Sample Output Schema (samples/google-maps-photos-scraper-sample.json)

{
  "targetType": "contributor",
  "name": "Reema Mulchandani",
  "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/AH1DqX...=s0",
  "photoUrl": "https://lh3.googleusercontent.com/gps-cs/AH1DqX...=s0",
  "thumbnailUrl": "https://lh3.googleusercontent.com/gps-cs/AH1DqX...=w400-h400-k-no",
  "imageWidth": 4032,
  "imageHeight": 3024,
  "uploadDate": "2026-09-05",
  "placeName": "Juhu",
  "placeAddress": "517 Union Blvd Unit B, Totowa, NJ 07512",
  "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"
}

Frequently Asked Questions

Q: Can I scrape photos from any Google Maps business, restaurant, or hotel? Yes! Paste any Google Maps place URL, place_id: link (https://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE), share shortlink (maps.app.goo.gl/...), or plain-text search query (such as "Katz's Delicatessen New York" or "Bellagio Hotel Las...

Q: How do I scrape only Menu, Food & Drink, Vibe, or Hotel Room photos? Set the Photo Category or Keyword Filter (category) input field to any native Google Maps gallery tab—"menu", "food_and_drink", "vibe", "exterior", "by_owner", "videos", "street_view", "rooms", "amenities"—or pass any custom dish/topic keyword like "pastrami"...

Q: Can I download playable MP4 videos or 360° Street View panoramas from a business? Yes! Set category: "videos" to extract playable MP4 video streams (videoUrl in 720p/360p) and video duration (videoDurationMs, mediaType: "video"), or set category: "street_view" to extract 360° panoramas along with per-photo camera GPS (photoLatitude...

Q: How do I filter for Verified Business Owner uploads (by_owner) vs. customer photos? Set category: "by_owner" to extract exclusively photos uploaded by the verified business owner via Google Business Profile. In addition, every extracted record across all tabs includes uploadedByOwner (true/false) and photoSource ("owner", "visitor", or...


🚀 Naver Map & Place Scraper: Places, Menus & Reviews (unitbytes/naver-place-scraper)

Fastest Naver Map (네이버 지도) & Naver Place (네이버 플레이스) scraper ($2.80/1K). Extract South Korean local business leads, phone numbers, GPS coordinates, opening hours, full menus with KRW prices, visitor reviews, blog reviews & HD photos. MCP & AI ready.

Key Capabilities

  • All-in-One Transparent Pricing: Pay a single predictable per-result rate (result-scraped) with full place details, menus, 7-day business hours, sentiment analytics, and embedded visitor & blog reviews included at no extra add-on fee.
  • Verified Visitor Reviews & Naver Blog Reviews: Collects receipt-verified visitor reviews (방문자 리뷰), server-side photo-only review filtering (onlyPhotoReviews), customer sentiment keyword rankings (e.g., "음식이 맛있어요", "친절해요"), owner replies, and linked...
  • 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.
  • $0.00 for Missing Targets or Empty Searches: Non-existent Place IDs, zero-result queries, and input validation errors are never billed.

Python SDK Quickstart (examples/run_naver_place_scraper.py)

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "queries": ["강남 맛집"]
}

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("searchQuery"), item.get("rating"))

Sample Output Schema (samples/naver-place-scraper-sample.json)

{
  "placeId": "2025884279",
  "name": "대물섬 강남점",
  "businessCategory": "restaurant",
  "category": "한식",
  "categoryCode": "220053",
  "phone": "0507-1451-3697",
  "virtualPhone": "0507-1451-3697",
  "roadAddress": "서울 강남구 언주로148길 14 1층 103~106호",
  "address": "서울 강남구 논현동 98-12",
  "commonAddress": "서울 강남구 논현동",
  "fullAddress": "서울 강남구 언주로148길 14 1층 103~106호",
  "postalCode": "09680108",
  "latitude": 37.5206335,
  "longitude": 127.0361667,
  "distance": "2.6km",
  "directions": "강남구청역 3-1번 출구로 나오셔서 보이는 올리브영 방향으로 쭉 직진하시다가 커피빈 골목에서 왼쪽으로 꺾어서 200m정도 오시면 왼쪽에 있습니다.",
  "nearestSubway": "강남구청역 7호선",
  "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/20260830_85/1788068876946WkcM7_JPEG/menu.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/2025884279",
  "instagramUrl": null,
  "allLinks": [
    "https://map.naver.com/p/entry/place/2025884279"
  ],
  "microReview": "한 점 한 점 정성 가득한 숙성회",
  "mainImage": "https://ldb-phinf.pstatic.net/20260831_172/17881344168901EW1Q_JPEG/cover.jpg",
  "imageCount": 57,
  "url": "https://map.naver.com/p/entry/place/2025884279",
  "mapUrl": "https://m.place.naver.com/restaurant/2025884279/home",
  "searchQuery": "강남 맛집",
  "detailLevel": "full",
  "language": "ko",
  "scrapedAt": "2026-10-24T16:30:00.000000+00:00"
}

Frequently Asked Questions

Q: Do I need my own proxies or account login for naver-place-scraper? No. UnitBytes manages residential proxy rotation and automated request orchestration so you never need personal accounts or proxies.

Q: What output formats are supported? All data can be downloaded in JSON, CSV, or Excel formats, or consumed directly via the Apify REST API and webhooks.

Q: How does pricing work? You only pay for successful records extracted under Apify Pay-Per-Event pricing, with zero monthly minimums or idle compute costs.

Q: Can this actor be integrated into automated workflows? Yes. You can trigger runs via Apify API, Python/JavaScript clients, Make, Zapier, or scheduled cron workflows.


⚡ Quick Installation & Local Usage

1. Run with Python (apify-client)

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_leads_scraper.py

2. Import into n8n (Self-Hosted or Cloud)

  1. Open any .json file inside the n8n/ folder (or copy in 1 click from unitbytes.com/n8n / n8n.io/creators/unitbytes).
  2. Press Ctrl+V / Cmd+V directly onto your n8n workflow canvas.
  3. Paste your Apify API Token into Node 1. Set Apify Token & Input and click Test Workflow.

3. Use with AI Coding Agents (Cursor, Windsurf & Claude Code MCP)

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.


💼 Need Done-For-You Datasets or Custom Pipelines?

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.