{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Business Scraper - Leads & Reviews",
    "description": "Scrape Google Maps business listings by location + category. Get name, address, phone, website, rating, review count, hours, photos. Bulk export to JSON / CSV. PAY_PER_EVENT: $0.10 init / $0.02 per result. Use for: local lead lists, market research, location intelligence.",
    "version": "2.1",
    "x-build-id": "qMqXSbHk8DhqPywew"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lazymac~google-maps-business-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lazymac-google-maps-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/lazymac~google-maps-business-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lazymac-google-maps-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/lazymac~google-maps-business-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lazymac-google-maps-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",
        "properties": {
          "searchQueries": {
            "title": "Search Queries",
            "type": "array",
            "description": "List of search queries to find businesses on Google Maps. Examples: 'restaurants in New York', 'dentist near me Chicago', 'plumber Los Angeles CA'. Each query will be searched separately and results combined. For best results, include the location in the query.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Direct Google Maps URLs to scrape. Use this if you already have specific Google Maps search result URLs or individual place URLs. Supports both search URLs (google.com/maps/search/...) and place URLs (google.com/maps/place/...). Leave empty if using search queries above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "title": "URL",
                  "type": "string",
                  "description": "Google Maps URL to scrape"
                },
                "method": {
                  "title": "HTTP Method",
                  "type": "string",
                  "description": "HTTP method for the request"
                }
              }
            }
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of business listings to extract per search query. Google Maps typically shows up to 120 results per search. Set to 0 for unlimited (all available results). Higher values require more compute time.",
            "default": 50
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for Google Maps results. This affects the language of business names, addresses, and reviews. Use ISO 639-1 codes: en (English), es (Spanish), fr (French), de (German), ja (Japanese), ko (Korean), zh (Chinese), pt (Portuguese), it (Italian), etc.",
            "default": "en"
          },
          "countryCode": {
            "title": "Country Code",
            "type": "string",
            "description": "Two-letter country code to target Google Maps for a specific country. This ensures results are localized correctly. Examples: US (United States), GB (United Kingdom), DE (Germany), FR (France), JP (Japan), KR (South Korea), BR (Brazil).",
            "default": "US"
          },
          "includeReviews": {
            "title": "Include Reviews",
            "type": "boolean",
            "description": "Extract individual reviews for each business. When enabled, the scraper will navigate to each business detail page and extract review text, author name, rating, and date. This significantly increases run time but provides valuable sentiment data.",
            "default": false
          },
          "maxReviews": {
            "title": "Maximum Reviews Per Business",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum number of reviews to extract per business listing. Only applies when 'Include Reviews' is enabled. Set lower values for faster runs. Google shows most relevant reviews first.",
            "default": 5
          },
          "includePhotos": {
            "title": "Include Photo URLs",
            "type": "boolean",
            "description": "Extract URLs of business photos from their Google Maps listing. Includes cover photos and gallery images. Useful for visual verification of business listings.",
            "default": false
          },
          "maxPhotos": {
            "title": "Maximum Photos Per Business",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of photo URLs to extract per business. Only applies when 'Include Photo URLs' is enabled.",
            "default": 5
          },
          "includeOpeningHours": {
            "title": "Include Opening Hours (best-effort)",
            "type": "boolean",
            "description": "Best-effort extraction of weekly opening hours when Google exposes them in the page markup. Phone, website, and address are always extracted; hours availability varies by listing.",
            "default": false
          },
          "includeAdditionalInfo": {
            "title": "Open each place for full detail (phone, website, hours)",
            "type": "boolean",
            "description": "When enabled, the scraper opens each business page to pull the phone number, website, full address, plus code, and opening hours — the fields that matter most for lead generation. Disable for a faster, cheaper run that returns only the data visible on the search results cards (name, rating, reviews, category, approximate address).",
            "default": true
          },
          "filterByRating": {
            "title": "Minimum Rating Filter",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only include businesses with a rating equal to or above this value. Set to 0 to include all businesses regardless of rating. Useful for filtering out low-quality leads.",
            "default": 0
          },
          "filterByMinReviews": {
            "title": "Minimum Reviews Count",
            "minimum": 0,
            "type": "integer",
            "description": "Only include businesses with at least this many reviews. Set to 0 to include all businesses. Higher values filter for more established businesses.",
            "default": 0
          },
          "onlyWithPhone": {
            "title": "Only Businesses With Phone Number",
            "type": "boolean",
            "description": "When enabled, only include businesses that have a phone number listed. Essential for telemarketing and outreach campaigns where phone contact is required.",
            "default": false
          },
          "onlyWithWebsite": {
            "title": "Only Businesses With Website",
            "type": "boolean",
            "description": "When enabled, only include businesses that have a website URL listed. Useful for digital marketing campaigns and web-based outreach.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of pages to process in parallel. Higher values speed up the scrape but may increase the chance of being rate-limited. Recommended: 5-10 for most use cases.",
            "default": 5
          },
          "enrichEmails": {
            "title": "Find emails (lead-gen)",
            "type": "boolean",
            "description": "For every business with a website, visit its homepage + /contact + /about and extract a contact email. Adds the 'email' column that turns raw data into contactable leads. Slightly slower but recommended for sales prospecting.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings for the scraper. Using Apify's residential proxies (RESIDENTIAL group) is recommended for Google Maps to avoid blocks. The scraper automatically rotates proxies between requests.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}