Google Maps Photos Scraper (Places, Menus & Local Guides) avatar

Google Maps Photos Scraper (Places, Menus & Local Guides)

Pricing

from $1.00 / 1,000 photos

Go to Apify Store
Google Maps Photos Scraper (Places, Menus & Local Guides)

Google Maps Photos Scraper (Places, Menus & Local Guides)

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. Filter by gallery tab (menu, food, by owner, videos), captions, photo views, Place IDs & GPS. MCP & AI Agent ready.

Pricing

from $1.00 / 1,000 photos

Rating

0.0

(0)

Developer

UnitBytes | Enterprise Web Data

UnitBytes | Enterprise Web Data

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

6 hours ago

Last modified

Share

Google Maps Photos Scraper by UnitBytes

📸 Google Maps Photos Scraper (Places, Menus, Videos & Guides)

Download uncompressed, full-resolution (=s0) photos and playable MP4 videos from any Google Maps business listing, restaurant menu, food & drink gallery, hotel, 360° Street View, or Local Guide contributor profile in seconds.

Standard Google Maps scrapers only return a single compressed thumbnail, while the official Google Places Photo API charges $7.00 per 1,000 photos, caps image dimensions at 1600px, ignores videos and gallery tabs, and strips out dish captions and author details.

This Actor gives you the complete visual dataset in 1 step: Paste any Google Maps Place URL (/maps/place/...), Location or City Search Query (e.g., "Katz's Delicatessen New York" or "boutique hotels in Miami" with maxPlacesPerSearch up to 20), Share Shortlink (maps.app.goo.gl/...), or Contributor Profile URL (/maps/contrib/...) to extract original camera-resolution (4000×3000+ px) photos, playable MP4 videos (videoUrl), 9 native Google Maps gallery tabs (menu, food_and_drink, vibe, exterior, by_owner, videos, street_view, rooms, amenities), dish captions, verified owner attribution (uploadedByOwner), Local Guide levels, total photo views, Place IDs, and per-photo camera GPS & compass bearing—ready for Excel, CSV, or JSON.

Try it for Free


🎁 Free Trial Included: Extract hundreds of full-resolution (=s0) Google Maps photos & MP4 videos with zero commitment!


⚡ UnitBytes · Google Maps & Local Business Reputation Ecosystem
🔍 Reviews Scraper & Tracker
Up to 10,000 Reviews/Place
Bulk reviews & deleted review verification
🗺️ Contributor Profiles
Local Guide Audits
Full review history & levels
📸 Photos, Menus & Videos
📍 You are here
Original =s0 images, menus, MP4s & views

🚀 Try It in 3 Easy Steps

  1. Paste any Google Maps Place URL, Search Query, or Contributor Link (e.g. https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/ or pizza in New York).
  2. Choose an optional Gallery Tab (category) (menu, food_and_drink, vibe, exterior, by_owner, videos, street_view, rooms, amenities, or any custom dish keyword) and set maxPhotos (default 50, up to 1,000).
  3. Click Start and download full-resolution =s0 photos, playable MP4 video links, dish captions, owner vs. visitor tags, uploader profiles, and venue GPS metadata in Excel (.xlsx), CSV, or JSON in seconds!

[!TIP] Two Powerful Modes in One Actor:

  1. Place, Menu & Multi-Business Discovery Mode (placeUrls): Paste any business link, share shortlink, or general search query (with maxPlacesPerSearch up to 20) to extract categorized venue galleries, restaurant menu boards, food & drink photos, hotel rooms, playable MP4 videos, verified owner uploads, and customer review photos.
  2. Contributor & Local Guide Portfolio Mode (contributors): Paste any reviewer profile URL (/maps/contrib/...) or 21-digit User ID to export every photo they have uploaded across Google Maps, their Local Guide badge level (1–10), and their verified cumulative photo reach (totalPhotoViews, often 10M–50M+ views).

⭐ Loving this Scraper?
If this tool saved you hours of work or thousands in API fees, please support us with a 5-Star Rating on the Apify Store!

💬 Need Help, Custom Fields, or High-Volume Bulk Scraping?
Email us at contact@unitbytes.com or open a ticket in the Apify Issues Tab — we respond fast!


✨ Key Benefits & Data Superpowers

  • 📸 Original Full-Resolution Photos (=s0) & Fast Thumbnails: Automatically upgrades compressed mobile thumbnails to =s0 (photoUrlHighRes), delivering the original uncompressed camera image (4032×3024 px and higher) alongside a fast preview (thumbnailUrl).
  • 🍽️ All 9 Native Google Maps Gallery Tabs + Custom Dish Search: Filter upstream by any native Google Maps gallery tab—menu, food_and_drink, vibe, exterior, by_owner, videos, street_view, rooms, amenities—or pass any custom dish/keyword ("pastrami", "rooftop", "pool").
  • 🎬 Playable MP4 Videos & Owner vs. Visitor Attribution: Extracts playable MP4 video streams (videoUrl in 720p/360p, videoDurationMs), media type ("photo", "video", "street_view"), and distinguishes verified business owner uploads (uploadedByOwner: true, photoSource: "owner") from customer uploads ("visitor").
  • 🔎 Multi-Place Search Discovery (maxPlacesPerSearch 1–20): Enter a category or city query like "ramen in Tokyo" or "boutique hotels in Miami" and set maxPlacesPerSearch: 20 to automatically discover and scrape photos from up to 20 top matching businesses in a single run.
  • 📍 Complete Venue, Per-Photo GPS & Camera Bearing Metadata: Every row includes placeName, placeAddress, placeCategory, placeRating, placeReviewsCount, latitude, longitude, placeId (ChIJ...), placeCid, plus per-photo EXIF/camera coordinates (photoLatitude, photoLongitude) and compass bearing (heading in degrees 0–360°).
  • 🏆 Local Guide Reach & Uploader Intelligence: Captures the uploader's display name, userId, contributorUrl, avatarUrl, isLocalGuide, localGuideLevel (1–10), localGuidePoints, and lifetime totalPhotoViews.
  • ⚡ Instant Startup & Lowest Compute Cost: Starts in milliseconds and extracts dozens of high-resolution photos in 2–4 seconds with minimal memory overhead—10x faster and cheaper than browser-based scrapers.
  • 📊 100% Spreadsheet & Pipeline Ready: Clean, flat 1-row-per-photo format that opens directly in Microsoft Excel, Google Sheets, Pandas, or SQL databases with zero nested [object Object] clutter.
  • 🛡️ Zero-Waste Pay-Per-Event Billing: Private profiles and listings with 0 photos cost $0.00. You only pay for valid data extracted.

🥊 Why Choose This Scraper? (Comparison Matrix)

Capability📸 This Actor (UnitBytes)Official Google Places Photo APIOther Store Photo Scrapers
Max Image Resolution✅ Original Uncompressed (=s0, 4000×3000+ px)❌ Capped at 1600×1600 px⚠️ Often low-res thumbnails
Native Gallery Tab Filtering✅ All 9 Tabs (menu, food_and_drink, vibe, by_owner, videos, street_view, rooms) + Custom Keywords❌ None (Unfiltered random up to 10 photos)⚠️ Partial or no custom keyword search
Playable MP4 Videos & 360° Street View✅ Direct MP4 videoUrl + videoDurationMs + street_view❌ Photos only❌ Missing or unplayable URLs
Verified Owner vs. Customer Tag✅ uploadedByOwner + photoSource (owner / visitor)❌ Not returned❌ Not distinguished
Per-Photo Camera GPS & Compass Heading✅ photoLatitude, photoLongitude & heading (0–360°)❌ Not returned❌ Venue center only
Multi-Place Search Discovery✅ Up to 20 businesses per search query (maxPlacesPerSearch)⚠️ Requires separate Places Text Search API call❌ Single URL only
Local Guide Portfolios & Total Views✅ Full portfolio + verified totalPhotoViews (10M–50M+)❌ Impossible (No API endpoint)❌ Not supported
Cost per 1,000 Photos✅ Fractions of a cent (Pay-Per-Event)❌ $7.00 per 1,000 photo requests⚠️ High compute & browser overhead
Speed⚡ 2–4 seconds per target⚡ Fast (but capped at 10 photos/place)🐢 30–90 seconds per place

🎯 6 High-Value Business Use Cases & Playbooks

1. 🍔 Restaurant Menu Digitization, Food Delivery & POS Onboarding

  • For: Food Delivery Apps, POS SaaS Platforms, Ghost Kitchen Aggregators, Menu AI Startups.
  • The Problem: Onboarding a new restaurant requires manually chasing owners for high-res food photos and typing up paper menus.
  • How This Actor Solves It: Paste the restaurant's Google Maps link, place_id: URL, or city query ("best tacos in Austin" with maxPlacesPerSearch: 20) and set category: "menu" (or "food_and_drink", or a specific dish like "pastrami") to filter upstream on Google Maps for menu boards and dish photos paired with Google's native dish labels (caption) and uncompressed =s0 imagery ready for AI Vision / OCR extraction.

2. 🎬 Short-Form Video Reels, Hospitality Social Proof & Virtual Walkthroughs

  • For: Travel TikTok/Reels Creators, Hotel Booking Platforms, Nightlife & Event Apps, UGC Marketing Agencies.
  • The Problem: Static photos don't capture the real atmosphere of a restaurant, resort, or venue, and scraping playable video streams from Google Maps is not supported by the official API.
  • How This Actor Solves It: Set category: "videos" to extract direct, playable MP4 video streams (videoUrl in 720p/360p) along with exact video duration (videoDurationMs), uploader attribution, and dish/vibe captions—or set category: "street_view" to extract 360° panoramas with camera compass bearing (heading).

3. 🏨 Travel Portals, Real Estate & Programmatic SEO Directories

  • For: Directory Builders, Boutique Hotel Guides, Store Locators, Commercial Real Estate Platforms.
  • The Problem: Building a directory of 10,000+ venues using the official Google Places Photo API costs $7.00 per 1,000 loads, caps images at 1600px, and returns only 10 uncategorized photos per place.
  • How This Actor Solves It: Bulk-export permanent, full-resolution storefront (category: "exterior"), interior ("vibe"), hotel room ("rooms"), and amenity ("amenities") photos matched to exact placeId (ChIJ...), venue GPS (latitude, longitude), and per-photo camera coordinates (photoLatitude, photoLongitude) to populate your CMS, Next.js directory, or PostgreSQL database at a 90%+ cost reduction.

4. 📈 Multi-Location Google Business Profile (GBP) & Owner vs. Visitor Visual Audits

  • For: Local SEO Agencies, Franchise Marketing Directors, Multi-Location Retail Brands.
  • The Problem: Listings with fresh owner-uploaded and customer photos earn up to 42% more direction requests and 35% more website clicks—yet auditing whether 200 franchise locations have up-to-date owner photos (by_owner) vs. outdated customer photos is impossible manually.
  • How This Actor Solves It: Schedule automated visual audits across all franchise locations and competitors. Use uploadedByOwner (true/false), photoSource ("owner" vs "visitor"), uploadDate, and imageWidth × imageHeight to spot locations missing official owner imagery or suffering from unflattering visitor uploads.

5. 🌟 Local Guide Influencer Discovery & Hospitality PR Outreach

  • For: Hospitality Marketing Agencies, Restaurant PR Firms, Tourism Boards.
  • The Problem: Paying social influencers thousands of dollars produces temporary stories that vanish in 24 hours and do nothing for Google Maps search rankings. Meanwhile, a Level 8–10 Google Local Guide whose photos rack up 20M–50M+ views keeps a restaurant's hero photo at the top of Google Maps for years.
  • How This Actor Solves It:
    1. Scrape photos from top restaurants or hotels in your city using placeUrls to collect active photographer userIds.
    2. Feed those userIds into contributors mode to reveal each photographer's localGuideLevel (1–10), totalPhotosCount, and totalPhotoViews.
    3. Build a curated database of the highest-reach Google Local Guides in your market.

6. 🤖 Computer Vision, Geo-Localization & Multimodal AI Training

  • For: AI Research Labs, Spatial Computing Teams, Autonomous Navigation & Retail Analytics Engineers.
  • The Problem: Training visual geo-localization and indoor/outdoor scene understanding models requires geo-tagged, high-resolution imagery paired with exact camera orientation and human descriptions.
  • How This Actor Solves It: Generates standardized multimodal datasets pairing uncompressed =s0 imagery and MP4 videos with exact per-photo camera GPS (photoLatitude, photoLongitude), compass heading (heading in degrees 0–360°), gallery category tags (photoCategory), and natural-language captions (caption).

⚙️ Input Configuration Guide

ParameterTypeRequiredDefaultDescription
Place URLs, Place IDs, or Search Queries (placeUrls)arrayEither placeUrls or contributorsPrefilled sampleList of Google Maps business/place URLs (/maps/place/...), place_id: URLs (https://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE), share shortlinks (maps.app.goo.gl/...), or location search queries (e.g. "Katz's Delicatessen"). Also accepts placeIds, searchQueries, or startUrls.
Photo Category or Keyword Filter (category)stringNo"" (All photos)Native Google Maps gallery tab ("all", "menu", "food_and_drink", "vibe", "exterior", "by_owner", "videos", "street_view", "rooms", "amenities") or custom dish/keyword (e.g. "pastrami", "patio").
Max Photos per Target (maxPhotos)integerNo50Maximum number of photos to extract per place or contributor profile (0 to 1,000).
Max Places per Search Query (maxPlacesPerSearch)integerNo1When a plain-text search query (e.g. "Sushi in Tokyo") is provided, controls how many top matching places to scrape (1 to 20).
Full-Resolution Image Links (highResOnly)booleanNotrueAutomatically upgrades Google Maps photo URLs to =s0 to retrieve the original uncompressed camera resolution.
Extract Individual Photos (scrapePhotos)booleanNotrueKeep enabled (true) to extract individual photo rows. Set to false if you only want a 1-row summary of the place or contributor profile.
Contributor URLs or User IDs (contributors)arrayEither placeUrls or contributors[]List of Google Maps contributor profile URLs (/maps/contrib/...) or 21-digit numeric User IDs to extract a Local Guide's photo portfolio and view counts.
Proxy Configuration (proxyConfiguration)objectNoApify ResidentialApify Residential Proxies are enabled by default for maximum speed and zero rate-limit interruptions.
Max Concurrency (maxConcurrency)integerNo3Number of places or contributor profiles to scrape in parallel (1 to 10).

🔗 All Supported Input Formats (Auto-Detected)

You can paste single links, multi-line lists, or comma-separated targets into either input field—the Actor automatically detects whether each target is a Place or a Contributor:

  1. Google Maps Business / Place URL: https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/
  2. Business or Area / Neighborhood Search Query: Katz's Delicatessen New York or Juhu
  3. Raw Google Place ID or place_id: URL: ChIJCar0f49ZwokR6ozLV-dHNTE or https://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE
  4. Google Search #lrd= Modal Link: https://www.google.com/search?q=McDonalds+NYC#lrd=0x89c2598f7ff4aa09:0x313547e757cb8cea,1
  5. writereview?placeid= Link: https://search.google.com/local/writereview?placeid=ChIJCar0f49ZwokR6ozLV-dHNTE
  6. g.page/r/<CODE> Review Shortlink: https://g.page/r/CeqMy1fnRzUxEBM/review
  7. Google Maps Share Shortlink: https://maps.app.goo.gl/...
  8. Decimal ?cid= or Hex 0x...:0x... Feature ID: https://www.google.com/maps?cid=3545819340560108778 or 0x89c2598f7ff4aa09:0x313547e757cb8cea
  9. Contributor Profile or Photos/Reviews Tab URL: https://www.google.com/maps/contrib/102520373756565203865/photos
  10. Raw 21-Digit Contributor User ID: 102520373756565203865

📊 Complete Output Schema & Spreadsheet Columns

Every extracted photo is formatted as a clean, flat record (1 row per photo) for immediate use in Excel, CSV, Google Sheets, BI dashboards, or SQL databases:

Field NameTypeDescription
targetTypestring"place" (business/location scrape) or "contributor" (Local Guide portfolio scrape)
placeNamestring | nullName of the business, restaurant, hotel, or landmark
placeAddressstring | nullFull physical street address of the venue
placeCategorystring | nullPrimary business category (e.g. "Deli", "Cafe", "Hotel")
placeIdstring | nullOfficial Google Place ID (ChIJ...)
placeCidstring | nullGoogle Maps hex CID / Feature ID (0x...:0x...)
placeMapsUrlstring | nullDirect Google Maps URL for the business or place
latitudenumber | nullExact GPS latitude coordinate
longitudenumber | nullExact GPS longitude coordinate
placeRatingnumber | nullAggregate star rating of the venue (1.0 to 5.0)
placeReviewsCountinteger | nullTotal review count on the venue's Google Maps listing
photoIdstring | nullUnique Google Maps photo identifier (AF1Qip... or CIABIh...)
photoCategorystring | nullGoogle Maps gallery tab or category tag ("menu", "food_and_drink", "vibe", "exterior", "by_owner", "videos", "street_view", etc.)
mediaTypestring | null"photo", "video", or "street_view"
uploadedByOwnerboolean | nulltrue if uploaded by the verified business owner via Google Business Profile (bizbuilder:gmb_api)
photoSourcestring | null"owner", "visitor", or "street_view"
captionstring | nullDish name, photo caption, or associated customer review text
photoUrlHighResstring | nullUncompressed original full-resolution (=s0) image URL
photoUrlstring | nullSelected Google Maps image URL (=s0 when highResOnly is true)
thumbnailUrlstring | nullFast compressed preview thumbnail URL (=w400-h400-k-no)
videoUrlstring | nullPlayable MP4 video stream URL (=m22 720p / =m18 360p) when mediaType == "video"
videoDurationMsinteger | nullVideo duration in milliseconds when mediaType == "video"
imageWidthinteger | nullOriginal photo width in pixels (e.g. 4032)
imageHeightinteger | nullOriginal photo height in pixels (e.g. 3024)
photoLatitudenumber | nullExact per-photo camera GPS latitude coordinate
photoLongitudenumber | nullExact per-photo camera GPS longitude coordinate
headingnumber | nullCamera compass bearing / heading angle in degrees (0–360°)
uploadDatestring | nullISO upload date (YYYY-MM-DD) when available
uploadDateRelativestring | nullRelative upload timestamp (e.g. "2 weeks ago")
namestring | nullPublic display name of the photo uploader / Local Guide
userIdstring | nullGoogle Maps 21-digit numeric Contributor User ID
contributorUrlstring | nullDirect canonical link to the uploader's Google Maps contributor profile
avatarUrlstring | nullUploader's profile avatar image URL
isLocalGuidebooleantrue if the uploader is a verified Google Local Guide
localGuideLevelinteger | nullLocal Guide badge tier (1 to 10)
localGuidePointsinteger | nullTotal accumulated Local Guide points (populated in contributor mode)
pointsToNextLevelinteger | nullPoints required to reach the next Local Guide tier
badgeUrlstring | nullOfficial Google Local Guide badge icon URL
totalPhotosCountinteger | nullLifetime total photos uploaded by the contributor
totalPhotoViewsinteger | nullVerified cumulative views across all photos uploaded by the contributor
reviewsCountinteger | nullTotal reviews authored by the uploader
ratingsCountinteger | nullTotal star ratings submitted by the uploader
isPrivatebooleantrue if the target contributor profile has restricted/private contributions
statusstring"OK", "PRIVATE", "NOT_FOUND", or "UNKNOWN"
errorstring | nullError description if a target could not be resolved
scrapedAtstringISO 8601 UTC timestamp of when the record was extracted

📤 Sample Output Data

{
"targetType": "place",
"placeName": "Katz's Delicatessen",
"placeAddress": "205 E Houston St, New York, NY 10002",
"placeCategory": "Deli",
"placeId": "ChIJCar0f49ZwokR6ozLV-dHNTE",
"placeCid": "0x89c2598f7ff4aa09:0x313547e757cb8cea",
"placeMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE",
"placeRating": 4.5,
"placeReviewsCount": 56227,
"totalPhotosCount": 95669,
"latitude": 40.722233,
"longitude": -73.987429,
"photoId": "CIABIhAIA6OcsGxnZ7k2_COajcYb",
"photoCategory": "food_and_drink",
"mediaType": "photo",
"uploadedByOwner": false,
"photoSource": "visitor",
"caption": "Katz's signature pastrami sandwich",
"photoUrlHighRes": "https://lh3.googleusercontent.com/grass-cs/AABkmLfLi0lcU6f-15jBy8...=s0",
"photoUrl": "https://lh3.googleusercontent.com/grass-cs/AABkmLfLi0lcU6f-15jBy8...=s0",
"thumbnailUrl": "https://lh3.googleusercontent.com/grass-cs/AABkmLfLi0lcU6f-15jBy8...=w400-h400-k-no",
"videoUrl": null,
"videoDurationMs": null,
"imageWidth": 5712,
"imageHeight": 4284,
"photoLatitude": 40.722251,
"photoLongitude": -73.987412,
"heading": 184.5,
"uploadDate": "2026-10-14",
"uploadDateRelative": "a week ago",
"name": "Joshua Crutchfield",
"userId": "109334674379003727044",
"contributorUrl": "https://www.google.com/maps/contrib/109334674379003727044?hl=en",
"isLocalGuide": true,
"localGuideLevel": 5,
"reviewsCount": 28,
"isPrivate": false,
"status": "OK",
"error": null,
"scrapedAt": "2026-10-22T20:24:16.175Z"
}

2. Contributor & Local Guide Portfolio Record (targetType: "contributor")

{
"targetType": "contributor",
"name": "Reema Mulchandani",
"userId": "102520373756565203865",
"contributorUrl": "https://www.google.com/maps/contrib/102520373756565203865/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"
}

💻 Developer & AI Agent Integrations

1. Run via Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_API_TOKEN")
run_input = {
"placeUrls": [
"https://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE",
"pizza in New York",
],
"category": "menu", # Gallery tabs: "menu", "food_and_drink", "vibe", "exterior", "by_owner", "videos", "street_view", "rooms", "amenities", or "" for all
"maxPhotos": 50,
"maxPlacesPerSearch": 5, # Discover & scrape up to 20 matching places per search query
"scrapePhotos": True,
"highResOnly": True,
}
run = client.actor("unitbytes/google-maps-photos-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
media_url = item.get("videoUrl") or item.get("photoUrlHighRes")
print(f"[{item.get('placeName')} | {item.get('photoCategory')} | {item.get('photoSource')}] {item.get('caption')} -> {media_url}")

2. Run via Node.js / JavaScript (apify-client)

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_APIFY_API_TOKEN" });
const run = await client.actor("unitbytes/google-maps-photos-scraper").call({
placeUrls: [
"https://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE"
],
category: "menu", // or "food_and_drink", "vibe", "by_owner", "videos", "street_view"
maxPhotos: 50,
maxPlacesPerSearch: 1,
highResOnly: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.log(`${item.placeName} [${item.photoCategory || "gallery"}] (${item.caption || "No caption"}): ${item.videoUrl || item.photoUrlHighRes}`);
});

3. 🔌 MCP Server Setup: Claude Code, Cursor & AI Agents

Connect this scraper directly to Claude Code, Claude Desktop, Cursor, or any MCP-compatible AI agent via the hosted Apify MCP server:

{
"mcpServers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com/?tools=actors,docs,unitbytes/google-maps-photos-scraper"
}
}
}

No manual API token required in configuration if your client supports Apify OAuth sign-in. Alternatively, pass your Apify API Token in the authorization header.


🎯 Fair Pay-Per-Event (PPE) Billing

This Actor uses Apify's transparent Pay-Per-Event model so you only pay for successful public data extracted:

  • Zero Waste on Empty or Private Targets: If a place has no public photos, does not exist (status: "NOT_FOUND"), or a contributor profile is set to private (status: "PRIVATE"), you are charged $0.00.
  • Strict Budget Control: Set a maximum spending limit per run in the Apify Console and the Actor will automatically stop cleanly the moment your exact budget cap is reached.

❓ Frequently Asked Questions (FAQ)

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 Vegas") into Place URLs, Place IDs, or Search Queries (placeUrls).

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" or "rooftop". You can also append #menu to any place URL. The filter executes 100% upstream on Google Maps' servers and returns Google's dish/menu labels (caption) alongside high-resolution =s0 imagery.

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, photoLongitude) and compass bearing (heading in degrees 0–360°). Even when category is left empty ("all"), any videos or Street View items in the gallery are automatically enriched with their videoUrl and mediaType.

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

Can I scrape photos across multiple businesses from a single city search query?

Yes! Enter a general search query such as "pizza in New York" or "boutique hotels in Miami" in placeUrls and set Max Places per Search Query (maxPlacesPerSearch) to any number from 1 to 20. The Actor will automatically discover up to 20 matching businesses and extract up to maxPhotos for each one in a single run.

What makes the photo quality "Full Resolution (=s0)"?

By default, Google Maps serves compressed, downscaled thumbnails tailored for mobile screens. When highResOnly is enabled (the default), this Actor automatically rewrites image links to =s0, returning the original uncompressed camera-resolution image (4000×3000+ pixels)—ideal for high-definition websites, menu OCR, and computer vision pipelines.

How does this compare to the official Google Places Photo API?

The official Google Places Photo API charges $7.00 per 1,000 photos, caps maximum dimensions at 1600×1600 pixels, returns at most 10 unfiltered photos per place, omits videos, gallery categories, captions, and upload dates, and cannot query contributor portfolios or Local Guide view counts. This Actor delivers up to 1,000 full =s0 photos and MP4 videos per place with complete category, caption, owner, and uploader metadata at a fraction of the cost.

How do I discover top Local Guides in a specific city?

First, paste 10–50 popular restaurants or attractions from your target city into placeUrls (or use a city search query with maxPlacesPerSearch: 20). Every extracted photo row includes the uploader's userId and contributorUrl. Next, paste those userIds into contributors to extract each photographer's full portfolio, localGuideLevel (1–10), and verified totalPhotoViews.

Can I export the results directly to Excel or Google Sheets?

Yes! Because the output uses a flat 1-row-per-photo schema, you can click Export in the Apify Console immediately after your run finishes and download a clean Excel (.xlsx), CSV, or JSON file with zero post-processing required.


🔗 Specialized Google Maps Scrapers by UnitBytes

Build a complete local intelligence and reputation pipeline by combining all three specialized actors in the UnitBytes Google Maps Suite:

  • 🔍 Google Maps Reviews Scraper — Extract up to 10,000 reviews per Business Place URL, Search Query, or Place ID with server-side keyword filtering & sorting, or track whether specific reported reviews were deleted or edited (review_report_url).
  • 🗺️ Google Maps Contributor & Local Guide Reviews Scraper — Reverse-search any reviewer profile, Business Place URL, or Search Query to export lifetime review histories, Local Guide levels (1–10), dining aspects, and review permalinks in seconds.
  • 📸 Google Maps Photos Scraper (Places, Menus, Videos & Guides) (This Actor) — Download uncompressed =s0 full-resolution venue photos, restaurant menus, playable MP4 videos, 360° Street View, dish captions, and Local Guide portfolios with verified view counts.

⚖️ Compliance & Privacy

This Actor extracts strictly publicly available data from Google Maps public business listings and contributor profiles. It does not log in, bypass authentication walls, or collect private user data. Personal data is protected by regulations such as GDPR and CCPA—see Apify's guide on the legality of web scraping and ensure you have a legitimate basis when processing public business listings and contributor profiles.

Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google LLC, Alphabet Inc., or any of their subsidiaries.


💬 Support, Custom Fields & Feedback

Need help configuring your workflow, requesting custom fields, or reporting an issue?


🔍 Search Keywords

Google Maps photos scraper, Google Maps video downloader, download Google Maps photos, Google Business Profile photo downloader, Google Places Photo API alternative, extract restaurant menu photos from Google Maps, high resolution Google Maps images =s0, Google Maps food and drink photos scraper, Google Maps vibe and interior photos, Google Maps by owner photos audit, Google Maps Street View 360 scraper, Google Local Guide photos scraper, bulk download Google Maps business images, Google Maps contributor photos extractor, scrape food and dish photos Google Maps, Google Maps photo view count tracker, restaurant menu OCR dataset, Google Maps gallery downloader, hotel and travel directory photo enrichment, Google Maps visual audit tool