{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Place Details Scraper",
    "description": "Google Maps place details by place ID, CID or link: popular times, live busyness, visit duration, dishes, menu, hours, phone, website, rating breakdown, review highlights, photos by category, plus emails and socials from the website. Bulk lookups, no login.",
    "version": "0.2",
    "x-build-id": "yL1sewkAoZ1TNvxEb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/deepmine~google-maps-place-details-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-deepmine-google-maps-place-details-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/deepmine~google-maps-place-details-scraper/runs": {
      "post": {
        "operationId": "runs-sync-deepmine-google-maps-place-details-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/deepmine~google-maps-place-details-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-deepmine-google-maps-place-details-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": {
          "placeIds": {
            "title": "🗃️ Places: IDs or Google Maps links",
            "type": "array",
            "description": "Google place IDs (<code>ChIJifIePKtZwokRVZ-UdRGkZzs</code>), CIDs (<code>4280570365733019477</code>), feature IDs (<code>0x89c259ab3c1ef289:0x3b67a41175949f55</code>) and place links from the address bar (<code>https://www.google.com/maps/place/...</code>), share links (<code>https://maps.app.goo.gl/...</code>) or <code>?cid=</code> links, one per line, mixed freely. Replace the examples with your own places: only what is in this list is read. The same place given twice (an ID and a link) is read and charged once.",
            "items": {
              "type": "string"
            }
          },
          "scrapeContacts": {
            "title": "📧 Emails and social profiles from the website",
            "type": "boolean",
            "description": "Reads each place's website (home page plus up to 2 contact pages): emails, phones, WhatsApp, Facebook, Instagram, LinkedIn, X, YouTube, TikTok and more, the contact page and what the homepage showed (working, parked, blocked, unreachable; platform, HTTPS, mobile layout). Included in the place price.",
            "default": true
          },
          "language": {
            "title": "🌍 Language",
            "type": "string",
            "description": "Language of names, categories, hours, popular-times labels, dishes and reviews, as Google Maps shows them. Pick one, or type any Google language code (e.g. es-419).",
            "default": "en"
          },
          "countryCode": {
            "title": "🗺️ Country (Google region)",
            "type": "string",
            "description": "Two letters, e.g. <strong>de</strong>: the Google region used for the lookups (and for a search's location)."
          },
          "photosPerCategory": {
            "title": "🗂️ Photos per category (up to 10)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Adds photosByCategory: up to this many photo links from each photo category the place has (Menu, Food & drink, Vibe, By owner, Latest, Videos, Street View & 360°, a hotel's Rooms...), and fills imageCategories. Included in the place price. 0 = none.",
            "default": 0
          },
          "photoCategories": {
            "title": "🗂️ Which photo categories",
            "type": "array",
            "description": "With Photos per category above 0: the categories to read. <strong>All</strong> = every category Google shows the place with (a category the place doesn't have adds nothing).",
            "items": {
              "type": "string",
              "enum": [
                "all",
                "latest",
                "menu",
                "food_and_drink",
                "vibe",
                "by_owner",
                "street_and_360",
                "videos",
                "rooms",
                "amenities",
                "inside",
                "exterior"
              ],
              "enumTitles": [
                "All photos and videos",
                "Latest (past month, newest first)",
                "Menu",
                "Food & drink",
                "Vibe",
                "By owner",
                "Street View & 360°",
                "Videos",
                "Rooms",
                "Amenities",
                "Inside",
                "Exterior"
              ]
            },
            "default": [
              "all"
            ]
          },
          "maxReviews": {
            "title": "⭐ Reviews per place",
            "minimum": 0,
            "type": "integer",
            "description": "Adds reviews with text, stars, date, reviewer, ratings and the owner's reply. Signed-out Google Maps shows at most about 15 reviews of a place (the 5 newest and up to 10 most relevant; 5 each in highest or lowest rated order), so a higher number gives up to 15 per place and the run says so. Included in the place price. 0 = none.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Which reviews first",
            "enum": [
              "newest",
              "mostRelevant",
              "highestRanking",
              "lowestRanking"
            ],
            "type": "string",
            "description": "Newest: the 5 newest reviews, then the most relevant. Most relevant: the 10 most relevant, then the newest. Highest or lowest rated: the 5 highest or lowest rated reviews (signed-out Google Maps shows 5 in those orders). No keyword filter in this version.",
            "default": "newest"
          },
          "maxImages": {
            "title": "🖼️ Photos per place (up to 100)",
            "minimum": 0,
            "type": "integer",
            "description": "Photo URLs in imageUrls. Up to 6 come from the photo strip on the place page; more than 6 reads the place's photo gallery and also fills images (each photo's size, upload date, owner or visitor, video link). Included in the place price. The total photo count is always in imagesCount. 0 = none. A number above 100 gives 100 (the run says so).",
            "default": 6
          },
          "scrapeReviewsPersonalData": {
            "title": "Reviewer names and profiles",
            "type": "boolean",
            "description": "Off: reviews keep their text, stars and dates but not the reviewer's name, ID, profile link or photo.",
            "default": true
          },
          "searchStringsArray": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "What you would type in Google Maps, e.g. <strong>dentist</strong> or <strong>coffee shop</strong>. Each term is searched in the location below. A term may name its own place (<strong>pizza in Austin, TX</strong>).",
            "items": {
              "type": "string"
            }
          },
          "locationQuery": {
            "title": "📍 Location",
            "type": "string",
            "description": "City, neighborhood, ZIP code, state or country, e.g. <strong>Boise, ID</strong> or <strong>Berlin, Germany</strong>. Results stay inside the location's own boundary (a city search doesn't spill into its suburbs). Large areas are searched ZIP code by ZIP code and tile by tile automatically. Empty = Google picks the area your term names."
          },
          "locations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "Where to search, e.g. <strong>Austin, TX</strong> or <strong>Paris, France</strong>. Every search term runs in every location.",
            "items": {
              "type": "string"
            }
          },
          "maxCrawledPlacesPerSearch": {
            "title": "💯 Places per search term and location",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Places each search term returns at most, e.g. 500. Empty = every place Google Maps has for it in the location."
          },
          "categoryFilterWords": {
            "title": "🎢 Place categories",
            "type": "array",
            "description": "Keep only places with a category containing one of these words, e.g. <strong>dentist</strong>, <strong>orthodontist</strong>. Empty = every category. Places left out are not charged.",
            "items": {
              "type": "string"
            }
          },
          "placeMinimumStars": {
            "title": "⭐ Minimum rating",
            "enum": [
              "",
              "two",
              "twoAndHalf",
              "three",
              "threeAndHalf",
              "four",
              "fourAndHalf"
            ],
            "type": "string",
            "description": "Keep only places rated at least this. Places without a rating are left out when this is set.",
            "default": ""
          },
          "skipClosedPlaces": {
            "title": "⏩ Skip closed places",
            "type": "boolean",
            "description": "Leave out places marked temporarily or permanently closed.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave as is: Apify datacenter proxy works for Google Maps. A call every datacenter IP refused is retried once on a residential IP.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}