{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper - Extract Business Data, Reviews & Leads",
    "description": "Fast Google Maps scraper and Google Places API alternative. Extract business data, reviews, emails, ratings, and contact info from Google Maps. Filter by website presence. Perfect for lead generation, competitor research, and local SEO.",
    "version": "0.1",
    "x-build-id": "bPB6M2aSavdAsFkXU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/code-node-tools~google-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-code-node-tools-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/code-node-tools~google-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-code-node-tools-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/code-node-tools~google-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-code-node-tools-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": "List of search queries (e.g. 'plumbers in Austin TX', 'dentists in Miami')",
            "items": {
              "type": "string"
            }
          },
          "searchMode": {
            "title": "Search Mode",
            "enum": [
              "maxPlaces",
              "targetQualified"
            ],
            "type": "string",
            "description": "Choose how to control scraping per query. 'maxPlaces' = stop after checking X places (predictable cost). 'targetQualified' = keep searching until X qualified businesses found (variable cost).",
            "default": "maxPlaces"
          },
          "maxPlacesPerQuery": {
            "title": "Max Places Per Query",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of places to check per query (ONLY applies to maxPlaces mode). In targetQualified mode, search continues until target reached or Google exhausts results. Default is 100.",
            "default": 80
          },
          "targetQualified": {
            "title": "Target Qualified Businesses",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Target number of qualified businesses (without websites) to find per query (applies when searchMode='targetQualified'). Search will auto-expand until this target is reached or Google Maps runs out of results. Default is 20.",
            "default": 20
          },
          "concurrency": {
            "title": "Concurrent Workers",
            "minimum": 8,
            "maximum": 36,
            "type": "integer",
            "description": "Number of parallel workers for scraping. Higher = faster but more memory. Recommended: 4-8. Default is 4.",
            "default": 24
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for results (e.g. 'en', 'es', 'de', 'fr'). Affects result language from Google.",
            "default": "en"
          },
          "geo": {
            "title": "Geo Coordinates",
            "type": "string",
            "description": "Bias results to a specific location. Format: 'lat,lon' e.g. '40.7128,-74.0060'. Optional — queries usually handle this."
          },
          "filterPermanentlyClosed": {
            "title": "Filter Out Permanently Closed",
            "type": "boolean",
            "description": "Automatically exclude businesses marked as permanently closed. Highly recommended for lead generation.",
            "default": true
          },
          "hasWebsite": {
            "title": "Has Website Filter",
            "enum": [
              "no",
              "yes",
              "all"
            ],
            "type": "string",
            "description": "Filter businesses by website presence. 'no' = only businesses WITHOUT websites (lead gen), 'yes' = only WITH websites, 'all' = no filtering.",
            "default": "all"
          },
          "extractEmails": {
            "title": "Extract Emails from Websites",
            "type": "boolean",
            "description": "Fetch business websites and extract email addresses (only for businesses WITH websites). Adds extra processing time and costs $0.002 per email found. Useful for outreach campaigns.",
            "default": false
          },
          "maxReviews": {
            "title": "Max Reviews Per Place",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of reviews to extract per qualified business. Set to 0 to skip reviews (faster). Useful for reputation analysis and lead quality assessment.",
            "default": 0
          },
          "reviewSort": {
            "title": "Review Sort Order",
            "enum": [
              "newest",
              "most_relevant",
              "highest_rated",
              "lowest_rated"
            ],
            "type": "string",
            "description": "How to sort reviews when extracting. 'Newest' = most recent first, 'Highest Rated' = 5-star reviews first, 'Lowest Rated' = 1-star reviews first, 'Most Relevant' = Google's relevance algorithm.",
            "default": "newest"
          },
          "minRating": {
            "title": "Minimum Rating Filter",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only return businesses at or above this rating (0-5). E.g. 3.5 filters out low-quality leads. Set to 0 to disable.",
            "default": 0
          },
          "minReviews": {
            "title": "Minimum Review Count",
            "minimum": 0,
            "type": "integer",
            "description": "Only return businesses with at least this many reviews. Helps filter out ghost listings. Set to 0 to disable.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Select proxies to use for scraping. Datacenter proxies (auto) are recommended for fast, stable connections. Included in all Apify plans."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}