Google Maps Photos Scraper avatar

Google Maps Photos Scraper

Pricing

$1.50 / 1,000 photos

Go to Apify Store
Google Maps Photos Scraper

Google Maps Photos Scraper

Download every photo from any Google Maps place: full-resolution image URLs, dimensions, videos, and Street View panoramas. Filter by gallery tab (menu, food & drink, by owner), find places by URL, Place ID, or search, and export as CSV, JSON, or Excel.

Pricing

$1.50 / 1,000 photos

Rating

0.0

(0)

Developer

Beat Analytics

Beat Analytics

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

11 days ago

Last modified

Share

Google Maps Photos Scraper - Download Every Place Photo with Full-Resolution URLs

Google Maps Photos Scraper is an Apify actor that extracts the complete photo gallery of any Google Maps place - every image, at full resolution, with width, height, videos, and Street View panoramas. It paginates through the entire media library rather than a bundled sample of 10, filters by gallery tab (menu, food & drink, by owner, and more), and deduplicates photos that appear in multiple tabs. Find places by URL, Place ID, or built-in search, and export your data as JSON, CSV, Excel, XML, or HTML. Use it for local-SEO audits, storefront monitoring, hospitality datasets, or computer-vision training sets.

Why use this Google Maps photos scraper?

  • ๐Ÿ–ผ๏ธ The complete gallery, not a sample - popular places carry thousands of photos where general scrapers return a handful. This one paginates the entire media library to exhaustion, or to whatever cap you set.
  • ๐Ÿ” Full-resolution image URLs - every result carries a direct, publicly fetchable image URL at Google's original resolution, plus exact pixel width and height. No thumbnails, no cropping.
  • ๐Ÿ—‚๏ธ Filter by gallery tab - scrape a specific tab: menu, food & drink, by owner, vibe, rooms, amenities, exterior, latest, and more. Tabs a place doesn't have are skipped automatically.
  • ๐Ÿ”„ Cross-tab deduplication - the same photo often appears under several tabs; when you select multiple categories, each photo is returned once.
  • ๐ŸŽฌ Photos, videos, and Street View - galleries mix stills, customer videos (direct MP4 URL and duration), and 360ยฐ panoramas. Get all of them with a type field, or narrow to photos only.
  • ๐Ÿ‘ค Owner vs. customer photos - use by_owner for business-uploaded photos, or from_visitors for customer uploads.
  • ๐Ÿ“ Built-in place search - find places by query and location (e.g. "hotels" in "Miami") without needing URLs first. All query ร— location combinations are searched.
  • ๐Ÿ”— Bulk multi-location input - scrape galleries from hundreds of places in one run using Google Maps URLs, share links, Place IDs, or Feature IDs, mixed freely.
  • ๐Ÿ’ฐ Cost control built in - set maxPhotosPerPlace to cap spend on high-volume places; charging happens after deduplication and filtering.
  • ๐Ÿ›ก๏ธ Automatic place deduplication - places found through multiple search queries or inputs are scraped only once.
  • ๐Ÿ’พ Export as JSON, CSV, Excel, XML, or HTML - all five formats work out of the box.

What data can you extract from Google Maps photos?

The scraper returns one dataset item per media item, each carrying the image URL, its dimensions, and full place context:

Place information:

  • placeName - name of the Google Maps place (e.g. "Joe's Pizza Broadway")
  • placeFeatureId - Google Maps internal feature ID (e.g. 0x89c259ab3c1ef289:0x3b67a41175949f55)
  • placePlaceId - Google Place ID (e.g. ChIJifIePKtZwokRVZ-UdRGkZzs)
  • placeUrl - canonical Google Maps URL for the place

Photo data:

  • category - the gallery tab the photo was fetched under (all, menu, by_owner, etc.)
  • type - media type: photo, video, or streetview
  • photoId - Google's unique identifier for the photo (also the deduplication key)
  • photoUrl - full-resolution image URL (the poster frame for videos), publicly fetchable
  • width - image width in pixels
  • height - image height in pixels
  • videoUrl - progressive MP4 URL for videos (null for photos and Street View)
  • duration - video duration in milliseconds (null for photos)
  • photoIndex - 0-based order of the item within the place

Note: This scraper returns photo URLs and metadata, not the image files themselves. The URLs are public and can be downloaded directly with any HTTP client, so you can fetch the bytes yourself if you need them.

How to scrape Google Maps photos

Follow these steps to extract your first gallery:

Step 1: Create a free Apify account

Sign up at apify.com if you do not have an account yet. Every new account includes free platform credits - enough to download thousands of Google Maps photos at no cost.

Step 2: Open the Google Maps Photos Scraper

Navigate to the Google Maps Photos Scraper actor page on the Apify Store and click "Try for free" to open it in your Apify Console. A working example (one restaurant URL) is prefilled, so you can get results immediately.

Step 3: Add your places or search queries

You have three ways to specify which places to scrape photos for:

  • Place URLs - paste Google Maps URLs like https://www.google.com/maps/place/... or share links like https://maps.app.goo.gl/...
  • Place IDs - enter Google Place IDs (e.g. ChIJifIePKtZwokRVZ-UdRGkZzs) or Feature IDs (e.g. 0x89c259ab3c1ef289:0x3b67a41175949f55)
  • Search - enter search queries (e.g. "hotels", "restaurants") and locations (e.g. "Miami, FL"). All combinations are searched and every matching place's gallery is scraped.

You can combine all three methods in a single run.

Step 4: Configure optional settings

  • Set Max photos per place to cap how many media items you pull from each place (leave at 0 for the full gallery)
  • Choose one or more Photo categories to scrape only specific gallery tabs
  • Restrict Media types to photos, videos, or Street View
  • Change the language and country for the Google region

Step 5: Click Start and download your data

Click "Start" to begin. Once the run completes, download your Google Maps photo data in any format: JSON, CSV, Excel, XML, or HTML. You can also access the data programmatically via the Apify API, or set up automatic exports to Google Sheets, Dropbox, Amazon S3, and other destinations.

Input parameters

ParameterTypeRequiredDefaultDescription
placeUrlsArray of URLsNo*-Google Maps place URLs or share links. Supports full URLs (google.com/maps/place/...) and share links (maps.app.goo.gl/...).
placeIdsArray of stringsNo*-Google Place IDs (ChIJ...) or Feature IDs (0x...:0x...). Can be used with or instead of Place URLs.
searchQueriesArray of stringsNo*-Search terms to find places (e.g. "pizza", "hotels"). Used together with searchLocations; all combinations are searched.
searchLocationsArray of stringsNo-Locations to search in (e.g. "New York, NY"). Used together with searchQueries.
maxPlacesPerSearchIntegerNo20Maximum number of places to find per search query + location combination.
maxPhotosPerPlaceIntegerNo0 (unlimited)Maximum media items to scrape per place. Set a cap to control cost on high-volume places.
categoriesArray (multi-select)No[] (all)Gallery tabs to scrape: all, latest, menu, food_and_drink, vibe, rooms, amenities, exterior, from_visitors, by_owner, videos, street_view. Tabs a place lacks are skipped.
mediaTypesArray (multi-select)NoallMedia types to include: photo, video, streetview.
languageStringNoenLanguage code (e.g. en, de, es). Affects category tab names.
countryStringNousCountry code (e.g. us, de, gb). Affects which Google region is used.

*At least one of placeUrls, placeIds, or searchQueries (with searchLocations) must be provided.

Category example: Setting categories to ["menu", "by_owner"] scrapes only the menu tab and owner-uploaded photos, and returns any photo that appears in both only once.

Cost-control example: For a landmark with 5,000+ photos, set maxPhotosPerPlace to 200 to fetch a representative slice at a predictable cost instead of the entire gallery.

Output example

Each item in the dataset represents a single photo or video. Results are stored in an Apify dataset and can be exported as JSON, CSV, Excel, XML, or HTML directly from the Apify Console, or accessed programmatically via the Apify API. All fields flatten cleanly to tabular formats like CSV and Excel.

{
"placeName": "Joe's Pizza Broadway",
"placeFeatureId": "0x89c259ab3c1ef289:0x3b67a41175949f55",
"placePlaceId": "ChIJifIePKtZwokRVZ-UdRGkZzs",
"placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJifIePKtZwokRVZ-UdRGkZzs",
"category": "all",
"type": "photo",
"photoId": "CIABIhDwfabL6z1S16Bd_BwOXpyH",
"photoUrl": "https://lh3.googleusercontent.com/gps-cs-s/example=w4284-h5712-k-no",
"width": 4284,
"height": 5712,
"videoUrl": null,
"duration": null,
"photoIndex": 0
}

A video item looks the same, with type set to video and the video fields populated:

{
"placeName": "Joe's Pizza Broadway",
"placeFeatureId": "0x89c259ab3c1ef289:0x3b67a41175949f55",
"placePlaceId": "ChIJifIePKtZwokRVZ-UdRGkZzs",
"placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJifIePKtZwokRVZ-UdRGkZzs",
"category": "all",
"type": "video",
"photoId": "CIHM0ogKEICAgICGgNfJ4wE",
"photoUrl": "https://lh3.googleusercontent.com/gps-cs-s/example=w1920-h1080-k-no",
"width": 1920,
"height": 1080,
"videoUrl": "https://lh3.googleusercontent.com/gps-cs-s/example=m37",
"duration": 80340,
"photoIndex": 12
}

How much does it cost to scrape Google Maps photos?

Google Maps Photos Scraper uses per-result pricing: you only pay for the media items you actually receive. Charging happens after deduplication and filtering, so you are never billed for a photo you don't get.

$1.50 per 1,000 photos - each media item in your dataset counts as one result. A place with 2,000 photos costs $3.00. There is no actor-start fee, so you pay purely for results.

Free trial: every new Apify account comes with free platform credits, no credit card required - enough to download thousands of Google Maps photos at no cost.

Enterprise plans: for very high volume, millions of images across thousands of locations, contact sales@beatanalytics.org for custom Enterprise pricing with dedicated support and volume discounts.

Use cases for Google Maps photo data

Google Maps photo data powers business, research, and machine-learning workflows:

Local SEO and Google Business Profile audits

Photo count, freshness, and quality are ranking and conversion factors for local businesses. Audit your own or a client's gallery, compare owner-uploaded vs. customer photos, and benchmark against competitors found through the built-in search. Track how a gallery grows over time with scheduled runs.

Storefront and menu monitoring

Restaurants and retailers can monitor which photos customers upload - menu shots, storefronts, interiors - and spot outdated or off-brand images. Scrape the menu tab to keep an eye on how your menu is represented across customer uploads.

Hospitality and real-estate datasets

Hotels, vacation rentals, and venues have rich galleries tagged by room, exterior, and amenities. Use the rooms, exterior, and amenities categories to assemble structured visual datasets for listings, aggregators, or market analysis.

Computer-vision and ML training sets

Full-resolution image URLs with width and height metadata make it easy to build large, labeled image datasets for food recognition, storefront classification, interior-style detection, and similar models. Category tabs give you weak labels for free.

Brand and reputation monitoring

Track the visual narrative around your brand across locations. Detect inappropriate or misleading photos early, measure the ratio of professional to user-generated content, and keep galleries fresh across every branch or franchise.

Competitive and market research

Compare how competitors present themselves visually: how many photos they have, how recent, and in which categories. Use the search feature to sweep an entire category and location (e.g. "coffee shop" in "Seattle, WA") and pull every gallery in one run.

Integrations and API access

Google Maps Photos Scraper integrates with the Apify platform ecosystem, giving you programmatic access to your scraped data and the ability to connect it to thousands of external tools.

Python

Use the Apify Python SDK to run the scraper and retrieve results programmatically:

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run_input = {
"placeUrls": [
{"url": "https://maps.app.goo.gl/KZLn9FA3aokoiVaP8"}
],
"categories": ["menu", "food_and_drink"],
"maxPhotosPerPlace": 200,
}
run = client.actor("beatanalytics/google-maps-photos-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['placeName']} - {item['type']} - {item['photoUrl']}")

JavaScript / Node.js

Use the Apify JavaScript SDK to integrate Google Maps photo scraping into your Node.js applications:

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("beatanalytics/google-maps-photos-scraper").call({
searchQueries: ["hotels"],
searchLocations: ["Miami, FL"],
maxPlacesPerSearch: 10,
maxPhotosPerPlace: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.log(`${item.placeName} - ${item.type} - ${item.width}x${item.height}`);
});

No-code integrations

Connect Google Maps Photos Scraper to thousands of apps without writing code:

  • Make (formerly Integromat) - trigger workflows when new photo data is scraped, or schedule regular runs
  • Zapier - push photo URLs into Google Sheets, Slack, CRMs, and 5,000+ other apps
  • Webhooks - receive an HTTP notification when a run completes, then process the data in your own backend
  • Google Sheets / Amazon S3 / Dropbox - export results directly to spreadsheets or cloud storage

API endpoints

Every scraper run on Apify exposes RESTful API endpoints for accessing results, checking run status, and managing datasets. See the Apify API documentation for the complete reference.

Frequently asked questions

How do I download all photos from a Google Maps place?

Open Google Maps Photos Scraper on Apify, paste the place's Google Maps URL, Place ID, or share link, leave maxPhotosPerPlace at 0, and click Start. The scraper paginates through the entire gallery and returns a full-resolution image URL for every photo. Download the results as JSON or CSV, then fetch the image files from the URLs with any HTTP client. See How to scrape Google Maps photos for a step-by-step guide.

Does it download the image files?

No - the scraper returns image URLs and metadata (dimensions, type, category), not the raw image bytes. The photoUrl values are public and directly fetchable, so downloading the actual files is a one-line HTTP request per URL in your own code. This keeps runs fast and storage costs low while giving you everything you need to retrieve the images.

Web scraping of publicly available data is generally legal in the United States, as affirmed by the 2022 US Ninth Circuit ruling in hiQ Labs v. LinkedIn, which established that scraping publicly accessible data does not violate the Computer Fraud and Abuse Act. Google Maps photos are publicly visible without requiring a login or account.

That said, you should always review Google's Terms of Service and consult with legal counsel about your specific use case. Be mindful of copyright and, where applicable, GDPR when photos contain identifiable people. Apify provides the scraping infrastructure, but users are responsible for ensuring their use of scraped data complies with applicable laws and terms of service.

How many photos can one place have?

There is no fixed limit - popular restaurants, hotels, and landmarks routinely have thousands of photos, and major tourist attractions can exceed 10,000. The scraper paginates through the full gallery automatically. For high-volume places, use maxPhotosPerPlace to cap how many you pull and control cost.

Can I filter to owner photos only?

Yes. Set categories to ["by_owner"] to scrape only business-uploaded photos, or ["from_visitors"] for customer uploads. You can also target other tabs like menu, food_and_drink, rooms, exterior, and amenities. Tabs a place doesn't have are skipped automatically.

Can I get videos and Street View, or just photos?

The scraper returns photos, customer videos, and Street View / 360ยฐ panoramas by default, each tagged with a type field. Videos include a direct MP4 videoUrl and duration. To restrict the output, use the mediaTypes parameter - for example, set it to ["photo"] for stills only.

How is this different from a general Google Maps scraper?

General Google Maps scrapers return a place's full details - name, address, rating, reviews - with only a small bundled sample of photos (often just the first 5-10). This actor is a dedicated gallery scraper: it paginates through the entire photo library, filters by gallery tab, deduplicates across tabs, and returns per-photo dimensions and video metadata. If you need complete visual coverage of a place, use this scraper; if you need business details or reviews, use the Google Maps Place Details Scraper or Google Maps Reviews Scraper.

What export formats are supported?

The scraper outputs data to an Apify dataset. From the Apify Console, you can export the results as JSON, CSV, Excel (XLSX), XML, or HTML with a single click. The data is also accessible via the Apify API for programmatic access.

Can I scrape photos from multiple places at once?

Yes. Add as many Google Maps URLs, Place IDs, or Feature IDs as you need in a single run, or use the search feature to find many places by query and location. The scraper processes places concurrently and deduplicates any place found through multiple inputs, so bulk photo scraping is fast and efficient with no duplicate work.

How often is the data updated?

The scraper fetches live data from Google Maps every time it runs - no caching, no stale data. To track how a gallery changes over time, schedule the scraper to run on a recurring basis (daily, weekly, or custom cron) using Apify's built-in scheduling feature.

What is the difference between Place IDs and Feature IDs?

Google Maps uses two identifier formats. A Place ID is a stable identifier that starts with ChIJ (e.g. ChIJifIePKtZwokRVZ-UdRGkZzs) and is the one used by the Google Places API. A Feature ID is an internal identifier in the 0x...:0x... format found in Google Maps URLs. The scraper accepts both, and it resolves Google Maps URLs and share links automatically.

Combine this scraper with our other Google Maps actors to build a complete dataset:

Google Maps Place Details Scraper

Place information - name, address, coordinates, rating, hours, categories, phone, website, attributes - plus search to discover places by query and location. Use it to find places, then pass the resulting URLs into this Photos Scraper for full visual coverage.

Google Maps Reviews Scraper

Every review for a place with exact ISO 8601 timestamps, star ratings, reviewer info, and business owner responses, plus date-range filtering. Run it alongside this scraper to pair a place's imagery with its customer sentiment.