{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper",
    "description": "Scrape Google Maps places by search query - name, address, phone, website, rating, reviews, categories and coordinates. Optional review scraping and website contact enrichment (e-mails, social profiles, extra phones) included in the price. No login, no Places API key.",
    "version": "0.1",
    "x-build-id": "l1uWdopLg9i8rCO9o"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/myagizm~google-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-myagizm-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/myagizm~google-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-myagizm-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/myagizm~google-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-myagizm-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "What to search on Google Maps. Put the location in the query itself, e.g. \"coffee shops in Austin TX\" or \"dentist in Miami\" — no coordinates or API key needed.",
            "items": {
              "type": "string"
            }
          },
          "maxPerQuery": {
            "title": "Max results per query",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Upper bound on places returned for each query (paginated 20 per page).",
            "default": 20
          },
          "language": {
            "title": "Language (hl)",
            "type": "string",
            "description": "UI/result language code, e.g. \"en\", \"de\", \"tr\".",
            "default": "en"
          },
          "country": {
            "title": "Country (gl)",
            "type": "string",
            "description": "Two-letter country bias code, e.g. \"us\", \"de\", \"tr\".",
            "default": "us"
          },
          "includeReviews": {
            "title": "Scrape reviews",
            "type": "boolean",
            "description": "Also fetch the review feed for every place found. Reviews come back on a `reviews` array with author, rating, text, date and the owner's reply.",
            "default": false
          },
          "maxReviewsPerPlace": {
            "title": "Max reviews per place",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "How many reviews to pull for each place. Only used when 'Scrape reviews' is on. Keep it low on large runs - reviews are paginated 60 at a time.",
            "default": 20
          },
          "reviewsSort": {
            "title": "Reviews sort order",
            "enum": [
              "relevant",
              "newest",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "Which reviews to take first when you cap the count: most relevant, newest, highest rated or lowest rated.",
            "default": "newest"
          },
          "enrichContacts": {
            "title": "Enrich contacts from the website",
            "type": "boolean",
            "description": "Visit each place's own website and extract e-mail addresses, social media profiles and extra phone numbers. Adds `email`, `emails`, `socialProfiles` and `contactPhones` to every record. Included in the per-place price - not a paid add-on.",
            "default": false
          },
          "scanContactPage": {
            "title": "Also scan the contact page",
            "type": "boolean",
            "description": "During enrichment, follow the site's contact / about / impressum link as well. Most businesses hide their e-mail there rather than on the home page, so this noticeably raises the hit rate.",
            "default": true
          },
          "placeMinimumStars": {
            "title": "Minimum star rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only keep places rated at or above this (fractional values like 4.5 are allowed). Places with no rating yet are excluded. Filtering happens before the result count is applied, so you still get the number of places you asked for - the scraper just pages deeper to find them. 0 turns the filter off.",
            "default": 0
          },
          "categoryFilterWords": {
            "title": "Category filter words",
            "type": "array",
            "description": "Only keep places whose Google category matches one of these words, e.g. `dentist`, `coffee`. Case- and accent-insensitive, matched as a substring against the primary and full category list. Leave empty to keep everything.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchMatching": {
            "title": "Name matching",
            "enum": [
              "all",
              "only_includes",
              "only_exact_name"
            ],
            "type": "string",
            "description": "How strictly the business name must match your search term. 'All' keeps everything Google returns; 'Includes' keeps only names containing every word of the term; 'Exact name' keeps only exact matches. The location half of the query (after 'in' or 'near') is ignored when matching.",
            "default": "all"
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City to target. Appended to every query, so you can keep the query itself generic (`dentist` + city `Nicosia`) instead of rewriting it per location.",
            "default": ""
          },
          "state": {
            "title": "State / region",
            "type": "string",
            "description": "State, province or region to target. Appended to every query alongside the city.",
            "default": ""
          },
          "postalCode": {
            "title": "Postal code",
            "type": "string",
            "description": "Postal / ZIP code to target. Appended to every query for tighter local targeting.",
            "default": ""
          },
          "countryCode": {
            "title": "Country code",
            "type": "string",
            "description": "Two-letter country code to bias results to, e.g. `cy`, `de`, `us`. Overrides the general Country field above when both are set.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}