{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Lead Scraper - Verified Emails, Phones & Owners",
    "description": "Turn any search into a lead list: \"dentist Chicago\" → CSV with phone (~97% of businesses), SMTP-verified email, owner name, and a 0–1 confidence score. Live from Google Maps, not a recycled database. Monitoring mode returns only NEW businesses. Pay per lead, no subscription.",
    "version": "0.1",
    "x-build-id": "pb11jirB6GbLOaLb1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/doesaiknow~google-maps-lead-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-doesaiknow-google-maps-lead-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/doesaiknow~google-maps-lead-scraper/runs": {
      "post": {
        "operationId": "runs-sync-doesaiknow-google-maps-lead-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/doesaiknow~google-maps-lead-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-doesaiknow-google-maps-lead-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": {
          "searchTerms": {
            "title": "Search terms (niche)",
            "type": "array",
            "description": "Business niches to search on Google Maps, e.g. \"dentist\", \"plumber\". Required unless you provide Start URLs or Place IDs.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "United States",
              "United Kingdom",
              "Germany",
              "Canada",
              "Australia",
              "France",
              "Netherlands",
              "Spain",
              "Italy",
              "Poland",
              "Czechia",
              "Austria",
              "Switzerland",
              "Belgium",
              "Ireland",
              "Sweden",
              "Afghanistan",
              "Albania",
              "Algeria",
              "American Samoa",
              "Andorra",
              "Angola",
              "Antarctica",
              "Antigua and Barbuda",
              "Argentina",
              "Armenia",
              "Azerbaijan",
              "Bahrain",
              "Bangladesh",
              "Barbados",
              "Belize",
              "Benin",
              "Bhutan",
              "Bolivia",
              "Bosnia and Herzegovina",
              "Botswana",
              "Brazil",
              "Brunei",
              "Bulgaria",
              "Burkina Faso",
              "Burundi",
              "Cabo Verde",
              "Cambodia",
              "Cameroon",
              "Caribbean Netherlands",
              "Central African Republic",
              "Chad",
              "Chile",
              "China",
              "Christmas Island",
              "Cocos (Keeling) Islands",
              "Colombia",
              "Comoros",
              "Cook Islands",
              "Costa Rica",
              "Cote d'Ivoire",
              "Croatia",
              "Curacao",
              "Cyprus",
              "Democratic Republic of the Congo",
              "Denmark",
              "Djibouti",
              "Dominica",
              "Dominican Republic",
              "Ecuador",
              "Egypt",
              "El Salvador",
              "Equatorial Guinea",
              "Eritrea",
              "Estonia",
              "Eswatini",
              "Ethiopia",
              "Fiji",
              "Finland",
              "French Polynesia",
              "French Southern and Antarctic Lands",
              "Gabon",
              "Georgia",
              "Ghana",
              "Greece",
              "Grenada",
              "Guam",
              "Guatemala",
              "Guernsey",
              "Guinea",
              "Guinea-Bissau",
              "Guyana",
              "Haiti",
              "Heard Island and McDonald Islands",
              "Honduras",
              "Hungary",
              "Iceland",
              "India",
              "Indonesia",
              "Iraq",
              "Isle of Man",
              "Israel",
              "Jamaica",
              "Japan",
              "Jersey",
              "Jordan",
              "Kazakhstan",
              "Kenya",
              "Kiribati",
              "Kuwait",
              "Kyrgyzstan",
              "Laos",
              "Latvia",
              "Lebanon",
              "Lesotho",
              "Liberia",
              "Libya",
              "Liechtenstein",
              "Lithuania",
              "Luxembourg",
              "Madagascar",
              "Malawi",
              "Malaysia",
              "Maldives",
              "Mali",
              "Malta",
              "Marshall Islands",
              "Mauritania",
              "Mauritius",
              "Mexico",
              "Micronesia",
              "Moldova",
              "Monaco",
              "Mongolia",
              "Montenegro",
              "Morocco",
              "Mozambique",
              "Myanmar (Burma)",
              "Namibia",
              "Nauru",
              "Nepal",
              "New Caledonia",
              "New Zealand",
              "Nicaragua",
              "Niger",
              "Nigeria",
              "Niue",
              "Norfolk Island",
              "North Macedonia",
              "Northern Mariana Islands",
              "Norway",
              "Oman",
              "Pakistan",
              "Palau",
              "Panama",
              "Papua New Guinea",
              "Paraguay",
              "Peru",
              "Philippines",
              "Pitcairn Islands",
              "Portugal",
              "Qatar",
              "Republic of the Congo",
              "Romania",
              "Rwanda",
              "Saint Helena, Ascension and Tristan da Cunha",
              "Saint Kitts and Nevis",
              "Saint Lucia",
              "Saint Martin",
              "Saint Pierre and Miquelon",
              "Saint Vincent and the Grenadines",
              "Samoa",
              "San Marino",
              "Sao Tome and Principe",
              "Saudi Arabia",
              "Senegal",
              "Serbia",
              "Seychelles",
              "Sierra Leone",
              "Singapore",
              "Sint Maarten",
              "Slovakia",
              "Slovenia",
              "Solomon Islands",
              "Somalia",
              "South Africa",
              "South Georgia and the South Sandwich Islands",
              "South Korea",
              "Sri Lanka",
              "Suriname",
              "Tajikistan",
              "Tanzania",
              "Thailand",
              "The Bahamas",
              "The Gambia",
              "Timor-Leste",
              "Togo",
              "Tokelau",
              "Tonga",
              "Trinidad and Tobago",
              "Tunisia",
              "Turkiye",
              "Turkmenistan",
              "Tuvalu",
              "Uganda",
              "Ukraine",
              "United Arab Emirates",
              "United States Minor Outlying Islands",
              "Uruguay",
              "Uzbekistan",
              "Vanuatu",
              "Vatican City",
              "Venezuela",
              "Vietnam",
              "Wallis and Futuna",
              "Yemen",
              "Zambia",
              "Zimbabwe"
            ],
            "type": "string",
            "description": "Default country for bare city names below (most popular first). Leave Cities empty for a country-wide search. Entries like \"Berlin, DE\" override it per city."
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "City names, one per line. A bare name (\"Warsaw\", \"Kraków\" — English names, diacritics OK) is looked up in the selected Country. Add a country to an entry to mix countries in one run: \"Berlin, DE\", \"Paris, France\", a full location name, or \"lat,lng,zoom\" coordinates. Unknown names are skipped with a did-you-mean suggestion in the log. Leave empty to search the whole selected country.",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "es",
              "de",
              "fr",
              "pl",
              "nl",
              "it",
              "pt",
              "cs",
              "sv",
              "af",
              "ak",
              "sq",
              "am",
              "ar",
              "hy",
              "az",
              "ban",
              "eu",
              "be",
              "bn",
              "bs",
              "bg",
              "my",
              "ca",
              "ceb",
              "ny",
              "zh-CN",
              "zh-TW",
              "hr",
              "da",
              "es-419",
              "et",
              "ee",
              "fo",
              "fa",
              "fil",
              "fi",
              "fy",
              "gaa",
              "gl",
              "lg",
              "ka",
              "el",
              "gu",
              "ht",
              "ha",
              "he",
              "iw",
              "hi",
              "hu",
              "is",
              "bem",
              "ig",
              "id",
              "ga",
              "ja",
              "kn",
              "kk",
              "km",
              "rw",
              "rn",
              "kg",
              "ko",
              "crs",
              "mfe",
              "kri",
              "ckb",
              "ky",
              "lo",
              "lv",
              "ln",
              "lt",
              "ach",
              "mk",
              "mg",
              "ms",
              "ml",
              "mt",
              "mi",
              "mr",
              "mn",
              "sr-ME",
              "ne",
              "nso",
              "no",
              "nyn",
              "om",
              "ps",
              "pcm",
              "pt-BR",
              "pt-PT",
              "pa",
              "qu",
              "ro",
              "rm",
              "ru",
              "sr",
              "sr-Latn",
              "st",
              "sn",
              "loz",
              "sd",
              "si",
              "sk",
              "sl",
              "so",
              "sw",
              "tl",
              "tg",
              "ta",
              "te",
              "th",
              "ti",
              "to",
              "lua",
              "tn",
              "tum",
              "tr",
              "tk",
              "uk",
              "ur",
              "uz",
              "vi",
              "cy",
              "wo",
              "xh",
              "yo",
              "zu"
            ],
            "type": "string",
            "description": "Language of Google Maps results (most popular first).",
            "default": "en"
          },
          "maxResults": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum businesses fetched per search term × location (capped at 5000).",
            "default": 25
          },
          "minResults": {
            "title": "Min results (stop-loss)",
            "minimum": 0,
            "type": "integer",
            "description": "Stop the run BEFORE email extraction & verification if Google Maps finds fewer businesses than this — nothing gets charged. 0 = disabled.",
            "default": 0
          },
          "startUrls": {
            "title": "Start URLs / domains",
            "type": "array",
            "description": "Bring your own list of business websites — skips Google Maps and goes straight to email extraction.",
            "items": {
              "type": "string"
            }
          },
          "placeIds": {
            "title": "Google Place IDs",
            "type": "array",
            "description": "Bring your own list of Google Maps place IDs.",
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerSite": {
            "title": "Max pages per site",
            "minimum": 1,
            "maximum": 7,
            "type": "integer",
            "description": "How many pages to check per website when hunting for an email, in order: home, /contact, /kontakt, /contact-us, /about, /impressum, /kontakt.html.",
            "default": 5
          },
          "renderJs": {
            "title": "JavaScript rendering",
            "enum": [
              "auto",
              "always",
              "never"
            ],
            "type": "string",
            "description": "\"never\" (default) is fastest and cheapest — plain HTTP extraction, no browser. \"auto\" renders in a real browser (via residential proxy) only for sites that block plain requests; it recovers a few extra emails but costs noticeably more, so turn it on only when you want maximum email coverage. \"always\" renders every site (slowest, most expensive).",
            "default": "never"
          },
          "includeNoWebsite": {
            "title": "Include businesses without a website",
            "type": "boolean",
            "description": "Businesses with no website become phone-only leads instead of being dropped.",
            "default": true
          },
          "verifyEmails": {
            "title": "Verify emails (SMTP deliverability)",
            "type": "boolean",
            "description": "Verify each found email for deliverability. Off = faster and cheaper; emails are returned as \"unverified\".",
            "default": true
          },
          "verifyProvider": {
            "title": "Verification provider",
            "enum": [
              "bundled",
              "byo"
            ],
            "type": "string",
            "description": "\"bundled\" uses our verification service — no setup, verification is included in the per-lead price. \"byo\" uses YOUR OWN Reoon Email Verifier API key (emailverifier.reoon.com → API) — you pay Reoon directly for credits (~$0.0012/verify) instead of us.",
            "default": "bundled"
          },
          "verifyApiKey": {
            "title": "Your Reoon API key",
            "type": "string",
            "description": "Reoon Email Verifier API key (create one at emailverifier.reoon.com → API). Required only when the verification provider is \"byo\"; ignored otherwise."
          },
          "emailTypes": {
            "title": "Email types to keep",
            "type": "array",
            "description": "Which email types to include in results: personal (john@…), role (info@, office@…), generic (noreply@, postmaster@…).",
            "items": {
              "type": "string",
              "enum": [
                "personal",
                "role",
                "generic"
              ],
              "enumTitles": [
                "Personal",
                "Role",
                "Generic"
              ]
            },
            "default": [
              "personal",
              "role"
            ]
          },
          "enrichLeads": {
            "title": "Enrich leads (owner name, socials, booking platforms)",
            "type": "boolean",
            "description": "Find the owner/decision-maker name (Impressum, team pages, JSON-LD Person), social profile links and booking-platform signals from the business website. Adds the lead_enriched event ($). No extra page fetches for most sites - reuses pages already downloaded.",
            "default": false
          },
          "guessPersonalEmails": {
            "title": "Find & verify personal email of the owner",
            "type": "boolean",
            "description": "When an owner name is found and the domain is not catch-all, generate common patterns (anna@, a.kowalska@, anna.kowalska@, kowalska@) and SMTP-verify them. Only VERIFIED hits are charged (personal_email_verified event). Requires enrichLeads and verifyEmails.",
            "default": false
          },
          "dedupeBy": {
            "title": "Dedupe by",
            "enum": [
              "domain",
              "company",
              "none"
            ],
            "type": "string",
            "description": "How to deduplicate businesses across searches.",
            "default": "domain"
          },
          "freshData": {
            "title": "Fresh data (bypass cache)",
            "type": "boolean",
            "description": "By default, repeated runs of the same search reuse cached Google Maps results (24 h) and email verifications (30 days) — cheaper and stable. Turn this on to force a fresh live pull.",
            "default": false
          },
          "mode": {
            "title": "Run mode",
            "enum": [
              "full",
              "incremental"
            ],
            "type": "string",
            "description": "\"full\" returns every matching business each run. \"incremental\" remembers what it already delivered for this search and returns ONLY newly-appeared businesses on later runs — and charges only for those. Ideal for monitoring: run monthly for a niche+city and get just the new openings.",
            "default": "full"
          },
          "runTag": {
            "title": "Monitor tag",
            "type": "string",
            "description": "Optional label that keys the incremental state, so you can keep several independent monitors. Leave empty to key by the search itself (search terms + locations)."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}