Google Maps Photos Scraper (Places, Menus & Local Guides)
Pricing
from $1.00 / 1,000 photos
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
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
6 hours ago
Last modified
Share
📸 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.
🎁 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
- 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/orpizza in New York). - 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 setmaxPhotos(default50, up to1,000). - Click Start and download full-resolution
=s0photos, 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:
- Place, Menu & Multi-Business Discovery Mode (
placeUrls): Paste any business link, share shortlink, or general search query (withmaxPlacesPerSearchup to20) to extract categorized venue galleries, restaurant menu boards, food & drink photos, hotel rooms, playable MP4 videos, verified owner uploads, and customer review photos.- 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 atcontact@unitbytes.comor 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×3024px 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 (
videoUrlin 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 (
maxPlacesPerSearch1–20): Enter a category or city query like"ramen in Tokyo"or"boutique hotels in Miami"and setmaxPlacesPerSearch: 20to 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 (headingin degrees0–360°). - 🏆 Local Guide Reach & Uploader Intelligence: Captures the uploader's display name,
userId,contributorUrl,avatarUrl,isLocalGuide,localGuideLevel(1–10),localGuidePoints, and lifetimetotalPhotoViews. - ⚡ 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 API | Other 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"withmaxPlacesPerSearch: 20) and setcategory: "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=s0imagery 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 (videoUrlin 720p/360p) along with exact video duration (videoDurationMs), uploader attribution, and dish/vibe captions—or setcategory: "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 exactplaceId(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, andimageWidth×imageHeightto 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:
- Scrape photos from top restaurants or hotels in your city using
placeUrlsto collect active photographeruserIds. - Feed those
userIds intocontributorsmode to reveal each photographer'slocalGuideLevel(1–10),totalPhotosCount, andtotalPhotoViews. - Build a curated database of the highest-reach Google Local Guides in your market.
- Scrape photos from top restaurants or hotels in your city using
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
=s0imagery and MP4 videos with exact per-photo camera GPS (photoLatitude,photoLongitude), compass heading (headingin degrees0–360°), gallery category tags (photoCategory), and natural-language captions (caption).
⚙️ Input Configuration Guide
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Place URLs, Place IDs, or Search Queries (placeUrls) | array | Either placeUrls or contributors | Prefilled sample | List 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) | string | No | "" (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) | integer | No | 50 | Maximum number of photos to extract per place or contributor profile (0 to 1,000). |
Max Places per Search Query (maxPlacesPerSearch) | integer | No | 1 | When 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) | boolean | No | true | Automatically upgrades Google Maps photo URLs to =s0 to retrieve the original uncompressed camera resolution. |
Extract Individual Photos (scrapePhotos) | boolean | No | true | Keep 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) | array | Either 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) | object | No | Apify Residential | Apify Residential Proxies are enabled by default for maximum speed and zero rate-limit interruptions. |
Max Concurrency (maxConcurrency) | integer | No | 3 | Number 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:
- Google Maps Business / Place URL:
https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/ - Business or Area / Neighborhood Search Query:
Katz's Delicatessen New YorkorJuhu - Raw Google Place ID or
place_id:URL:ChIJCar0f49ZwokR6ozLV-dHNTEorhttps://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE - Google Search
#lrd=Modal Link:https://www.google.com/search?q=McDonalds+NYC#lrd=0x89c2598f7ff4aa09:0x313547e757cb8cea,1 writereview?placeid=Link:https://search.google.com/local/writereview?placeid=ChIJCar0f49ZwokR6ozLV-dHNTEg.page/r/<CODE>Review Shortlink:https://g.page/r/CeqMy1fnRzUxEBM/review- Google Maps Share Shortlink:
https://maps.app.goo.gl/... - Decimal
?cid=or Hex0x...:0x...Feature ID:https://www.google.com/maps?cid=3545819340560108778or0x89c2598f7ff4aa09:0x313547e757cb8cea - Contributor Profile or Photos/Reviews Tab URL:
https://www.google.com/maps/contrib/102520373756565203865/photos - 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 Name | Type | Description |
|---|---|---|
targetType | string | "place" (business/location scrape) or "contributor" (Local Guide portfolio scrape) |
placeName | string | null | Name of the business, restaurant, hotel, or landmark |
placeAddress | string | null | Full physical street address of the venue |
placeCategory | string | null | Primary business category (e.g. "Deli", "Cafe", "Hotel") |
placeId | string | null | Official Google Place ID (ChIJ...) |
placeCid | string | null | Google Maps hex CID / Feature ID (0x...:0x...) |
placeMapsUrl | string | null | Direct Google Maps URL for the business or place |
latitude | number | null | Exact GPS latitude coordinate |
longitude | number | null | Exact GPS longitude coordinate |
placeRating | number | null | Aggregate star rating of the venue (1.0 to 5.0) |
placeReviewsCount | integer | null | Total review count on the venue's Google Maps listing |
photoId | string | null | Unique Google Maps photo identifier (AF1Qip... or CIABIh...) |
photoCategory | string | null | Google Maps gallery tab or category tag ("menu", "food_and_drink", "vibe", "exterior", "by_owner", "videos", "street_view", etc.) |
mediaType | string | null | "photo", "video", or "street_view" |
uploadedByOwner | boolean | null | true if uploaded by the verified business owner via Google Business Profile (bizbuilder:gmb_api) |
photoSource | string | null | "owner", "visitor", or "street_view" |
caption | string | null | Dish name, photo caption, or associated customer review text |
photoUrlHighRes | string | null | Uncompressed original full-resolution (=s0) image URL |
photoUrl | string | null | Selected Google Maps image URL (=s0 when highResOnly is true) |
thumbnailUrl | string | null | Fast compressed preview thumbnail URL (=w400-h400-k-no) |
videoUrl | string | null | Playable MP4 video stream URL (=m22 720p / =m18 360p) when mediaType == "video" |
videoDurationMs | integer | null | Video duration in milliseconds when mediaType == "video" |
imageWidth | integer | null | Original photo width in pixels (e.g. 4032) |
imageHeight | integer | null | Original photo height in pixels (e.g. 3024) |
photoLatitude | number | null | Exact per-photo camera GPS latitude coordinate |
photoLongitude | number | null | Exact per-photo camera GPS longitude coordinate |
heading | number | null | Camera compass bearing / heading angle in degrees (0–360°) |
uploadDate | string | null | ISO upload date (YYYY-MM-DD) when available |
uploadDateRelative | string | null | Relative upload timestamp (e.g. "2 weeks ago") |
name | string | null | Public display name of the photo uploader / Local Guide |
userId | string | null | Google Maps 21-digit numeric Contributor User ID |
contributorUrl | string | null | Direct canonical link to the uploader's Google Maps contributor profile |
avatarUrl | string | null | Uploader's profile avatar image URL |
isLocalGuide | boolean | true if the uploader is a verified Google Local Guide |
localGuideLevel | integer | null | Local Guide badge tier (1 to 10) |
localGuidePoints | integer | null | Total accumulated Local Guide points (populated in contributor mode) |
pointsToNextLevel | integer | null | Points required to reach the next Local Guide tier |
badgeUrl | string | null | Official Google Local Guide badge icon URL |
totalPhotosCount | integer | null | Lifetime total photos uploaded by the contributor |
totalPhotoViews | integer | null | Verified cumulative views across all photos uploaded by the contributor |
reviewsCount | integer | null | Total reviews authored by the uploader |
ratingsCount | integer | null | Total star ratings submitted by the uploader |
isPrivate | boolean | true if the target contributor profile has restricted/private contributions |
status | string | "OK", "PRIVATE", "NOT_FOUND", or "UNKNOWN" |
error | string | null | Error description if a target could not be resolved |
scrapedAt | string | ISO 8601 UTC timestamp of when the record was extracted |
📤 Sample Output Data
1. Place / Restaurant Menu & Gallery Record (targetType: "place")
{"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 ApifyClientclient = 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
=s0full-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?
- 🐛 Apify Issues Tab: Open a ticket on Apify
- 📧 Direct Email Support:
contact@unitbytes.com
🔍 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