Google Maps Photos Scraper - Menu, Food, Vibe & Owner avatar

Google Maps Photos Scraper - Menu, Food, Vibe & Owner

Pricing

from $1.06 / 1,000 place photos

Go to Apify Store
Google Maps Photos Scraper - Menu, Food, Vibe & Owner

Google Maps Photos Scraper - Menu, Food, Vibe & Owner

Extract every Google Maps photo for any place, tagged by the same categories Maps shows: Menu, Food & drink, Vibe, By owner, Street View & 360. Full resolution, dates, GPS.

Pricing

from $1.06 / 1,000 place photos

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Google Maps Photos Scraper — Menu, Food, Vibe & Owner Photos 📸

Store SIÁN Agency Store Google Maps Scraper Store Google Maps Traffic Store Tripadvisor Hotels

🎉 Photos tagged the way Google tags them — Menu, Food & drink, Vibe, Rooms, By owner

For menu digitisation, hotel galleries, brand audits and vision-model training sets


🔎 What is the Google Maps Photos Scraper — and when should you use it?

The Google Maps Photos Scraper turns the photo library behind any Google Maps place into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

Use it when you need: the photo library behind a Google Maps place, one row per photo, each tagged with the category tab Google files it under: Menu, Food & drink, Vibe, Rooms, Exterior, Amenities, By owner, From visitors, Street View & 360°. Rows carry a full-resolution image URL, a thumbnail, native pixel dimensions, the upload date, GPS coordinates, a flag saying whether the business or a visitor posted it, and the place's own name, address and category. Videos come through with a playable URL and a duration. Places can be given as Maps URLs, hex place IDs, or plain text such as a business name and city.

Use something else when: you need to find the places themselves rather than their photos. Use Google Maps Scraper for searching Google Maps for businesses and returning their details, emails, reviews and lead data. Use Google Maps Traffic API for live traffic incidents, accidents and road closures rather than place imagery. This actor takes places you already know and goes deep on their photos. It does not search for places, and it does not return reviews, opening hours or contact details.

🤖 Use with AI agents

Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/google-maps-photos-scraper

Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want categorised photos for Google Maps places using the Apify Actor `sian.agency/google-maps-photos-scraper`.
Use it when I need: the photo library behind a Google Maps place, one row per photo, each tagged with the category tab Google files it under: Menu, Food & drink, Vibe, Rooms, Exterior, Amenities, By owner, From visitors, Street View & 360°. Rows carry a full-resolution image URL, a thumbnail, native pixel dimensions, the upload date, GPS coordinates, a flag saying whether the business or a visitor posted it, and the place's own name, address and category. Videos come through with a playable URL and a duration. Places can be given as Maps URLs, hex place IDs, or plain text such as a business name and city.
Don't use it when: you need to find the places themselves rather than their photos — use local-business-data-scraper or google-maps-traffic-alerts instead.
How to call it: put one or more places in `places`, as a Google Maps place URL, a hex place ID like `0x89c2598f7ff4aa09:0x313547e757cb8cea`, or plain text such as "Katz's Delicatessen New York"; choose which tabs to pull with `photoCategories` (`all`, `menu`, `food_and_drink`, `vibe`, `rooms`, `exterior`, `amenities`, `from_visitors`, `by_owner`, `street_view_360`, `latest`, `videos`); cap spend per place with `maxPhotosPerPlace`; pick `imageSize` (`thumbnail`, `medium`, `large` or `original`); set `language` for the category labels; and turn `includeVideos` off for stills only.
Start with this input:
{
"places": [
"Katz's Delicatessen New York"
],
"photoCategories": [
"menu",
"food_and_drink"
],
"maxPhotosPerPlace": 50,
"imageSize": "original"
}
Ask me which places you want photos for, and whether you need the whole library or only certain tabs such as Menu or By owner, then run the Actor and summarise the results as a table.

Things you can ask your agent for:

  • Pull the Menu tab for 30 pizzerias in Brooklyn and give me one image URL per row so I can run OCR over them.
  • Get the Rooms and Amenities photos for these five hotels at full resolution and tell me which one has the fewest owner-posted images.
  • Collect every By owner photo for our 12 store locations and flag any location whose newest owner photo is more than a year old.

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/google-maps-photos-scraper.md.

📋 Overview

Google Maps holds more photos of a business than the business does. It already sorts them for you, too. This Actor gives you that sorted library as data.

Point it at a place and you get one row per photo, each stamped with the category tab Google files it under. A restaurant returns Menu, Food & drink and Vibe. A hotel returns Rooms, Exterior, Amenities and From visitors. A museum returns its gallery names. You did not classify any of it, and neither did we.

What you get:

  • Google's own categories: Menu, Food & drink, Vibe, Rooms, Exterior, Amenities, By owner, From visitors, Street View & 360°, Videos
  • Up to 200 photos per request, in under a second. A busy restaurant's whole library takes a handful of calls
  • 🎯 One row per photo, so you can filter by category, sort by date and feed an image pipeline without unpacking a bundle first
  • 💰 From $1.20 per 1,000 photos on paid plans, a third under the next-cheapest categorised photo Actor
  • 💎 Plain-text place lookup: paste "Katz's Delicatessen New York" and skip the URL hunt
  • 🏢 Owner vs visitor flag on every row, straight from Google's own upload source
  • 🌐 18 languages for the category labels, matched on Google's language-independent category IDs

✨ Features

  • 🏷️ Category-tagged rows: every photo carries the Maps tab it came from, plus a stable slug you can filter on
  • 📍 Three ways to name a place: Maps URL, hex place ID, or just the name and city
  • 🖼️ Four resolutions: thumbnail, medium, large, or each photo's own native size
  • 🎬 Videos included: playable URL and clip length, or switch them off for stills only
  • 📅 Upload dates: know whether a place's imagery is current or five years stale
  • 🌐 GPS per photo: latitude and longitude on every row
  • 🏢 Owner-uploaded flag: separate the business's approved shots from customer photos
  • 🔢 Per-place caps: stop at 50 photos or 5,000. You decide what each place is worth
  • 🚫 Nothing invented: a tab a place does not have is skipped, never filled with mislabelled photos
  • 🔑 No API key, no proxy, no account. Paste places and press run

🎬 Quick Start

Paste one or more places, pick the categories you care about, and run. Results land in a dataset you can export as JSON, CSV or Excel. A bare run with no configuration returns photos for the example place, so you can see the shape of the data before committing to a list.

curl -X POST https://api.apify.com/v2/acts/sian.agency~google-maps-photos-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"places": ["Katz'\''s Delicatessen New York"]}'

🚀 Getting Started (3 Simple Steps)

Step 1: Name your places

Paste Google Maps URLs, hex place IDs, or plain business names, one per line.

Step 2: Pick your categories

Leave it on All photos for the whole library, or narrow to Menu, Rooms, By owner or any other tab.

Step 3: Set a cap and run

Choose how many photos each place is worth, then press Start.

That's it! In under a minute, you'll have:

  • Every photo URL at the resolution you asked for
  • The Google Maps category tab behind each one
  • Upload dates, dimensions, GPS and the owner-versus-visitor split

📥 Input Configuration

FieldTypeRequiredDescription
placesarrayNoMaps URLs, hex place IDs, or plain place names, one per line
photoCategoriesarrayNoWhich category tabs to pull. Default: all photos
maxPhotosPerPlaceintegerNoPhoto cap per place. Default: 100
imageSizestringNothumbnail, medium, large or original. Default: original
languagestringNoLanguage of the category labels. Default: en
includeVideosbooleanNoKeep video clips alongside photos. Default: true

Example:

{
"places": ["Katz's Delicatessen New York"],
"maxPhotosPerPlace": 100
}

Menu photos for several restaurants:

{
"places": [
"Joe's Pizza 7 Carmine St New York",
"Lou Malnati's Pizzeria River North Chicago",
"https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/data=!4m6!3m5!1s0x89c2598f7ff4aa09:0x313547e757cb8cea!8m2!3d40.722233!4d-73.987429"
],
"photoCategories": ["menu", "food_and_drink"],
"maxPhotosPerPlace": 60,
"imageSize": "original"
}

📤 Output

Results are saved to the Apify dataset with 20+ fields including:

FieldTypeDescription
photoUrlstringImage URL at your chosen resolution
thumbnailUrlstring400px version, always present
categoryLabelstringThe Maps tab this photo came from, in your language
categorySlugstringStable, language-independent category key
isOwnerPhotobooleanBusiness uploaded it, or a visitor did
mediaTypestringphoto, video or street_view
width / heightnumberNative pixel dimensions
uploadedAtstringWhen the photo was posted to Maps
videoUrlstringPlayable clip, on video rows
videoDurationMsnumberClip length in milliseconds
latitude / longitudenumberWhere the photo was taken
placeNamestringThe place this photo belongs to
placeAddressstringStreet address from Google Maps
placeCategorystringDeli, Hotel, Historical landmark, and so on
placeFtidstringGoogle's hex place ID. Paste it back in to re-run
placeUrlstringOpens the place on Google Maps

Example:

{
"photoId": "CIHM0ogKEICAgIDCx92MtgE",
"photoUrl": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWl...=w1048-h699-k-no",
"thumbnailUrl": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWl...=w400-h300-k-no",
"width": 1048,
"height": 699,
"mediaType": "photo",
"categoryLabel": "Menu",
"categorySlug": "menu",
"isOwnerPhoto": true,
"uploadedAt": "2020-10-14T05:00:00.000Z",
"latitude": 40.7223437,
"longitude": -73.9872214,
"placeName": "Katz's Delicatessen",
"placeAddress": "205 E Houston St, New York, NY 10002",
"placeCategory": "Deli",
"placeFtid": "0x89c2598f7ff4aa09:0x313547e757cb8cea",
"placeUrl": "https://www.google.com/maps?cid=3545819340560108778",
"status": "success"
}

💼 Use Cases & Examples

1. Menu Digitisation

Delivery platforms and menu-data teams pulling photographed menus at scale.

Input: a list of restaurants, photoCategories: ["menu"] Output: menu-board and dish photos at native resolution Use: feed them straight to OCR. The category comes from Google, so you skip the "is this a menu or a dessert" classification step entirely.

2. Hotel & Venue Image Libraries

Travel marketplaces and property teams filling listing galleries.

Input: hotel names or Maps URLs, photoCategories: ["rooms", "exterior", "amenities"] Output: room, exterior and facility photos, dated and sized Use: enrich listings, or audit which properties have thin and outdated imagery worth an outreach call.

3. Brand & Franchise Photo Audits

Brand managers checking what customers actually see.

Input: every location of a chain, photoCategories: ["by_owner", "from_visitors"] Output: the owner-approved set and the visitor set, side by side Use: find locations where customer photos have buried the official ones, or where nobody has posted an owner photo in two years.

4. Vision-Model Training Sets

ML teams building labelled image datasets.

Input: hundreds of places across a category Output: category-labelled, geotagged, dated images at native resolution Use: food imagery by cuisine, interiors by venue type, storefronts by street. The labels came from Google rather than from a heuristic you have to defend.

5. Competitive Visual Monitoring

Local marketing agencies tracking a competitor set.

Input: competitor locations, photoCategories: ["latest"], on a schedule Output: the newest photos each run Use: new photo volume, and who is posting it, is a fast proxy for how busy a location really is.

6. Travel Content & Directory Galleries

Publishers sourcing location imagery.

Input: landmarks, restaurants and neighbourhoods for a city guide Output: full-resolution photos with GPS and dates Use: build guides, city directories and landing-page galleries without a stock-photo bill.

7. Street View & 360° Collection

Mapping and real-estate teams after panoramas.

Input: addresses, photoCategories: ["street_view_360"] Output: panoramic and 360° imagery with camera position Use: site surveys and neighbourhood context without visiting.


🔗 Integration Examples

JavaScript/Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/google-maps-photos-scraper').call({
places: ["Katz's Delicatessen New York"],
photoCategories: ['menu'],
maxPhotosPerPlace: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/google-maps-photos-scraper').call(
run_input={
'places': ["Katz's Delicatessen New York"],
'photoCategories': ['menu'],
'maxPhotosPerPlace': 50,
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['photoUrl'], item['categoryLabel'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~google-maps-photos-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"places": ["Katz'\''s Delicatessen New York"], "photoCategories": ["menu"]}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: Schedule, or a webhook carrying new place URLs
  2. HTTP Request: Call the Actor API
  3. Process: Filter rows by categorySlug or isOwnerPhoto
  4. Action: Push image URLs to your CDN, OCR queue or listing database

📊 Performance & Pricing

FREE Tier (Try It Now)

  • 25 photos per run, with every feature and the same data quality
  • No credit card required
  • Enough to check the categories and fields against a place you know
  • Unlimited photos per run
  • Up to 200 photos per request, in under a second
  • Pay-per-result: charged per photo returned, never for a place that fails

💰 $1.20 per 1,000 photos on paid plans, a third below the next-cheapest categorised photo Actor. The price drops further on higher tiers.

🔗 View current pricing


❓ Frequently Asked Questions

Q: How many photos can one place return? A: As many as Google Maps holds. Busy restaurants and landmarks run into the thousands, so the practical limit is the per-place cap you set.

Q: Do I need a Google Places API key? A: No. There is no key, no quota and no billing account to set up.

Q: Where do the categories come from? A: From Google. The Actor reads the same category tabs the Maps website shows for that place and uses Google's own category IDs to filter. Nothing is guessed from the image.

Q: Can I paste a place name instead of a URL? A: Yes. Text like "Katz's Delicatessen New York" is resolved through Google Maps first, and the place name, address, category and GPS come back on every row.

Q: Does it tell me who took each photo? A: It tells you whether the business or a visitor uploaded it. It does not return contributor names or profile links. Google's photo data carries no such field, so that column would be permanently empty and we would rather not ship it.

Q: Are the image URLs full resolution? A: Yes, with resolution set to Original. Each photo's native dimensions come from the data and the URL is built to match, so you get the largest size Google holds.

Q: What happens if I ask for Menu photos of a hotel? A: That tab is skipped and the run says so. You get nothing for it rather than a set of unrelated photos labelled "Menu".

Q: Are videos included? A: Yes, with a playable URL and a clip length. Switch Include videos off if you only want stills.


🐛 Troubleshooting

"No Google Maps place found for ..."

  • Add the city or a street to the place name. "Joe's Pizza" alone matches dozens of places
  • Or paste the Maps URL straight from your browser's address bar

A short maps.app.goo.gl link does not work

  • Open it in a browser first, then copy the full URL from the address bar

Fewer photos than expected

  • Check your per-place cap
  • On the free tier every run stops at 25 rows
  • Some places genuinely hold very few photos. A small clinic may have six

A category came back empty

  • The run log lists the tabs each place actually offers. Places only carry the tabs Google gives them, and Menu, Rooms and Amenities depend entirely on the type of business.

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Photos on Google Maps are uploaded by businesses and by members of the public, and they remain the property of whoever took them. Check the licensing position before republishing any image commercially.

You can also read Apify's blog post on the legality of web scraping.

Google and Google Maps are trademarks of Google LLC. This actor is not affiliated with, endorsed by, or sponsored by Google.


🤝 Support

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools