{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper API — Places, Leads & AI Verdicts",
    "description": "Scrape Google Maps places in bulk, in the fields of the most used Google Maps scraper: name, category, address, phone, website, rating, reviews, hours, booking link. Optional AI verdicts per place: digital maturity, chain or independent, size, price tier, ideal-customer fit. $0.50 per 1,000 places.",
    "version": "0.1",
    "x-build-id": "DJa2eKEIcDCNJvNW1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sherwood~google-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sherwood-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/sherwood~google-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sherwood-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/sherwood~google-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sherwood-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": {
          "searchStringsArray": {
            "title": "Search terms",
            "type": "array",
            "description": "What to search on Google Maps, one term per entry (\"dentist\", \"plumber\", \"vegan restaurant\"). Each term is searched near locationQuery. Aliases: query, queries, search, searchTerms, keywords (a string with commas or new lines is split).",
            "default": [
              "restaurant"
            ],
            "items": {
              "type": "string"
            }
          },
          "locationQuery": {
            "title": "Location",
            "type": "string",
            "description": "City, region or address to search around (\"Lyon, France\", \"Brooklyn, NY\"). Alias: location. Leave it empty when the search terms already name the place (\"dentist in Bordeaux\")."
          },
          "maxCrawledPlacesPerSearch": {
            "title": "Max places per search term",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Places kept per search term, in Google's order. Google stops around 120 results per search; for more, split the area (one term per district or nearby town).",
            "default": 50
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "fr",
              "de",
              "es",
              "it",
              "pt",
              "nl",
              "pl",
              "ja",
              "ko",
              "zh-CN",
              "ar",
              "tr",
              "sv",
              "da",
              "no",
              "fi",
              "cs"
            ],
            "type": "string",
            "description": "Language of the Google Maps results (category names, opening hours).",
            "default": "en"
          },
          "maxPlaces": {
            "title": "Max places per run",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many unique places over all search terms. Default 1,000.",
            "default": 1000
          },
          "scrapeContacts": {
            "title": "Add emails and social profiles from each website",
            "type": "boolean",
            "description": "Read each place's own website (homepage, then up to two pages such as the contact page, legal notice or Impressum) for emails, phone links and social profiles (Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest, Discord). Emails hidden by Cloudflare or written as name [at] domain are decoded. $0.001 per place whose website gave at least one email or social profile; a website with none is free.",
            "default": false
          },
          "qualifyPlaces": {
            "title": "Add AI verdicts on each place",
            "type": "boolean",
            "description": "Judge each place with an AI model from its listing: digital maturity (0-3), online booking expected, independent / chain / local group, size, price tier, clientele, and how much the listing looks like a call platform. $0.001 per place qualified.",
            "default": false
          },
          "idealCustomer": {
            "title": "Your ideal customer, in one sentence",
            "type": "string",
            "description": "Each place gets idealCustomerFit, a probability from 0 to 1 that it matches this description, to sort the list. Example: \"independent high-end restaurant that takes online reservations\". Turns the AI verdicts on."
          },
          "customQuestions": {
            "title": "Your own questions (up to 5)",
            "type": "array",
            "description": "Questions asked about every place from its listing. Without options: yes/no, answered with a probability. With options: one of them. With \"type\": \"scale\": one level of the options, in order. Turns the AI verdicts on."
          },
          "datasetId": {
            "title": "Qualify an existing dataset instead of searching",
            "type": "string",
            "description": "Add the verdicts to the places of an Apify dataset, for example a compass/crawler-google-places run, without scraping again. Only place-qualified is charged."
          },
          "query": {
            "title": "query (alias)",
            "type": "string",
            "description": "Alias of searchStringsArray: one term, or several separated by commas."
          },
          "location": {
            "title": "location (alias)",
            "type": "string",
            "description": "Alias of locationQuery."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy is used by default. Residential proxies are rarely needed.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}