{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Local Business Scraper",
    "description": "Collect public local-business listing details from Google Maps searches.",
    "version": "0.1",
    "x-build-id": "NjeTDrHe2n3A5XqBI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/light_shutter~google-maps-local-business-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-light_shutter-google-maps-local-business-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/light_shutter~google-maps-local-business-scraper/runs": {
      "post": {
        "operationId": "runs-sync-light_shutter-google-maps-local-business-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/light_shutter~google-maps-local-business-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-light_shutter-google-maps-local-business-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": [
          "searchQueries",
          "locations"
        ],
        "properties": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Required. Keywords or business categories to search for, such as restaurants or dentists. Use a normal spelling and keep the query specific enough to avoid unrelated results.",
            "items": {
              "type": "string"
            },
            "default": [
              "restaurants"
            ]
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Required. Cities, neighborhoods, or countries appended to each search query, such as Dubai, UAE. Each query is combined with each location.",
            "items": {
              "type": "string"
            },
            "default": [
              "Dubai, UAE"
            ]
          },
          "maxResultsPerSearch": {
            "title": "Maximum results per search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of matching businesses collected for each query/location combination. If filters are enabled, set Maximum candidates scanned higher than this value so enough listings can be checked.",
            "default": 25
          },
          "language": {
            "title": "Google Maps language",
            "type": "string",
            "description": "Language code used for the Google Maps interface, for example en or ar. This does not translate your search query.",
            "default": "en"
          },
          "scrapeSocialProfiles": {
            "title": "Scrape social profiles",
            "type": "boolean",
            "description": "Turn on to inspect public social-media links on the Google Maps listing and linked business website homepage. Must be ON when Require social media or Required social platforms is used. It may increase run time.",
            "default": true
          },
          "requireWebsite": {
            "title": "Require a website",
            "type": "boolean",
            "description": "Keep only businesses with a website listed on Google Maps. Turn this ON when you need website-based social discovery or when using Required website domains.",
            "default": false
          },
          "requiredWebsiteDomains": {
            "title": "Required website domains",
            "type": "array",
            "description": "Optional website filter. Keeps only businesses whose website hostname matches one of these domains, such as example.com. An entry here effectively requires a website even if Require a website is OFF.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "requireSocialMedia": {
            "title": "Require social media",
            "type": "boolean",
            "description": "Keep only businesses with at least one detected public social-media profile. Requires Scrape social profiles=ON; otherwise the Actor rejects the input. Leave OFF if you want all businesses and only want social links when available.",
            "default": false
          },
          "requiredSocialPlatforms": {
            "title": "Required social platforms",
            "type": "array",
            "description": "Keep businesses with at least one profile on ANY selected platform, not every platform. Requires Scrape social profiles=ON. Leave empty unless you specifically need a platform filter.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Optional lower rating filter from 0 to 5. If Maximum rating is also set, Minimum rating must not be higher."
          },
          "maxRating": {
            "title": "Maximum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Optional upper rating filter from 0 to 5. If Minimum rating is also set, Maximum rating must not be lower."
          },
          "minReviewsCount": {
            "title": "Minimum review count",
            "minimum": 0,
            "type": "integer",
            "description": "Optional lower review-count filter. If Maximum review count is also set, Minimum review count must not be higher."
          },
          "maxReviewsCount": {
            "title": "Maximum review count",
            "minimum": 0,
            "type": "integer",
            "description": "Optional upper review-count filter. If Minimum review count is also set, Maximum review count must not be lower."
          },
          "openNow": {
            "title": "Open now",
            "type": "boolean",
            "description": "Keep only businesses that Google Maps reports as open at run time. This can remove businesses that are valid but closed today or outside their opening hours. It works together with Exclude closed businesses.",
            "default": false
          },
          "excludeClosedBusinesses": {
            "title": "Exclude closed businesses",
            "type": "boolean",
            "description": "Exclude businesses marked permanently or temporarily closed by Google Maps. This does not exclude businesses that are merely closed right now. Leave OFF for the broadest result set.",
            "default": false
          },
          "requirePhone": {
            "title": "Require phone",
            "type": "boolean",
            "description": "Keep only businesses with a phone number listed on Google Maps. Some legitimate businesses do not publish a phone number, so leave OFF unless required.",
            "default": false
          },
          "requireAddress": {
            "title": "Require address",
            "type": "boolean",
            "description": "Keep only businesses with an address listed on Google Maps. Some service-area businesses may not have a traditional address, so leave OFF unless required.",
            "default": false
          },
          "includeKeywords": {
            "title": "Include keywords",
            "type": "array",
            "description": "Keep businesses whose name, category, or address contains at least one keyword. This is an additional filter after the Google Maps search; combining it with strict rating/review filters may produce zero results.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Exclude businesses whose name, category, or address contains any keyword. Exclude keywords take priority if the same text also matches Include keywords.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxCandidatesPerSearch": {
            "title": "Maximum candidates scanned",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum Google Maps listings inspected per search. Set this higher than Maximum results when filters are enabled; otherwise the Actor may inspect too few candidates and return fewer results. Higher values increase run time and cost.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Keep Apify Proxy enabled for cloud runs. The default UNBLOCKER group is recommended for Google Maps. Turning the proxy OFF can cause timeouts, CAPTCHA pages, or zero results. Do not use Require social media with proxy-disabled runs unless you accept higher failure risk.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 15,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum time allowed for each Google Maps request. Use 60-90 seconds with Apify Proxy if requests are slow. Increasing this does not create more results; it only allows slow requests to finish.",
            "default": 45
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}