{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper",
    "description": "Scrape data from thousands of Google Maps businesses and places, including reviews, reviewer profiles, photos, contact details, names, emails, job titles, business hours, pricing, and more. Export results, automate via API, schedule runs, monitor progress, or connect with your favorite tools.",
    "version": "0.0",
    "x-build-id": "ac4MBuW2zBlL0biph"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapingdino~google-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapingdino-google-maps-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/scrapingdino~google-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapingdino-google-maps-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/scrapingdino~google-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapingdino-google-maps-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 URLs",
            "type": "array",
            "description": "Paste Google Maps place links when you already know which businesses to scrape. Skips search — each URL is enriched with details, photos, reviews, and posts based on the toggles below. Prefer Place IDs when you have them for the most reliable gallery enrichment.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "placeIds": {
            "title": "🆔 Place IDs",
            "type": "array",
            "description": "Google Place IDs (ChIJ…) or hex business IDs. Best option when monitoring known listings on a schedule.",
            "items": {
              "type": "string"
            }
          },
          "searchStringsArray": {
            "title": "🔎 Search terms",
            "type": "array",
            "description": "One or more search terms. Combined with Location as \"{term} in {location}\" for keyword mode.",
            "items": {
              "type": "string"
            }
          },
          "locationQuery": {
            "title": "📍 Location",
            "type": "string",
            "description": "Geographic focus for keyword searches (e.g. New York, USA)."
          },
          "searchMode": {
            "title": "🧭 Search Mode",
            "enum": [
              "keyword",
              "nearby",
              "radius",
              "boundingBox",
              "area",
              "bulk"
            ],
            "type": "string",
            "description": "How places are discovered.",
            "default": "keyword"
          },
          "query": {
            "title": "💬 Query",
            "type": "string",
            "description": "Single search query for nearby/radius/bbox/area/keyword modes. Prefer searchStringsArray for multi-term keyword search."
          },
          "maxResults": {
            "title": "Maximum Results",
            "pattern": "^[0-9]+$",
            "type": "string",
            "description": "Max places per search (alias of Max places per search).",
            "default": "50"
          },
          "maxCrawledPlacesPerSearch": {
            "title": "Max places per search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum businesses to collect per search term (same cap as maxResults).",
            "default": 50
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for API responses (e.g. en).",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Country code for keyword or bulk search."
          },
          "countryCode": {
            "title": "Country code",
            "type": "string",
            "description": "Alias of Country."
          },
          "businessCategory": {
            "title": "Business Category",
            "type": "string",
            "description": "Optional substring filter on category/categories."
          },
          "categoryFilterWords": {
            "title": "Category filters",
            "type": "array",
            "description": "Optional post-search category keyword filters.",
            "items": {
              "type": "string"
            }
          },
          "placeMinimumStars": {
            "title": "Minimum stars",
            "type": "string",
            "description": "Drop places with rating below this threshold (e.g. \"4.0\")."
          },
          "skipClosedPlaces": {
            "title": "Skip closed places",
            "type": "boolean",
            "description": "Exclude places with closed businessStatus / closed flags.",
            "default": false
          },
          "area": {
            "title": "Area",
            "type": "string",
            "description": "Named area for area search mode."
          },
          "radius": {
            "title": "Radius",
            "type": "integer",
            "description": "Radius in meters for nearby/radius modes.",
            "default": 1000
          },
          "latitude": {
            "title": "Latitude",
            "type": "number",
            "description": "Latitude for nearby or radius search."
          },
          "longitude": {
            "title": "Longitude",
            "type": "number",
            "description": "Longitude for nearby or radius search."
          },
          "north": {
            "title": "North",
            "type": "number",
            "description": "North latitude for bounding box search."
          },
          "south": {
            "title": "South",
            "type": "number",
            "description": "South latitude for bounding box search."
          },
          "east": {
            "title": "East",
            "type": "number",
            "description": "East longitude for bounding box search."
          },
          "west": {
            "title": "West",
            "type": "number",
            "description": "West longitude for bounding box search."
          },
          "queries": {
            "title": "Bulk Queries",
            "type": "array",
            "description": "Multiple search queries for bulk mode.",
            "items": {
              "type": "string"
            }
          },
          "scrapePlaceDetailPage": {
            "title": "📋 Scrape place details",
            "type": "boolean",
            "description": "Fetch full business details for each place and merge into the record (phone, website, hours, amenities, and more).",
            "default": false
          },
          "scrapePhotos": {
            "title": "🖼️ Scrape photos",
            "type": "boolean",
            "description": "Fetch the business photo/video gallery and attach as `photos` on each place record.",
            "default": false
          },
          "maxPhotosPerPlace": {
            "title": "Max photos per place",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum gallery items per business when scrapePhotos is enabled (also enables photos when > 0). Alias: maxImages.",
            "default": 0
          },
          "maxImages": {
            "title": "Max images",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Alias of Max photos per place.",
            "default": 0
          },
          "scrapeReviews": {
            "title": "⭐ Scrape reviews",
            "type": "boolean",
            "description": "Fetch business reviews and attach as `reviews` on each place record. Also enabled when maxReviewsPerPlace / maxReviews > 0.",
            "default": false
          },
          "maxReviewsPerPlace": {
            "title": "Max reviews per place",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum reviews per business when reviews are enabled (also enables reviews when > 0). Alias: maxReviews.",
            "default": 0
          },
          "maxReviews": {
            "title": "Max reviews",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Alias of Max reviews per place.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Reviews sort",
            "enum": [
              "newest",
              "highest_rating",
              "lowest_rating",
              "most_relevant"
            ],
            "type": "string",
            "description": "Sort order sent as sort_by to the Business Reviews API.",
            "default": "newest"
          },
          "reviewsLanguage": {
            "title": "Reviews language",
            "type": "string",
            "description": "Optional language for reviews requests. Falls back to the actor language input when unset.",
            "default": ""
          },
          "scrapePosts": {
            "title": "📢 Scrape posts",
            "type": "boolean",
            "description": "Fetch Google Business Profile posts and attach as `posts` on each place record.",
            "default": false
          },
          "maxPosts": {
            "title": "Max posts",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum posts per business when scrapePosts is enabled.",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many businesses to enrich in parallel. Search terms still run one after another.",
            "default": 5
          },
          "maxRequestRetries": {
            "title": "Max retries per business",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries for enrichment steps (API client also retries 429/5xx).",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}