{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Photos Scraper",
    "description": "Extract public Google Maps place photos, thumbnails, URLs, and visible metadata from place URLs or search queries.",
    "version": "0.1",
    "x-build-id": "t7dVPJOqjhwGV8Rhv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fetch_cat~google-maps-photos-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fetch_cat-google-maps-photos-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/fetch_cat~google-maps-photos-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fetch_cat-google-maps-photos-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/fetch_cat~google-maps-photos-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fetch_cat-google-maps-photos-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Google Maps place or search URLs",
            "maxItems": 100,
            "type": "array",
            "description": "Public Google Maps place/search URLs, maps.app.goo.gl links, or share.google business/place links. Generic Google share links must resolve to a verified Maps place; ordinary searches, external links and unresolved identities are rejected. Up to 100 unique targets across all lists.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "placeIds": {
            "title": "Google Maps place IDs",
            "maxItems": 100,
            "type": "array",
            "description": "Google Place IDs (`ChIJ...`), feature IDs (`0x...:0x...`), or numeric CIDs. You can combine these with URLs and queries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Search queries",
            "maxItems": 100,
            "type": "array",
            "description": "Place names or category + location searches, for example `pizza near Times Square New York`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeSearchDiscovery": {
            "title": "Include search result thumbnails",
            "type": "boolean",
            "description": "When enabled, search pages can return visible discovery thumbnails. Disable it to resolve the first matching place before collecting its gallery.",
            "default": true
          },
          "language": {
            "title": "Google Maps language",
            "pattern": "^[A-Za-z]{2,3}(-[A-Za-z]{2,4})?$",
            "type": "string",
            "description": "Language code used by Google Maps, for example `en`, `de`, `fr`, or `pt`.",
            "default": "en"
          },
          "country": {
            "title": "Google Maps country",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "Two-letter country code used to regionalize search results, for example `US`, `GB`, `DE`, or `PT`.",
            "default": "US"
          },
          "maxPhotosPerPlace": {
            "title": "Max photos per input",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of unique photo records to save from each URL, place ID, or query.",
            "default": 10
          },
          "imageSize": {
            "title": "Photo URL resolution",
            "enum": [
              "thumbnail",
              "medium",
              "large",
              "original"
            ],
            "type": "string",
            "description": "Choose the requested Google-hosted image size. `large` preserves the Actor's previous 2048 px behavior; `original` requests the original image.",
            "default": "large"
          },
          "allowEmptyResults": {
            "title": "Legacy empty-result compatibility",
            "type": "boolean",
            "description": "Completed extraction with zero usable public photos succeeds by default and reports a reason in RUN_SUMMARY. This legacy setting does not bypass identity, challenge, configuration or execution failures.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Number of Google Maps targets processed in parallel. Keep this low to reduce blocking and retry amplification.",
            "default": 1
          },
          "maxRunSeconds": {
            "title": "Processing deadline (seconds)",
            "minimum": 60,
            "maximum": 270,
            "type": "integer",
            "description": "Original-run work budget, including retries. Resuming a run does not renew it; 30 seconds are reserved for cleanup and saving progress.",
            "default": 270
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Omitted settings or an empty object use direct access. Set useApifyProxy=true for Apify Proxy; apifyProxyGroups or apifyProxyCountry also select managed access unless useApifyProxy=false explicitly opts out. Non-empty proxyUrls select an HTTP(S) customer proxy pool, including when useApifyProxy=false; do not combine them with useApifyProxy=true. Explicit settings are used as supplied rather than replaced by form defaults. No automatic direct/proxy fallback is performed. Invalid settings fail validation rather than enabling paid access. Managed proxies may add platform usage charges. Connection choices do not guarantee access or complete photo coverage.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}