{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper — Cheap Places & Business Leads, No Browser",
    "description": "Scrape Google Maps places without a browser: name, categories, address, business phone, website, rating, review count, opening hours, coordinates and plus code for any search and area. Deep tile scan covers whole cities. No reviews or personal data. Pay per result, no subscription.",
    "version": "0.1",
    "x-build-id": "lRIP1kgpkggouNHKl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fabrikit~google-maps-places-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fabrikit-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/fabrikit~google-maps-places-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fabrikit-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/fabrikit~google-maps-places-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fabrikit-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": {
          "searchStrings": {
            "title": "Search terms",
            "type": "array",
            "description": "What to look for on Google Maps, one term per line — exactly what you would type in the Maps search box: a category (`dentist`, `coffee shop`, `plumber`) or a name (`Starbucks`). Every term is searched in the location below. Put the place in **Location**, not here, so the actor can scan the whole area.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region, neighborhood, postal code with country, or country (`Austin, Texas`, `Kreuzberg, Berlin`, `90210, USA`, `Portugal`). Google finds its boundaries and the actor scans that whole area tile by tile. Leave empty to let Google decide (results then cluster around one spot)."
          },
          "maxItemsPerSearch": {
            "title": "Max places per search term",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop each search term after this many places (after filters). `0` = no limit: keep zooming into the area until Google shows nothing new. Big cities hold thousands of places per category.",
            "default": 50
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "es",
              "pt",
              "pt-BR",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "ro",
              "hu",
              "el",
              "tr",
              "ru",
              "uk",
              "ar",
              "he",
              "hi",
              "id",
              "ms",
              "th",
              "vi",
              "ja",
              "ko",
              "zh-CN",
              "zh-TW"
            ],
            "type": "string",
            "description": "Language of category names, opening hours and descriptions (Google's `hl`).",
            "default": "en"
          },
          "countryCode": {
            "title": "Country (optional)",
            "pattern": "^([a-zA-Z]{2})?$",
            "type": "string",
            "description": "Two-letter country code (`us`, `de`, `br`...). Helps Google pick the right place for ambiguous locations (\"Valencia\") and sets the country of the residential proxy fallback.",
            "default": ""
          },
          "startUrls": {
            "title": "Google Maps search URLs (optional)",
            "type": "array",
            "description": "Alternatively paste Google Maps search URLs, e.g. `https://www.google.com/maps/search/dentist/@30.2672,-97.7431,13z`. The term and the visible map area are taken from the URL. Place (`/maps/place/`) URLs are not supported.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "latitude": {
            "title": "Center latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Search a circle instead of a named location: center latitude (e.g. `40.7580`). Needs longitude too; overrides Location."
          },
          "longitude": {
            "title": "Center longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Center longitude (e.g. `-73.9855`)."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0.1,
            "maximum": 500,
            "type": "number",
            "description": "Radius of the circle around latitude/longitude, in kilometres.",
            "default": 5
          },
          "splitArea": {
            "title": "Deep area scan",
            "type": "boolean",
            "description": "Google lists only the most prominent places of a map view and reveals the rest as you zoom in. When on, busy parts of the area are split into smaller tiles and searched again, which finds many more places. Turn off for a single quick view.",
            "default": true
          },
          "onlyInsideArea": {
            "title": "Only places inside the area",
            "type": "boolean",
            "description": "Drop places outside the location's boundaries (or the circle / URL map view). Google pads its lists with nearby places outside the area; turn off to keep them.",
            "default": true
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep only places with at least this star rating (1–5). Places without a rating are dropped when this is set."
          },
          "onlyWithWebsite": {
            "title": "Only places with a website",
            "type": "boolean",
            "description": "Keep only businesses that list a website.",
            "default": false
          },
          "onlyWithPhone": {
            "title": "Only places with a phone number",
            "type": "boolean",
            "description": "Keep only businesses that list a phone number.",
            "default": false
          },
          "categoryFilter": {
            "title": "Category contains",
            "type": "array",
            "description": "Keep only places whose Google categories contain one of these words (case- and accent-insensitive), e.g. `dentist` keeps \"Cosmetic dentist\" and drops \"Dental supply store\". Use the same language as **Language**.",
            "items": {
              "type": "string"
            }
          },
          "skipClosedPlaces": {
            "title": "Skip permanently closed places",
            "type": "boolean",
            "description": "Drop places Google marks as permanently closed.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify datacenter proxy by default. If Google blocks or rate-limits those IPs, the actor switches automatically to Apify RESIDENTIAL proxy (country from the Country field, else US) — no action 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}