# Advanced Google Maps Photos Scraper (`slash-scrape/advanced-google-maps-photos-scraper`) Actor

This Google Maps Photos scraper lets you collect links for photos for a place on Google Maps. You can get photos by category (e.g. menu, ambience, rooms) or get photos without categories. The current build returns a small set of photo URLs from the place page, not the full gallery.

- **URL**: https://apify.com/slash-scrape/advanced-google-maps-photos-scraper.md
- **Developed by:** [slash scrape](https://apify.com/slash-scrape) (community)
- **Categories:** Automation, Lead generation, Travel
- **Stats:** 395 total users, 4 monthly users, 100.0% runs succeeded, 11 bookmarks
- **User rating**: 1.00 out of 5 stars

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Google Maps Photos Scraper

### ❓ What does it do?

This Google Maps Photos scraper lets you collect links for photos for a place on Google Maps. You can get photos by category (e.g. menu, ambience, rooms) or get photos without categories. The current build returns a **small set of photo URLs from the place page, not the full gallery**.

To save bandwidth and reduce usage costs (especially if using a proxy), the photos will not be downloaded — only a link will be supplied.

***

### 💾 What data can users scrape from Google Maps?

You can scrape photo links for a place in Google Maps. This includes photos from the owner and photos attached to reviews when they appear on the place page. Do **not** expect a complete categorized gallery dump on the current build.

### 🏭 Example Output

Here's an example of Google Maps photo-link data for a place:

```json
{
  "name": "The Plaza",
  "photoURLs": [
    {"tag": "document", "url": "https://photodomain.com/hjkdfshkjfHSAH"},
    {"tag": "document", "url": "https://photodomain.com/wqesauofdsjJKL"}
  ],
  "count": 6
}
```

### 📝 Input format

You can configure the input options to get exactly the results you want:

- 🎯 Targets
  - 🔗 Place URLs
  - 🆔 Place IDs
  - 💾 Dataset ID
- 📸 Max photos per place
- 🗂️ Max photos per category
- 🚫 Ignored categories

The current build uses max photos per place as a cap. Max photos per category and ignored categories are kept for compatibility and are not applied.

Each of these options is explained further below:

- 🎯 Targets
  - You can use a sharing URL for a place or use its Place ID to scrape photos. You can supply a list of URLs and Place IDs at the same time and you will get results for all of them.
  - **If you are using the [Advanced Google Maps Scraping Manager](https://apify.com/slash-scrape/advanced-google-maps-scraping-manager) to find places to scrape, use the integrations tab in the manager actor to trigger this scraper automatically when places are found**
- 📸 Max photos per place
  - The maximum total number of photo URLs to collect (subject to what the place page shows)
  - The actual number of photo URLs in the result may be lower than max photos
- 🗂️ Max photos per category
  - Kept for compatibility; not applied on the current build
- 🚫 Ignored categories
  - Kept for compatibility; not applied on the current build

### 💳 Pricing (pay-per-event)

**Pricing:** Pay-per-event. **$0.50 per 1,000 place rows** (PPE). Actor-start billing also applies.

Free Apify users can run all documented features — nothing core is paid-only gated. This actor returns a small set of photo links from the place page (not a full gallery); volume is priced via events, not feature locks.

### 🙋‍♀️ FAQs

**Q: Can the data be exported in different formats?**\
A: Yes, the scraped data can be downloaded in formats such as JSON or CSV for analysis.

**Q: Is it legal to scrape Google Maps photos?**\
A: You should consult the Terms of Service for Google Maps to determine if your use case is permitted.

**Q: Can I input a location and search term to find places to scrape?**
A: Yes, using the [Advanced Google Maps Scraping Manager](https://apify.com/slash-scrape/advanced-google-maps-scraping-manager). This photos scraper can be chained so it runs automatically when the manager finds places that match your search.

# Actor input Schema

## `targets` (type: `array`):

List of Google Maps URLs to scrape photos from

## `placeIds` (type: `array`):

List of Google Maps Place IDs to scrape photos from

## `datasetId` (type: `string`):

Get place IDs from a dataset (e.g. from Advanced Google Maps Scraping Manager)

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

Maximum number of photos to return across all categories

## `maxPhotosPerCategory` (type: `integer`):

Maximum number of photos to return per category tab

## `ignoreCategories` (type: `array`):

Category tab labels to skip. Default skips Street View and Videos so you get real photos.

## Actor input object example

```json
{
  "targets": [
    {
      "id": "ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw",
      "url": "https://www.google.com/maps/place/?q=place_id:ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw"
    }
  ],
  "placeIds": [
    "ChIJbf8C1yFxdDkR3n12P4DkKt0"
  ],
  "maxPhotos": 100,
  "ignoreCategories": [
    "Street View & 360°",
    "Videos"
  ]
}
```

# 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 = {
    "targets": [
        {
            "id": "ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw",
            "url": "https://www.google.com/maps/place/?q=place_id:ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw"
        }
    ],
    "placeIds": [
        "ChIJbf8C1yFxdDkR3n12P4DkKt0"
    ],
    "maxPhotos": 100,
    "ignoreCategories": [
        "Street View & 360°",
        "Videos"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("slash-scrape/advanced-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 = {
    "targets": [{
            "id": "ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw",
            "url": "https://www.google.com/maps/place/?q=place_id:ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw",
        }],
    "placeIds": ["ChIJbf8C1yFxdDkR3n12P4DkKt0"],
    "maxPhotos": 100,
    "ignoreCategories": [
        "Street View & 360°",
        "Videos",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("slash-scrape/advanced-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 '{
  "targets": [
    {
      "id": "ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw",
      "url": "https://www.google.com/maps/place/?q=place_id:ChIJ3aqq5Q1ZwokRb9hLO7Gyxgw"
    }
  ],
  "placeIds": [
    "ChIJbf8C1yFxdDkR3n12P4DkKt0"
  ],
  "maxPhotos": 100,
  "ignoreCategories": [
    "Street View & 360°",
    "Videos"
  ]
}' |
apify call slash-scrape/advanced-google-maps-photos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,slash-scrape/advanced-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/aCHC8nxLaXqTmYn52/builds/s3pqCObj8JisjhmFB/openapi.json
