Google Maps Photos Scraper
Pricing
from $0.82 / 1,000 photo extracteds
Google Maps Photos Scraper
Extract public photo URLs and metadata from Google Maps places and search results.
Pricing
from $0.82 / 1,000 photo extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Google Maps Photos Scraper collects public Google Maps photos for local SEO, hospitality, retail, and lead-generation workflows, exporting image URLs and place metadata from Google Maps.
What does Google Maps Photos Scraper do?
Google Maps Photos Scraper exports public Google Maps photo URLs and visible Google Maps place metadata from Google Maps place pages and search results. It helps local SEO, hospitality, retail, and lead-generation teams collect public place-image references for media audits, competitor research, and visual reputation monitoring.
Who is it for? Common use cases
- Local SEO agencies auditing business profile photo coverage
- Hospitality, restaurant, and retail teams monitoring public place media
- Lead generation teams enriching place lists with visual signals
- Reputation/media auditors comparing competitor photos by location
- Analysts building datasets of public Maps photo links for review
What data can it export?
- Public Google-hosted photo URLs and thumbnail URLs
- Place name and resolved Google Maps URL
- Query or URL that produced each record
- Photo order/rank, visible dimensions, captions, and contributor labels when shown
- Google Maps identifiers when present in the public URL
Input example
Single landmark or business
{"queries": ["Statue of Liberty National Monument"],"maxPhotosPerPlace": 10,"includeSearchDiscovery": true,"maxConcurrency": 1,"proxyConfiguration": { "useApifyProxy": false }}
Category and location monitoring
{"queries": ["pizza near Times Square New York"],"maxPhotosPerPlace": 25,"includeSearchDiscovery": true,"maxConcurrency": 1}
Existing Google Maps URLs
{"startUrls": [{ "url": "https://www.google.com/maps/search/Eiffel+Tower" }],"maxPhotosPerPlace": 10}
Example output
{"placeName": "Statue of Liberty","placeUrl": "https://www.google.com/maps/place/...","placeId": "0x89c25090129c363d:0x40c6a5770d25022b","cid": null,"query": "Statue of Liberty National Monument","rank": 1,"photoUrl": "https://lh3.googleusercontent.com/...=w2048-h2048-k-no","thumbnailUrl": "https://lh3.googleusercontent.com/...=w408-h544-k-no","imageWidth": 408,"imageHeight": 544,"category": null,"caption": "Photo of Statue of Liberty","contributorName": null,"scrapedAt": "2026-07-10T10:00:00.000Z"}
Input settings
| Field | Type | Description |
|---|---|---|
startUrls | array | Google Maps place URLs or search URLs. |
queries | array | Place names or category + location searches. |
maxPhotosPerPlace | integer | Maximum photo records to save per input. |
includeSearchDiscovery | boolean | Include visible search-result thumbnails before a result resolves to a single place. |
maxConcurrency | integer | Browser pages in parallel; keep low for Google Maps reliability. |
proxyConfiguration | object | Optional Apify Proxy settings. Start without proxy or with datacenter; use residential only if your run is blocked. |
Output fields
| Field | Description |
|---|---|
placeName | Visible Google Maps place name when available. |
placeUrl | Resolved Maps URL used for extraction. |
placeId, cid | Google Maps identifiers when present in the URL. |
query | Query that produced the record, if any. |
rank | Photo order within the input page. |
photoUrl | Normalized public photo URL. |
thumbnailUrl | Thumbnail URL visible in Google Maps. |
imageWidth, imageHeight | Visible image dimensions when available. |
category | Visible album/category label when available. |
caption | Visible alt text or aria label when available. |
contributorName | Public contributor/owner label when visible. |
scrapedAt | ISO timestamp for the scrape. |
Pricing
This actor uses pay-per-event pricing:
- Run start: $0.005 per run
- Photo records: $0.006 per photo record on the BRONZE tier
Tier labels and per-photo prices:
| Tier | Price per photo |
|---|---|
| Free | $0.00690 |
| Bronze | $0.00600 |
| Silver | $0.00468 |
| Gold | $0.00360 |
| Platinum | $0.00240 |
| Diamond | $0.00168 |
For quick estimates, 1,000 photo records cost about $6.00 plus the small start fee on BRONZE.
Tips for best results
- Use specific place names with city/location, such as
Hotel Chelsea New York. - For category monitoring, use queries such as
coffee shops near Shibuya Tokyoand keepincludeSearchDiscoveryenabled. - Keep
maxPhotosPerPlacelow for first tests, then scale after confirming output quality. - If Google blocks requests in your region, enable Apify Proxy in the input.
Limits and legality
This actor extracts only public Google Maps photo URLs and visible public metadata. It does not log in, bypass paywalls, download private content, or collect hidden account data. Always use the results according to Google Maps terms, privacy rules, and your local laws.
Verified public example tasks
These Apify Store tasks use small, QA-verified inputs and can be opened or cloned directly:
- Compare Nyc Landmark Google Maps Photos — verified run
ZhBj7JowEZ4JjwaSWproduced 6 dataset items. - Find Pizza Photos Near Times Square — verified run
zA3BdKsSFGZFzA1UHproduced 10 dataset items. - Scrape Eiffel Tower Place Photos — verified run
4ulaObBIcZK0mFJhRproduced 3 dataset items. - Scrape Statue Of Liberty Google Maps Photos — verified run
SNbKdQr9Q26O2OsrIproduced 1 dataset item.
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/google-maps-photos-scraper').call({queries: ['Statue of Liberty National Monument'],maxPhotosPerPlace: 10});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('fetch_cat/google-maps-photos-scraper').call(run_input={'queries': ['Statue of Liberty National Monument'],'maxPhotosPerPlace': 10,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~google-maps-photos-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"queries":["Statue of Liberty National Monument"],"maxPhotosPerPlace":10}'
MCP and agent usage
Use this actor from agents through Apify MCP:
https://mcp.apify.com/?tools=fetch_cat/google-maps-photos-scraper
Claude CLI example:
$claude mcp add apify https://mcp.apify.com/?tools=fetch_cat/google-maps-photos-scraper
JSON configuration example:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=fetch_cat/google-maps-photos-scraper"}}}
Example prompts:
- "Collect public Google Maps photos for these five hotel URLs."
- "Find visible photo thumbnails for pizza places near Times Square."
- "Export Maps photo URLs for this landmark query as JSON."
Related actors
- Google Maps Reviews Scraper
- Google Maps Lead Finder
- Google Autocomplete Scraper
- Google Search Results Scraper
FAQ
Does it download image files?
No. It exports public image URLs and thumbnails; you can download files separately if your use case allows it.
Can it scrape private photos?
No. Only public Google Maps media visible without login is in scope.
Why are some fields empty?
Google Maps does not expose every label, contributor, or category in every visible page state. Empty optional fields mean the value was not public/visible during the run.
Support
If you need help, open an issue on the Apify actor page and include:
- Input JSON you used
- Expected output
- Actual output or dataset sample
- Reproducible public URL (for example, a public Google Maps URL) or query
- Run ID and error message, if any
Changelog
-
2026-07-16 - Feature: Added ready-to-run example tasks on the Apify Store
-
2026-07-16 - Feature: Launched google maps photos scraper for public Apify Store users.