# Google Maps Photos Scraper Places, Menus, Food & Contributors. (`unitbytes/google-maps-photos-scraper`) Actor

Extract full-resolution photos (=s0) from Google Maps Places (restaurants, hotels, stores, landmarks, menus) and Contributor / Local Guide profiles. Pure HTTP, ultra-fast, and export-ready for Excel, CSV, or JSON.

- **URL**: https://apify.com/unitbytes/google-maps-photos-scraper.md
- **Developed by:** [UnitBytes | Enterprise Web Data](https://apify.com/unitbytes) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 photos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

<p align="center">
  <a href="https://console.apify.com/actors/8SRmH83iVuntCjgzz/input" target="_blank">
    <img src="https://raw.githubusercontent.com/unitbytes-com/.github/main/assets/banners/unitbytes-google-maps-photos-local-guide-scraper-banner.jpg" alt="Google Maps Contributor Photos Scraper by UnitBytes" width="100%" />
  </a>
</p>

<p align="center">
  <a href="https://console.apify.com/actors/8SRmH83iVuntCjgzz/input" target="_blank">
    <img src="https://raw.githubusercontent.com/unitbytes-com/.github/main/assets/try-it-for-free.svg" width="240" height="48" alt="Try it for Free">
  </a>
  <br>
  <sub>⚡ <b>1-Click Free Trial:</b> Test live queries using Apify's  free monthly credit • No credit card required</sub>
</p>

## Google Maps Photos Scraper | Places, Menus, Food & Contributors

> **Looking to download full-resolution photos from any Google Maps Place (restaurants, hotels, stores, landmarks, menus) or Google Local Guide / Contributor?**\
> Paste any place URL, search query, or contributor profile link, click **Start**, and get hundreds of high-res photos with complete venue details, GPS coordinates, and view counts in seconds.

***

<table>
  <tr>
    <td colspan="3" style="padding:10px 14px;background:#0284C7;color:#FFFFFF;font-size:13px;font-weight:700;border-radius:6px 6px 0 0">
      ⚡ UnitBytes · Google Maps & Local Business Reputation Ecosystem
    </td>
  </tr>
  <tr>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33%">
      <span style="white-space:nowrap">🔍 <b><a href="https://apify.com/unitbytes/google-maps-reviews-tracker?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Reviews Change Tracker</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">Status & Takedowns</span><br>
      <span style="color:#64748B;font-size:11px">Detect deleted & edited reviews</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33%">
      <span style="white-space:nowrap">🗺️ <b><a href="https://apify.com/unitbytes/google-maps-contributor-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Contributor Profiles</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">Local Guide Audits</span><br>
      <span style="color:#64748B;font-size:11px">Full review history & levels</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FFF4ED;vertical-align:top;width:33%">
      <span style="white-space:nowrap">📸 <b><a href="https://apify.com/unitbytes/google-maps-photos-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#C2410C;text-decoration:none;font-size:13px">Place & Contributor Photos</a></b></span><br><span style="color:#EA580C;font-size:11px;font-weight:700">📍 You are here</span><br>
      <span style="color:#64748B;font-size:11px">Original =s0 images & venues</span>
    </td>
  </tr>
</table>

***

### 🚀 Try It in 3 Easy Steps

1. **Paste any Google Maps Place URL, search query, or Contributor profile link**.
2. **Set your desired max photos** (e.g. 50 photos).
3. **Click Start** and instantly download your photos, view counts, and venue details in **Excel**, **CSV**, or **JSON**.

***

### ✨ What You Can Extract

- 📸 **Original Quality Photos:** Direct links to full-size, uncompressed images (`=s0`) just as uploaded.
- 🏢 **Place & Business Galleries:** Menus, food items, drinks, interior seating, exterior storefronts, and vibes.
- 👁️ **Verified Photo Views:** See contributor audience reach (e.g. 10M, 25M, or 50M+ total views).
- 📍 **Complete Place Metadata:** Every photo is tagged with venue name, address, category, rating, reviews count, GPS coordinates, Place ID, and CID.
- 🎖️ **Local Guide Details:** Contributor name, avatar, Local Guide level (1–10), and points when scraping contributors.
- 💬 **Captions & Upload Dates:** Photo captions, upload dates, and resolution metadata.
- 📊 **Spreadsheet Ready:** Clean, standardized 1-row-per-photo format, perfect for Excel, Google Sheets, or ML pipelines.

***

### 🎯 Popular Ways to Use This Scraper

#### 1. Restaurant Menus & Food Discovery

Extract high-resolution dish photos, beverage lists, printed menus, and dining interiors across thousands of restaurants.

#### 2. Hotel & Travel Destination Research

Extract authentic guest photos of hotel rooms, resort amenities, pools, and vacation spots to see what venues look like in real life.

#### 3. Storefront & Retail Monitoring

Audit how retail locations, storefronts, and signage appear to everyday customers across different neighborhoods.

#### 4. High-Impact Local Influencer Outreach

Identify top Google Local Guides in your target city who have accumulated millions of photo views. Partner with them for restaurant launches and promotions.

#### 5. Computer Vision & Visual Datasets

Collect high-resolution, geo-tagged image datasets categorized by business category, cuisine, or geography.

***

### 📥 Simple Input Guide

| Setting | What It Does | Default |
| :--- | :--- | :--- |
| **Place URLs or Search Queries** (`placeUrls`) | Google Maps place URLs, search queries (e.g. "Katz's Delicatessen NYC"), Place IDs, or shortlinks. | `["https://www.google.com/maps/place/Katz's+Delicatessen/..."]` |
| **Contributor URLs or User IDs** (`contributors`) | Contributor profile links, photos tab links, or numeric user IDs. | `["https://www.google.com/maps/contrib/102520373756565203865"]` |
| **Max Photos per Target** (`maxPhotos`) | Maximum photos to extract per place or contributor profile (up to 200). | `50` |
| **Extract Photos List** (`scrapePhotos`) | Keep enabled to get photo links. Disable if you only want metadata. | `true` |
| **High-Resolution Image Links** (`highResOnly`) | Serves original uncompressed camera resolution (`=s0`). | `true` |
| **Proxy Configuration** | Prevents rate limits and ensures reliable extraction. | Enabled |

#### Supported Input Formats

You can paste any of these formats directly:

- **Place URL:** `https://www.google.com/maps/place/Katz's+Delicatessen/@40.7222303,-73.9874294,17z`
- **Place Search Query:** `Eiffel Tower Paris` or `Peter Luger Steak House Brooklyn`
- **Place ID:** `ChIJ74_yDqBZwokRj8m8d1Qy5m4`
- **Shortlink:** `https://maps.app.goo.gl/...`
- **Contributor Profile:** `https://www.google.com/maps/contrib/102520373756565203865`
- **Contributor Photos:** `https://www.google.com/maps/contrib/102520373756565203865/photos`
- **Contributor User ID:** `102520373756565203865`

***

### 📤 Preview of Your Downloaded Data

#### 1. Place / Venue Photo Record (e.g. Restaurant, Menu, Storefront)

```json
{
  "targetType": "place",
  "name": "Katz's Delicatessen",
  "placeName": "Katz's Delicatessen",
  "placeAddress": "205 E Houston St, New York, NY 10002",
  "placeCategory": "Deli",
  "placeRating": 4.5,
  "placeReviewsCount": 55714,
  "photoId": "CIHM0ogKEICAgIDCx92MtgE",
  "photoUrlHighRes": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWk...=s0",
  "imageWidth": 699,
  "imageHeight": 1048,
  "placeId": "ChIJCar0f49ZwokR6ozLV-dHNTE",
  "placeCid": "0x89c2598f7ff4aa09:0x313547e757cb8cea",
  "placeMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJCar0f49ZwokR6ozLV-dHNTE",
  "latitude": 40.722233,
  "longitude": -73.987429,
  "status": "OK"
}
```

#### 2. Contributor / Local Guide Photo Record

```json
{
  "targetType": "contributor",
  "name": "Reema Mulchandani",
  "isLocalGuide": true,
  "localGuideLevel": 7,
  "localGuidePoints": 8119,
  "totalPhotosCount": 878,
  "totalPhotoViews": 16439131,
  "photoId": "CIABIhA_6alxtNVk22yu_5rt7M6b",
  "caption": "Side of red chili sauce",
  "photoUrlHighRes": "https://lh3.googleusercontent.com/gps-cs/AH1DqX...=s0",
  "imageWidth": 4032,
  "imageHeight": 3024,
  "uploadDate": "2026-09-05",
  "placeName": "Juhu",
  "placeAddress": "517 Union Blvd Unit B, Totowa, NJ 07512",
  "placeCategory": "Cafe",
  "placeRating": 5.0,
  "placeReviewsCount": 71,
  "latitude": 40.901379,
  "longitude": -74.216956,
  "status": "OK"
}
```

***

#### 🔌 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:

```json
{
  "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.*

***

#### 🤖 Ask an AI Assistant About This Scraper

Open a ready-to-run prompt about Google Maps Photos Scraper in your favorite AI assistant:

- 💬 [ChatGPT](https://chatgpt.com/?q=Using%20the%20Google%20Maps%20Photos%20Scraper%20on%20Apify%20%28https%3A//apify.com/unitbytes/google-maps-photos-scraper%29%2C%20walk%20me%20through%20downloading%20original%20uncompressed%20%3Ds0%20photo%20URLs%20for%20places%20and%20contributors.%20Show%20me%20the%20input%20JSON%20and%20Python%20code.)
- 🧠 [Claude](https://claude.ai/new?q=Using%20the%20Google%20Maps%20Photos%20Scraper%20on%20Apify%20%28https%3A//apify.com/unitbytes/google-maps-photos-scraper%29%2C%20walk%20me%20through%20downloading%20original%20uncompressed%20%3Ds0%20photo%20URLs%20for%20places%20and%20contributors.%20Show%20me%20the%20input%20JSON%20and%20Python%20code.)
- 🔍 [Perplexity](https://www.perplexity.ai/search?q=Using%20the%20Google%20Maps%20Photos%20Scraper%20on%20Apify%20%28https%3A//apify.com/unitbytes/google-maps-photos-scraper%29%2C%20walk%20me%20through%20downloading%20original%20uncompressed%20%3Ds0%20photo%20URLs%20for%20places%20and%20contributors.%20Show%20me%20the%20input%20JSON%20and%20Python%20code.)

***

### ❓ Frequently Asked Questions (FAQ)

#### Can I search for a place by name without having a link?

Yes! Simply type any venue name and city in `placeUrls` (e.g. `Katz's Delicatessen New York` or `Eiffel Tower Paris`). The scraper will resolve the venue and download its photos automatically without requiring a full Maps URL.

#### What makes the photo quality "High Resolution"?

By default, Google thumbnails are downscaled for mobile screens. This scraper retrieves the original camera-resolution image file (`=s0`), giving you crisp, uncompressed photos suitable for high-definition displays, marketing assets, and computer vision pipelines.

#### Does this scraper use headless browsers (Playwright/Puppeteer)?

No! This actor runs **100% pure HTTP** using `curl_cffi` with TLS fingerprint impersonation. It starts instantly, uses only ~70 MB of RAM, and completes runs in seconds rather than minutes.

#### What if a contributor has their profile set to private?

If a user's Google account privacy settings hide their photos, the scraper will cleanly report their profile status as `"PRIVATE"` without failing, allowing your batch run to continue uninterrupted (with zero charges).

#### Can I just check a contributor's total views without downloading photos?

Yes! Turn off the **Extract Photos List** toggle. The scraper will instantly fetch the contributor's name, Local Guide level, and total view count in less than a second.

#### Can I export the data to Excel or Google Sheets?

Yes! As soon as your run completes, click the **Export** button on Apify and choose **CSV**, **Excel**, or **JSON**. You can also connect it directly to Google Sheets or webhooks.

***

### 🔗 Related Google Maps Scrapers

- 📝 [Google Maps Contributor Reviews Scraper](https://apify.com/unitbytes/google-maps-contributor-scraper) — Scrape all written reviews, ratings, and feedback from Local Guides.
- 🔍 [Google Maps Reviews Tracker](https://apify.com/unitbytes/google-maps-reviews-tracker) — Monitor reviews for your business and get alerted to deleted or edited reviews.

***

### 💬 Enterprise Support & Custom Pipelines

Need custom web data feeds, high-frequency scheduled runs, private cluster deployments, or dedicated SLAs?

- 📧 **Direct Email**: <contact@unitbytes.com>
- 🌐 **Enterprise Platform**: <https://unitbytes.com>
- 💡 **Data Engine Specs & Live Docs**: <https://unitbytes.com/actors/google-maps-photos-scraper/>

# Actor input Schema

## `placeUrls` (type: `array`):

Enter Google Maps place URLs, Place IDs, CIDs, or location names.

**Supported formats:**
• `https://www.google.com/maps/place/Katz's+Delicatessen/@40.722286,-73.987429,17z/...`
• Place Search URLs: `https://www.google.com/maps/search/pizza+near+times+square`
• Place IDs: `ChIJLU7jZClu5kcR4PcOOO6p3I0`
• Share shortlinks: `https://maps.app.goo.gl/...`
• Direct names / search queries: `Eiffel Tower Paris` or `Katz's Delicatessen New York`

## `contributors` (type: `array`):

Paste Google Maps contributor profile URLs or numeric User IDs.

**Supported formats:**
• `https://www.google.com/maps/contrib/102520373756565203865`
• `https://www.google.com/maps/contrib/102520373756565203865/photos`
• Share shortlinks: `https://maps.app.goo.gl/...`
• Raw user ID: `102520373756565203865`

## `maxPhotos` (type: `integer`):

How many photos to extract per place or contributor (0 to 200). Default is 50.

## `scrapePhotos` (type: `boolean`):

If enabled, extracts individual photo items with high-res links, dimensions, captions, and place metadata. If disabled, only extracts the profile or place summary.

## `highResOnly` (type: `boolean`):

Automatically append `=s0` to Google photo URLs to retrieve the original full-resolution, uncompressed image.

## `proxyConfiguration` (type: `object`):

Proxies to use. Apify Residential Proxies are recommended to prevent rate limits.

## `maxConcurrency` (type: `integer`):

Number of places or contributors to scrape concurrently (1 to 10).

## `maxProxyRetries` (type: `integer`):

Number of times to swap proxy IP upon rate limits or 403 blocks.

## Actor input object example

```json
{
  "placeUrls": [
    "https://www.google.com/maps/place/Katz's+Delicatessen/@40.722286,-73.987429,17z/data=!4m7!3m6!1s0x89c2598f7ff4aa09:0x313547e757cb8cea!8m2!3d40.722286!4d-73.987429!10e5?hl=en"
  ],
  "contributors": [
    "https://www.google.com/maps/contrib/102520373756565203865"
  ],
  "maxPhotos": 50,
  "scrapePhotos": true,
  "highResOnly": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3,
  "maxProxyRetries": 5
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "placeUrls": [
        "https://www.google.com/maps/place/Katz's+Delicatessen/@40.722286,-73.987429,17z/data=!4m7!3m6!1s0x89c2598f7ff4aa09:0x313547e757cb8cea!8m2!3d40.722286!4d-73.987429!10e5?hl=en"
    ],
    "contributors": [
        "https://www.google.com/maps/contrib/102520373756565203865"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("unitbytes/google-maps-photos-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "placeUrls": ["https://www.google.com/maps/place/Katz's+Delicatessen/@40.722286,-73.987429,17z/data=!4m7!3m6!1s0x89c2598f7ff4aa09:0x313547e757cb8cea!8m2!3d40.722286!4d-73.987429!10e5?hl=en"],
    "contributors": ["https://www.google.com/maps/contrib/102520373756565203865"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("unitbytes/google-maps-photos-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "placeUrls": [
    "https://www.google.com/maps/place/Katz'\''s+Delicatessen/@40.722286,-73.987429,17z/data=!4m7!3m6!1s0x89c2598f7ff4aa09:0x313547e757cb8cea!8m2!3d40.722286!4d-73.987429!10e5?hl=en"
  ],
  "contributors": [
    "https://www.google.com/maps/contrib/102520373756565203865"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call unitbytes/google-maps-photos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unitbytes/google-maps-photos-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8SRmH83iVuntCjgzz/builds/uWAyPSy6aSg506ZaX/openapi.json
