{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Collector",
    "description": "Extract places, reviews, photos & details from Google Maps. Get names, addresses, phones, websites, ratings, opening hours, and more. Export to CSV, JSON. Pay-per-use pricing starting at $2.80 per 1,000 places scraped - 30% below market.",
    "version": "0.0",
    "x-build-id": "Yo8vF9n3VTsarTcg8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapingapp~google-maps-scraper-plus/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapingapp-google-maps-scraper-plus",
        "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/scrapingapp~google-maps-scraper-plus/runs": {
      "post": {
        "operationId": "runs-sync-scrapingapp-google-maps-scraper-plus",
        "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/scrapingapp~google-maps-scraper-plus/run-sync": {
      "post": {
        "operationId": "run-sync-scrapingapp-google-maps-scraper-plus",
        "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": "Type what you'd normally search for in Google Maps, like 'English breakfast' or 'pet shelter'. Aim for unique terms for faster processing. Using similar terms may increase capture rate but is less efficient. You can also paste place IDs directly (e.g. ChIJ8_JBApXMDUcRDzXcYUPTGUY) or with prefix (place_id:ChIJ...).",
            "items": {
              "type": "string"
            },
            "default": [
              ""
            ]
          },
          "locationQuery": {
            "title": "📍 Location",
            "type": "string",
            "description": "Define location using free text. Simpler formats work best; e.g., use City + Country rather than City + Country + State. You can set the whole country or state as the location. Verify with OpenStreetMap webapp for visual validation.",
            "default": ""
          },
          "maxCrawledPlacesPerSearch": {
            "title": "💯 Number of places to extract (per each search term or URL)",
            "type": "integer",
            "description": "Maximum number of places to collect per search term or direct URL. Set to 0 for unlimited.",
            "default": 50
          },
          "geo_country": {
            "title": "Country",
            "type": "string",
            "description": "Geolocation country (alternative to location).",
            "default": ""
          },
          "geo_city": {
            "title": "City",
            "type": "string",
            "description": "Geolocation city.",
            "default": ""
          },
          "geo_state": {
            "title": "State",
            "type": "string",
            "description": "Geolocation state.",
            "default": ""
          },
          "geo_county": {
            "title": "County",
            "type": "string",
            "description": "Geolocation county.",
            "default": ""
          },
          "geo_postal": {
            "title": "Postal code",
            "type": "string",
            "description": "Geolocation postal code.",
            "default": ""
          },
          "directUrls": {
            "title": "Google Maps URLs",
            "type": "string",
            "description": "Paste one Google Maps URL per line. These are sent through the direct job endpoint.",
            "default": ""
          },
          "directPlaceIds": {
            "title": "Place IDs",
            "type": "string",
            "description": "Paste one Google Maps place ID per line. Example: ChIJjQmUmSGxrBIRqcx4Q0O7J2E",
            "default": ""
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Results details will show in this language.",
            "default": "en"
          },
          "country": {
            "title": "Country code",
            "type": "string",
            "description": "Google Maps country code used for localization.",
            "default": "us"
          },
          "categoryFilterWords": {
            "title": "Category filter words",
            "type": "array",
            "description": "Limit scraped places by category. First 2 filters are free, then $0.0007/filter/place.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "placeMinimumStars": {
            "title": "Minimum star rating",
            "enum": [
              "0",
              "0.5",
              "1",
              "1.5",
              "2",
              "2.5",
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Scrape only places with a rating equal to or above the selected stars. Counts as 1 filter (free within first 2).",
            "default": "0"
          },
          "website": {
            "title": "Website filter",
            "enum": [
              "both",
              "with",
              "without"
            ],
            "type": "string",
            "description": "Exclude places without a website, or vice versa. Counts as 1 filter (free within first 2).",
            "default": "both"
          },
          "skipClosedPlaces": {
            "title": "Skip closed places",
            "type": "boolean",
            "description": "Skip places marked as temporary or permanently closed. Counts as 1 filter (free within first 2).",
            "default": false
          },
          "searchMatching": {
            "title": "Search matching",
            "enum": [
              "partial",
              "exact"
            ],
            "type": "string",
            "description": "Restrict places by name matching. Counts as 1 filter (free within first 2).",
            "default": "partial"
          },
          "scrapePlaceDetailPage": {
            "title": "Add-on: Additional place details scraping",
            "type": "boolean",
            "description": "Scrape detail pages of each place. Extracts reviewsDistribution, openingHours, amenities, peopleAlsoSearch, reviewsTags, questionsAndAnswers, hotel fields, and more. Priced at $0.0014/place (30% below market).",
            "default": false
          },
          "scrapeTableReservationProvider": {
            "title": "Scrape table reservation provider data",
            "type": "boolean",
            "description": "Scrape table reservation provider data like name, address, email or phone.",
            "default": false
          },
          "scrapeOrderOnline": {
            "title": "Scrape order online widget data",
            "type": "boolean",
            "description": "Scrape the Order Online section of restaurants to get pickup and delivery providers.",
            "default": false
          },
          "includeWebResults": {
            "title": "Include Web results",
            "type": "boolean",
            "description": "Extract the Web results section located at the bottom of every place listing.",
            "default": false
          },
          "scrapeDirectories": {
            "title": "Scrape inside places (malls, shopping centers)",
            "type": "boolean",
            "description": "Some places can have multiple businesses located inside them. Turn this on to include those places.",
            "default": false
          },
          "maxQuestions": {
            "title": "Number of questions to extract",
            "type": "integer",
            "description": "Set the number of Q&A questions per place. Set to 0 to skip. Note: some fields contain personal data.",
            "default": 0
          },
          "scrapeReviews": {
            "title": "Add-on: Reviews",
            "type": "boolean",
            "description": "Extract reviews for each place found. Priced at $0.00035/review (30% below market).",
            "default": false
          },
          "maxReviews": {
            "title": "Number of reviews to extract",
            "type": "integer",
            "description": "How many reviews to pull per place.",
            "default": 25
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "relevant",
              "newest",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "Ordering used when fetching reviews.",
            "default": "relevant"
          },
          "reviewsDateFrom": {
            "title": "Extract only reviews posted after",
            "type": "string",
            "description": "Only keep reviews posted on or after this date (YYYY-MM-DD format).",
            "default": ""
          },
          "scrapeImages": {
            "title": "Add-on: Images",
            "type": "boolean",
            "description": "Extract additional photos for each place. Priced at $0.00035/image (30% below market).",
            "default": false
          },
          "maxImages": {
            "title": "Number of additional images to extract",
            "type": "integer",
            "description": "How many photos to pull per place beyond the main image.",
            "default": 20
          },
          "maxCostPerRun": {
            "title": "Maximum cost per run ($)",
            "type": "number",
            "description": "Set a spending cap. Run stops if estimated cost exceeds this value. Leave 0 for unlimited.",
            "default": 0
          },
          "subdivide": {
            "title": "Subdivide area",
            "type": "boolean",
            "description": "Split the search area into smaller regions for more comprehensive results.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}