{
  "openapi": "3.0.1",
  "info": {
    "title": "📍 Google Maps Email Scraper — Scored Business Leads",
    "description": "Most Google Maps scrapers just dump raw leads. This one scores every lead by how reachable it is and tags why it's worth contacting — no website, weak reviews, a dated site, no marketing — then gives you a one-page market summary. Emails included, all in one run, flat JSON.",
    "version": "1.0",
    "x-build-id": "pg8xcksbTTVK1Xkkn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/berkaydev~google-maps-email-scraper-business-leads/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-berkaydev-google-maps-email-scraper-business-leads",
        "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/berkaydev~google-maps-email-scraper-business-leads/runs": {
      "post": {
        "operationId": "runs-sync-berkaydev-google-maps-email-scraper-business-leads",
        "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/berkaydev~google-maps-email-scraper-business-leads/run-sync": {
      "post": {
        "operationId": "run-sync-berkaydev-google-maps-email-scraper-business-leads",
        "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": [
          "searchTerms",
          "location"
        ],
        "properties": {
          "searchTerms": {
            "title": "Business types to search",
            "minItems": 1,
            "type": "array",
            "description": "What kind of businesses to find. You can add multiple terms for broader coverage. Examples: 'dentists', 'Italian restaurants', 'Zahnarzt', 'plumbers'",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "minLength": 2,
            "type": "string",
            "description": "City and country to search in. Examples: 'London, UK', 'Berlin, Germany', 'New York, USA'"
          },
          "maxResults": {
            "title": "Max results per search term",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of businesses to scrape per search term. Higher = longer runtime. Start small (5-20) to test, up to 500 for production.",
            "default": 50
          },
          "extractEmail": {
            "title": "Extract email from business websites",
            "type": "boolean",
            "description": "Visit each business website and extract contact email addresses. This is what makes this Actor valuable for lead generation. Adds ~1-2 seconds per result.",
            "default": true
          },
          "enrichLeads": {
            "title": "Lead enrichment (scoring & signals)",
            "type": "boolean",
            "description": "Calculate a contactability score, opportunity tags (needs_website, weak_reviews, stale_site, no_marketing), and website signals (SSL, CMS, tracking, social links) from the homepage already fetched during email extraction — no extra compute cost.",
            "default": true
          },
          "minRating": {
            "title": "Minimum Google rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only include businesses with at least this Google Maps rating. Set to 4.0 for high-quality leads, leave at 0 for no filter.",
            "default": 0
          },
          "onlyWithWebsite": {
            "title": "Only businesses with a website",
            "type": "boolean",
            "description": "Skip businesses with no website listed. Useful if email extraction is your main goal.",
            "default": false
          },
          "onlyWithPhone": {
            "title": "Only businesses with a phone number",
            "type": "boolean",
            "description": "Skip businesses with no phone number listed.",
            "default": false
          },
          "language": {
            "title": "Results language",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "pt",
              "pl",
              "tr",
              "sv"
            ],
            "type": "string",
            "description": "Language used for the Google Maps search. Use the language that matches your target country.",
            "default": "en"
          },
          "maxRunTimeSecs": {
            "title": "Max run time (seconds)",
            "minimum": 60,
            "maximum": 3500,
            "type": "integer",
            "description": "Hard limit on run duration. The Actor will save all results collected so far and exit cleanly before hitting the platform's 3600s timeout. Default 3000s is safe for most runs.",
            "default": 3000
          },
          "placeConcurrency": {
            "title": "Place page concurrency (advanced)",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "How many Google Maps place pages to render in parallel. Leave at 0 to auto-scale from memory (recommended). Maps place pages are CPU-heavy (WebGL); too much parallelism on too little CPU slows every render. Raise only if you also raise memory.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Use Apify Proxy to avoid Google rate limits. Recommended for runs with more than 100 results. Requires a paid Apify plan for Residential proxies.",
            "default": {}
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}