{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper - Most Comprehensive",
    "description": "🔥 ~$0.06/1K places 🔥 The most comprehensive Google Maps scraper available. Extract 76+ fields per place including photos, review breakdowns, owner info, contacts, coordinates, and 30+ service options. Just type a keyword and location.",
    "version": "0.2",
    "x-build-id": "g0SC51vFwdfdNSk1V"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kaix~google-maps-places-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kaix-google-maps-places-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/kaix~google-maps-places-scraper/runs": {
      "post": {
        "operationId": "runs-sync-kaix-google-maps-places-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/kaix~google-maps-places-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-kaix-google-maps-places-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": {
          "query": {
            "title": "Search Query",
            "type": "string",
            "description": "What to search for (e.g. 'coffee shops', 'restaurants', 'dentists')"
          },
          "searchTerms": {
            "title": "Search Terms (multiple)",
            "type": "array",
            "description": "Optional. Multiple search terms to run and merge into one deduplicated result set (e.g. ['restaurants', 'cafe', 'fast food', 'food']). Each term surfaces different places, so this greatly increases coverage for broad categories. When provided, it replaces the single Search Query. Max Results covers all terms together.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, address, or area used to find the search center (e.g. 'San Francisco, CA', 'Tokyo, Japan'). This does not select a city boundary."
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 0,
            "type": "integer",
            "description": "Upper limit on search results. Fewer valid places can be available. Set to 0 for no limit. A nearby search returns about 60 places at most for each search term. Place ID lookups return one place for each ID, and company lookups use Max Results Per Company.",
            "default": 20
          },
          "includeRichFields": {
            "title": "Include Rich Fields",
            "type": "boolean",
            "description": "Adds popular times, menus, review breakdowns, owner replies, owner information, and other details, and fills every field that Google has for each place. The run is much slower.",
            "default": false
          },
          "includePlacesInside": {
            "title": "Include Places Inside",
            "type": "boolean",
            "description": "Also return the places inside each result, such as the shops in a mall or the stores in an airport terminal. Each one has the outer place in parentPlaceId. They are extra to Max Results and are charged as places. Min rating, price levels, skip closed places, and the website filter also apply to them.",
            "default": false
          },
          "includeWebResults": {
            "title": "Include Web Results",
            "type": "boolean",
            "description": "Add the 'Web results' section of each place: the top web pages about it, such as its own site, Wikipedia, or social profiles. Needs rich fields, so the run turns on Include Rich Fields. Adds one Google request per place.",
            "default": false
          },
          "openNow": {
            "title": "Open Now",
            "type": "boolean",
            "description": "Only return places that are currently open."
          },
          "minRating": {
            "title": "Minimum Rating",
            "minimum": 2,
            "maximum": 4.5,
            "type": "number",
            "description": "Only return places with at least this average rating. Allowed values: 2.0, 2.5, 3.0, 3.5, 4.0, 4.5."
          },
          "priceLevels": {
            "title": "Price Levels",
            "type": "array",
            "description": "Only return places matching these price levels.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4"
              ],
              "enumTitles": [
                "$ (Inexpensive)",
                "$$ (Moderate)",
                "$$$ (Expensive)",
                "$$$$ (Very Expensive)"
              ]
            }
          },
          "skipClosedPlaces": {
            "title": "Skip Closed Places",
            "type": "boolean",
            "description": "Leave out places that are closed temporarily or permanently.",
            "default": false
          },
          "websiteFilter": {
            "title": "Website",
            "enum": [
              "all",
              "withWebsite",
              "withoutWebsite"
            ],
            "type": "string",
            "description": "Keep only places that have a website, or only places that have no website.",
            "default": "all"
          },
          "titleMatch": {
            "title": "Name Match",
            "enum": [
              "all",
              "contains",
              "exact"
            ],
            "type": "string",
            "description": "Compare each place name with the search term that found it. Contains: the name includes all words of the term, in order (e.g. 'chicken' keeps 'Chicken Shack'). Exact: the name is the term. Case, accents, and punctuation are ignored.",
            "default": "all"
          },
          "categoryFilters": {
            "title": "Categories",
            "type": "array",
            "description": "Keep only places with a category that contains one of these words (e.g. 'restaurant' keeps 'Italian restaurant', but 'bar' does not keep 'Barber shop'). Categories are in the run language.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Country name or code (e.g. 'US', 'Germany'). With the fields below, the search covers the exact boundary of the area instead of a radius around Location."
          },
          "state": {
            "title": "State",
            "type": "string",
            "description": "State, province, or region (e.g. 'Texas', 'Bavaria')."
          },
          "county": {
            "title": "County",
            "type": "string",
            "description": "County or district (e.g. 'Kings County')."
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City or town (e.g. 'Austin')."
          },
          "postalCode": {
            "title": "Postal Code",
            "type": "string",
            "description": "Postal code (e.g. '10115'). Some postal codes, such as US ZIP codes, have no boundary. The search then covers Search Radius around the postal code center, so set a small radius, such as 5 km."
          },
          "customGeolocation": {
            "title": "Custom Search Area",
            "type": "object",
            "description": "A GeoJSON Polygon, MultiPolygon, or Point. Coordinates are [longitude, latitude]. A Point is the center of a circle with 'radiusKm' (default: Search Radius). Example: {\"type\": \"Polygon\", \"coordinates\": [[[-97.76, 30.25], [-97.72, 30.25], [-97.72, 30.29], [-97.76, 30.29], [-97.76, 30.25]]]}. Overrides the other boundary fields."
          },
          "includePhotos": {
            "title": "Include Photos",
            "type": "boolean",
            "description": "Fetch the photo listing and videos of each place. Charged per photo. It also adds most of the rich fields.",
            "default": false
          },
          "maxPhotos": {
            "title": "Max Photos Per Place",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of photos to fetch per place. Set to 0 for all photos.",
            "default": 200
          },
          "includeContacts": {
            "title": "Include Website Contacts",
            "type": "boolean",
            "description": "Visit each place's own website to find email addresses and social profiles (Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest, Threads, WhatsApp). Google Maps does not publish business emails. Reads the listed page and up to 3 contact, legal-notice, or about pages per website, so runs take longer. When the website shows no email, it also reads the About section of the business's Facebook page.",
            "default": false
          },
          "placeIds": {
            "title": "Place IDs or URLs",
            "type": "array",
            "description": "Look up places by Google Maps place ID (e.g. 'ChIJN1t_tDeuEmsRUsoyG83frY4'), place URL, CID URL (?cid=...), or share link (maps.app.goo.gl). A search URL (/maps/search/coffee/@37.77,-122.41,14z) searches the map area it shows, with Max Results and the filters. When provided, query and location are ignored.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Company Lookups",
            "type": "array",
            "description": "Look up specific companies by name and location. Each entry should have 'name' and 'city', with optional 'state' and 'country'. When provided, query and location are ignored.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "title": "Company Name",
                  "description": "Business or company name to search for."
                },
                "city": {
                  "type": "string",
                  "title": "City",
                  "description": "City where the company is located."
                },
                "state": {
                  "type": "string",
                  "title": "State",
                  "description": "State or province (e.g. 'MA', 'California')."
                },
                "country": {
                  "type": "string",
                  "title": "Country",
                  "description": "Country name or code (e.g. 'US', 'Japan')."
                }
              },
              "required": [
                "name",
                "city"
              ]
            }
          },
          "maxResultsPerCompany": {
            "title": "Max Results Per Company",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of results to return per company lookup.",
            "default": 1
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for results (e.g. 'en', 'ja', 'de', 'fr', 'es', 'zh'). Affects place names, descriptions, and reviews.",
            "default": "en"
          },
          "searchType": {
            "title": "Search Type",
            "enum": [
              "area",
              "nearby"
            ],
            "type": "string",
            "description": "area: returns places with valid coordinates inside the search rectangle. It excludes unknown positions, including service-area businesses with no known position, and reports excluded counts in the log. nearby: returns the places that best match the query near a point, about 60 at most for each search term.",
            "default": "area"
          },
          "radius": {
            "title": "Search Radius",
            "minimum": 1,
            "type": "number",
            "description": "In area search, the rectangle extends approximately this distance north, south, east, and west from the center. Corners can be farther from the center. In nearby search, this radius is used to prefer nearby results. Capped at 5,000 km (3,107 mi).",
            "default": 50
          },
          "radiusUnit": {
            "title": "Radius Unit",
            "enum": [
              "km",
              "mi"
            ],
            "type": "string",
            "description": "Unit for the search radius.",
            "default": "km"
          },
          "latitude": {
            "title": "Latitude",
            "type": "number",
            "description": "Override location with exact latitude. Use with longitude."
          },
          "longitude": {
            "title": "Longitude",
            "type": "number",
            "description": "Override location with exact longitude. Use with latitude."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Select proxies to be used. The default Apify Proxy works, so residential proxies are not 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}