{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper — Emails, Phones & B2B Leads",
    "description": "Extract Google Maps business leads with emails, phones, ratings, reviews, social links, opening hours, and lead scoring. Base $0.004/place; email enrichment is charged separately. MCP/API-ready.",
    "version": "1.8",
    "x-build-id": "bRkAZbpfo9RaD9Oni"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~google-maps-leads-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-google-maps-leads-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/khadinakbar~google-maps-leads-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-google-maps-leads-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/khadinakbar~google-maps-leads-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-google-maps-leads-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": {
          "searchQuery": {
            "title": "Business category or keyword",
            "type": "string",
            "description": "The local business type to find on Google Maps. Enter a plain-language category such as 'dentists', 'roofing contractors', or 'Italian restaurants'. Use it with Location for a focused territory search. This is not a Google Maps URL; use Start URLs for direct Maps pages."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "The city, region, or country that limits the business search. Use a clear place such as 'Austin, TX' or 'London, UK'. It defaults to the location encoded in a direct Maps URL when Start URLs are used. It is not a radius or latitude-longitude field."
          },
          "startUrls": {
            "title": "Google Maps URLs (optional)",
            "type": "array",
            "description": "One or more public Google Maps search or place URLs to process directly. Paste a URL such as 'https://www.google.com/maps/search/dentists+in+Austin'. When supplied, these URLs are processed alongside any category search. Do not provide website URLs here; use the category and location fields for discovery.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "Maximum qualified leads",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The maximum number of business lead records to return and bill as place-scraped events. Choose 5 for a smoke test, 50 for a focused territory, or a larger bounded campaign. The allowed range is 1 to 5000 and the actor stops once it reaches this limit. This is not a page count, because Maps result pages contain a variable number of businesses.",
            "default": 5
          },
          "enrichEmails": {
            "title": "Find public emails and social profiles",
            "type": "boolean",
            "description": "When enabled, the actor visits a business website and its likely contact pages to find public email and social links. Email enrichment is optional and has a separate event only when an email is found. It defaults to true for outreach-ready lead generation. It does not guess, buy, or validate private personal email addresses.",
            "default": true
          },
          "requireEmail": {
            "title": "Return only leads with a public email",
            "type": "boolean",
            "description": "Keep only businesses for which the website crawl found a public email address. This filter runs after Maps extraction and optional website enrichment. It defaults to false so useful phone or website-only prospects are not discarded. It does not guarantee inbox deliverability or consent for outreach.",
            "default": false
          },
          "requireWebsite": {
            "title": "Return only leads with a website",
            "type": "boolean",
            "description": "Keep only businesses whose Google Maps listing includes a website URL. This is useful when the next workflow step needs a reachable domain for enrichment or audit. It defaults to false so listing-only local prospects can still be returned. It does not test whether the website is currently online.",
            "default": false
          },
          "minLeadScore": {
            "title": "Minimum lead score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "The minimum 0–100 contactability score a lead must have to be returned. For example, 70 prioritizes leads with several public contact signals while 0 keeps all records. It defaults to 0 and only filters after the complete lead record is assembled. This is not a prediction of purchase intent or a credit score.",
            "default": 0
          },
          "maxReviews": {
            "title": "Reviews per business",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "The number of recent Google reviews to include for each returned business. Set 0 to omit review text and keep results compact. The allowed range is 0 to 100 and reviews do not change the lead score. This is not the total review count, which is always returned as review_count.",
            "default": 0
          },
          "language": {
            "title": "Google Maps result language",
            "enum": [
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "nl",
              "pl",
              "ru",
              "ja",
              "ko",
              "zh-CN",
              "ar",
              "tr",
              "hi"
            ],
            "type": "string",
            "description": "The Google Maps interface language used while collecting the listing. Select 'en' for English or another supported language such as 'es' or 'de'. It defaults to 'en' and can influence category and address text. It is not a country or proxy-region selector.",
            "default": "en"
          },
          "minRating": {
            "title": "Minimum Google rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "The minimum 0–5 Google Maps rating a business must have before it is returned. For example, 4.2 filters out lower-rated listings while 0 includes all listings. It defaults to 0 and records with no rating do not pass a positive threshold. This is not a review-count filter or a measure of business quality.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}