{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper Goat",
    "description": "Extract business leads from Google Maps at scale. Get business names, phones, emails, websites, structured addresses, ratings, every full review (not just the count), popular times, GPS, and any social profile links found on each business website. Pure HTTP, no browser, no Google API key.",
    "version": "2.0",
    "x-build-id": "oB7D7eCYtt1aDRAta"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/goat255~google-maps-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-goat255-google-maps-extractor",
        "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/goat255~google-maps-extractor/runs": {
      "post": {
        "operationId": "runs-sync-goat255-google-maps-extractor",
        "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/goat255~google-maps-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-goat255-google-maps-extractor",
        "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",
          "locations"
        ],
        "properties": {
          "queries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Business types or keywords to search on Google Maps (e.g. \"coffee shop\", \"plumber\").",
            "default": [
              "restaurants"
            ],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Geographic locations to combine with each query (e.g. \"New York, NY\"). Each query runs for each location.",
            "default": [
              "New York, NY"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "Direct Google Maps URLs",
            "type": "array",
            "description": "Provide direct Google Maps search URLs instead of queries + locations. When provided, queries and locations are ignored.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerQuery": {
            "title": "Max Results Per Query",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of results to extract per query-location pair. Set to 0 for unlimited.",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Max Search Concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Number of parallel search workers. Higher values are faster but use more proxy bandwidth.",
            "default": 10
          },
          "extractDetails": {
            "title": "Extract Place Details (description, plus code, popular times, reviews-per-star)",
            "type": "boolean",
            "description": "For each business, fetch its Place Details page to enrich with: full business description, Plus Code, more granular structured address (neighborhood/city/state/postal/country), reviews-per-star breakdown (1★/2★/3★/4★/5★ counts), review topic chips, popular times (hourly busy %), feature attributes (wheelchair accessible, LGBTQ-friendly, etc.), owner profile, canonical Maps URL, and category IDs. Adds 1 HTTP request per result.",
            "default": false
          },
          "maxDetailsConcurrency": {
            "title": "Max Details Concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Number of parallel Place Details workers.",
            "default": 10
          },
          "extractReviews": {
            "title": "Extract Full Review Text",
            "type": "boolean",
            "description": "Fetch every review's full text per place — includes author name, profile photo, rating, relative time, exact timestamp, review text, photos posted with the review, and any owner reply (with reply text and time). Adds 1+ HTTP requests per place (paginated). Marquee feature — most Apify Maps actors only return review COUNT.",
            "default": false
          },
          "maxReviewsPerPlace": {
            "title": "Max Reviews Per Place",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of reviews to fetch per business. Set to 0 for unlimited (every review). Default 20 covers most use cases at low cost.",
            "default": 20
          },
          "maxReviewsConcurrency": {
            "title": "Max Reviews Concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Parallel review fetchers. Lower than search/details to avoid rate-limiting on the reviews endpoint.",
            "default": 5
          },
          "collectEmails": {
            "title": "Extract Emails & Social Profiles",
            "type": "boolean",
            "description": "Visit each business website to extract email addresses and social media profiles across 10 platforms (Instagram, Facebook, LinkedIn, Twitter/X, YouTube, TikTok, Threads, WhatsApp, Telegram). On by default — emails are the #1 reason people scrape Maps. Turn off for faster, cheaper runs when you only need names/phones.",
            "default": true
          },
          "deepEmailSearch": {
            "title": "Deep Email Search",
            "type": "boolean",
            "description": "When email extraction is enabled, also crawl contact/about pages on each website for more thorough results. Slower but finds more emails.",
            "default": true
          },
          "maxEmailConcurrency": {
            "title": "Max Email Extraction Concurrency",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Number of parallel email extraction workers.",
            "default": 20
          },
          "emailTimeout": {
            "title": "Email Fetch Timeout (ms)",
            "minimum": 3000,
            "maximum": 60000,
            "type": "integer",
            "description": "Timeout in milliseconds for fetching each business website during email extraction.",
            "default": 15000
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "nl",
              "pl",
              "ru",
              "ja",
              "ko",
              "zh",
              "ar",
              "hi",
              "tr"
            ],
            "type": "string",
            "description": "Language code for Google Maps results (ISO 639-1).",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Country code for Google Maps results (ISO 3166-1 alpha-2).",
            "default": "us"
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Residential proxies recommended for best results.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}