{
  "markdown": "# 📸 Google Maps Photos API: every place photo as clean JSON\n\nPull every photo Google Maps holds for a business or landmark, as structured JSON. Type a place name and get back full-size image URLs, thumbnails, gallery positions, and a stable photo ID for each one.\n\n**Actor:** [Google Maps Photos API on Apify Store](https://apify.com/johnvc/google-maps-photos-api?fpr=9n7kx3)\n\n## Video Walkthrough\n\nhttps://www.youtube.com/watch?v=jREWahDGhJM\n\n## Quick Start\n\n```bash\ngit clone https://github.com/johnisanerd/Apify-Google-Maps-Photos-API.git\ncd Apify-Google-Maps-Photos-API\ncp .env.example .env          # paste your Apify token\nuv sync\nuv run google-maps-photos-api-example.py\n```\n\nGet a free Apify API key at [apify.com](https://apify.com?fpr=9n7kx3).\n\n## Why Use This Google Maps Photos API?\n\n- **No place ID needed.** Search by name, or by category and city. Paste a Google Maps URL if you have one. Identifiers work too, and skip the search charge.\n- **Filter to one gallery section.** Menu, food and drink, vibe, by owner, videos, or Street View and 360.\n- **Stable photo IDs.** Every row carries one, so a re-run updates rather than duplicates.\n- **Category discovery built in.** Each place contributes a summary row listing every gallery section it offers, with the ID to filter by.\n\n## Features\n\n| Feature | Detail |\n|---|---|\n| Search by name | `searchTerm` takes a business name or a category plus a city |\n| Google Maps URLs | `placeUrls` parses the identifier out of the link locally, no lookup |\n| Place identifiers | `dataId` and `dataIds` accept the hex pair or a `fid` from a places search |\n| Category filter | 8 sections; 5 universal, 3 on food and drink venues |\n| Bulk | `maxPlacesPerSearch` sweeps a whole neighbourhood in one run |\n| Localization | `hl` sets the interface language |\n\n## Usage Examples\n\nSearch a neighbourhood and pull food photos for the top five matches:\n\n```python\nrun_input = {\n    \"searchTerm\": \"coffee shops in Austin, TX\",\n    \"maxPlacesPerSearch\": 5,\n    \"photoCategory\": \"food_and_drink\",\n    \"maxPhotosPerPlace\": 40,\n}\n```\n\nStreet View and 360 panoramas for one place:\n\n```python\nrun_input = {\"searchTerm\": \"Blanton Museum of Art, Austin TX\", \"photoCategory\": \"street_view\"}\n```\n\nSkip the search charge with identifiers you already have:\n\n```python\nrun_input = {\"dataIds\": [\"0x8644b5554461664d:0xbc4ff333ec9ad1ad\"], \"maxPhotosPerPlace\": 20}\n```\n\n## Input Parameters\n\n| Parameter | Type | Description |\n|---|---|---|\n| `searchTerm` | string | Find a place by name, or by category and city. Billed per search. |\n| `searchTerms` | array | Several searches in one run. |\n| `maxPlacesPerSearch` | integer | How many matches per search to fetch photos for. Default 3, max 20. |\n| `placeUrls` | array | Google Maps place URLs. Parsed locally, no search charge. |\n| `dataId` / `dataIds` | string / array | Place identifiers. No search charge. |\n| `maxPhotosPerPlace` | integer | Default 20. Photos arrive in blocks of 20. |\n| `photoCategory` | select | all, latest, videos, by_owner, street_view, menu, food_and_drink, vibe |\n| `categoryId` | string | A venue-specific section, such as one dish. Overrides `photoCategory`. |\n| `hl` | string | Two-letter interface language. Default `en`. |\n\n## Output Format\n\nOne row per photo:\n\n```json\n{\n  \"result_type\": \"photo\",\n  \"data_id\": \"0x8644b5554461664d:0xbc4ff333ec9ad1ad\",\n  \"place_title\": \"Mozart's Coffee Roasters\",\n  \"position\": 1,\n  \"image\": \"https://lh3.googleusercontent.com/gps-cs-s/...=w608-h342-k-no\",\n  \"thumbnail\": \"https://lh3.googleusercontent.com/gps-cs-s/...=w203-h114-k-no\",\n  \"photo_id\": \"CIABIhAhgrI-VHBBnTZQYGq3jqot\",\n  \"fetched_at\": \"2026-08-04T00:24:39.188574+00:00\"\n}\n```\n\nPlus one unbilled summary row per place, which is how you discover its gallery sections:\n\n```json\n{\n  \"result_type\": \"place_summary\",\n  \"place_title\": \"Mozart's Coffee Roasters\",\n  \"photos_returned\": 20,\n  \"pages_fetched\": 1,\n  \"place_categories\": [\n    { \"title\": \"Menu\", \"id\": \"CgIYIQ\" },\n    { \"title\": \"Street View & 360\", \"id\": \"CgIgARICCAI\" }\n  ]\n}\n```\n\nCaptions, EXIF, contributor names, and upload dates are not returned.\n\n## Install in Claude Cowork Desktop\n\n![Install in Claude Cowork Desktop](https://raw.githubusercontent.com/johnisanerd/ApifyPublicData/main/assets/guides/install_mcp_into_claude_desktop.png)\n\nCowork is the desktop app's automation mode. To give it the Google Maps Photos API as a tool, add the Apify MCP server as a connector.\n\n1. Open the Claude desktop app and go to **Settings → Connectors** (or **Settings → Developer → Edit Config** to edit `claude_desktop_config.json` directly).\n   - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`\n   - Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n2. Add the Apify MCP server, preloaded with only this Actor:\n\n```json\n{\n  \"mcpServers\": {\n    \"apify\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote\",\n        \"https://mcp.apify.com/?tools=actors,docs,johnvc/google-maps-photos-api\"\n      ]\n    }\n  }\n}\n```\n\n3. Restart the app. When Cowork first calls the tool, complete the OAuth prompt in your browser, or add your Apify API token in the connector settings to skip OAuth.\n4. In a Cowork chat, confirm the tool is available and ask it to run the Google Maps Photos API.\n\nDownload the desktop app and start a free trial: https://claude.ai/referral/uIlpa7nPLg\nMore help: https://docs.apify.com/platform/integrations/claude-desktop\n\n## Install in Claude Code\n\n![Install in Claude Code](https://raw.githubusercontent.com/johnisanerd/ApifyPublicData/main/assets/guides/install_mcp_into_claude_code.png)\n\nClaude Code is the command-line tool. Add the Actor's MCP server with one command:\n\n```bash\nclaude mcp add --transport http apify \\\n  \"https://mcp.apify.com/?tools=actors,docs,johnvc/google-maps-photos-api\"\n```\n\nTo use a token instead of browser OAuth:\n\n```bash\nclaude mcp add --transport http apify \\\n  \"https://mcp.apify.com/?tools=actors,docs,johnvc/google-maps-photos-api\" \\\n  --header \"Authorization: Bearer YOUR_APIFY_TOKEN\"\n```\n\nThen verify with `claude mcp list`, or run `/mcp` inside a session. Ask Claude Code to call the Google Maps Photos API.\n\nTry Claude Code free: https://claude.ai/referral/uIlpa7nPLg\nClaude Code MCP docs: https://code.claude.com/docs/en/mcp\n\n## Install in Claude (website)\n\n![Install in Claude (website)](https://raw.githubusercontent.com/johnisanerd/ApifyPublicData/main/assets/guides/install_mcp_into_claude_ai.png)\n\nOn claude.ai you add Apify as a connector, then enable just this Actor's tool.\n\n1. Go to **Settings → Connectors → Browse connectors** and search for **Apify MCP server**. Install it (enable or update if prompted).\n2. When connecting, authenticate with your Apify API token, and enable the tool `johnvc/google-maps-photos-api`.\n3. In any chat, open **+ → Connectors** and turn on **Apify**.\n4. Alternatively, choose **Add custom connector** and paste the full MCP URL `https://mcp.apify.com/?tools=actors,docs,johnvc/google-maps-photos-api`, using OAuth when prompted.\n5. Ask Claude to run the Google Maps Photos API.\n\nOpen Claude on the web: https://claude.ai/referral/uIlpa7nPLg\n\n## Install in Cursor\n\n![Install in Cursor](https://raw.githubusercontent.com/johnisanerd/ApifyPublicData/main/assets/guides/install_mcp_into_cursor.png)\n\nCursor reads MCP servers from a project file at `.cursor/mcp.json`.\n\n1. In your project, create `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"apify\": {\n      \"url\": \"https://mcp.apify.com/?tools=actors,docs,johnvc/google-maps-photos-api\"\n    }\n  }\n}\n```\n\n2. If you prefer token auth over browser OAuth, add a header:\n\n```json\n{\n  \"mcpServers\": {\n    \"apify\": {\n      \"url\": \"https://mcp.apify.com/?tools=actors,docs,johnvc/google-maps-photos-api\",\n      \"headers\": { \"Authorization\": \"Bearer YOUR_APIFY_TOKEN\" }\n    }\n  }\n}\n```\n\n3. Open **Cursor → Settings → MCP** and confirm the **apify** server is connected (green dot).\n4. In Composer or Chat, ask Cursor to call the Google Maps Photos API.\n\nNew to Cursor? Get it here: https://cursor.com/referral?code=XQP4VBLI3NNX\n\n## Install in ChatGPT\n\n![Install in ChatGPT](https://raw.githubusercontent.com/johnisanerd/ApifyPublicData/main/assets/guides/install_mcp_into_ChatGPT.png)\n\nChatGPT connects to the Apify MCP server through Developer mode (available on ChatGPT Pro, Plus, Business, Enterprise, and Education plans).\n\n1. Click your profile icon, then go to **Settings > Apps**. If you do not see a **Create app** button, open **Advanced settings** and enable **Developer mode**.\n2. Click **Create app** and fill out the form:\n   - **Name:** Apify\n   - **MCP Server URL:** `https://mcp.apify.com/?tools=actors,docs,johnvc/google-maps-photos-api`\n   - **Authentication:** OAuth\n3. Click **Create** and authorize the connection with Apify.\n4. To use the app in a conversation, click **+** in the chat, choose **Developer mode**, and select **Apify**.\n\nMore help: https://docs.apify.com/platform/integrations/mcp\n\n---\n\n[**Made with care**](https://apify.com/johnvc?fpr=9n7kx3)\n\n*Use the Google Maps Photos API to power local lead lists, market research, and place data for your product or AI agent.*\n\n## Featured Tasks\n\nReady-to-run examples on the Apify Store, each targeting one local-data use case:\n\n- [Extract local business leads from Google Maps by API](https://apify.com/johnvc/google-maps-photos-api/examples/extract-local-business-leads-from-google-maps-by-api?fpr=9n7kx3)\n- [Extract phone numbers from Google Maps by zip code](https://apify.com/johnvc/google-maps-photos-api/examples/extract-phone-numbers-from-google-maps-by-zip-code?fpr=9n7kx3)\n- [Find roofing contractor leads in Tampa with phone numbers](https://apify.com/johnvc/google-maps-photos-api/examples/find-roofing-contractor-leads-in-tampa-with-phone-numbers?fpr=9n7kx3)\n- [Build a list of med spas in Miami with phone numbers](https://apify.com/johnvc/google-maps-photos-api/examples/build-a-list-of-med-spas-in-miami-with-phone-numbers?fpr=9n7kx3)\n- [Generate local leads in Claude via Google Maps MCP](https://apify.com/johnvc/google-maps-photos-api/examples/generate-local-leads-in-claude-via-google-maps-mcp?fpr=9n7kx3)\n- [Export Google Maps Places to CSV](https://apify.com/johnvc/google-maps-photos-api/examples/export-google-maps-places-to-csv?fpr=9n7kx3)\n\nLast Updated: 2026.08.08\n",
  "bytes": 10328,
  "sha": "f61697bb3f3081854021f8e541bbf9341e97e28a80e7a2bf3d9f1fed1154d88b",
  "repo_slug": "johnisanerd/apify-google-maps-photos-api",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_johnisanerd_google_maps_photos_25476ecb/readme"
}