{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps No-Website Leads Scraper | Unclaimed + Lead Score",
    "description": "Find local businesses with no website on Google Maps: name, category, phone, address, rating, reviews, weekly hours, time zone and a 0–100 lead score with reasons. Adds dead-website, directory-only and unclaimed-profile leads, on-trade matches only. Many cities per run, only-new mode, Notion rows.",
    "version": "0.1",
    "x-build-id": "ybUx6ghrDXbptmxMm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/corvuslab~google-maps-no-website-leads-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-corvuslab-google-maps-no-website-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/corvuslab~google-maps-no-website-leads-scraper/runs": {
      "post": {
        "operationId": "runs-sync-corvuslab-google-maps-no-website-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/corvuslab~google-maps-no-website-leads-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-corvuslab-google-maps-no-website-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": {
          "searchTerms": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "What to search for, e.g. \"plumber\", \"roofer\", \"dentist\". Add several to scan multiple trades in one run. A comma-separated line is split into separate terms.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "City, area, postcode or region to search around, e.g. \"Austin, TX\" or \"Manchester, UK\"."
          },
          "locations": {
            "title": "📍 More locations",
            "maxItems": 50,
            "type": "array",
            "description": "Search the same terms in more cities or areas in the same run, one per line (up to 50). Max results applies to each location, and a business found in two locations is returned and charged once.",
            "items": {
              "type": "string"
            }
          },
          "searchRadiusKm": {
            "title": "📏 Search radius (km)",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How far from the location centre to search. The whole circle is covered map area by map area, and results outside it are dropped.",
            "default": 25
          },
          "searchRadiusMiles": {
            "title": "📏 Search radius (miles)",
            "minimum": 1,
            "maximum": 125,
            "type": "integer",
            "description": "Optional alternative to km. When you set it, it is used instead of the km radius."
          },
          "maxResults": {
            "title": "💯 Max results",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of leads to return per location.",
            "default": 100
          },
          "onlyNewLeads": {
            "title": "🆕 Only new leads",
            "type": "boolean",
            "description": "Skip businesses that an earlier run of this actor already returned to you. Skipped businesses are not returned and not charged. Turn it on for scheduled runs to get only fresh leads.",
            "default": false
          },
          "stateKey": {
            "title": "🗂️ Lead list name",
            "type": "string",
            "description": "Optional. Keep a separate memory per campaign: 'Only new leads' and the NEW / UPDATED / UNCHANGED tags then compare against earlier runs that used the same list name. Leave empty to share one memory across all your runs."
          },
          "gl": {
            "title": "🌍 Country",
            "enum": [
              "af",
              "ax",
              "al",
              "dz",
              "as",
              "ad",
              "ao",
              "ai",
              "aq",
              "ag",
              "ar",
              "am",
              "aw",
              "au",
              "at",
              "az",
              "bs",
              "bh",
              "bd",
              "bb",
              "by",
              "be",
              "bz",
              "bj",
              "bm",
              "bt",
              "bo",
              "ba",
              "bw",
              "bv",
              "br",
              "io",
              "vg",
              "bn",
              "bg",
              "bf",
              "bi",
              "kh",
              "cm",
              "ca",
              "cv",
              "bq",
              "ky",
              "cf",
              "td",
              "cl",
              "cn",
              "cx",
              "cc",
              "co",
              "km",
              "cd",
              "cg",
              "ck",
              "cr",
              "ci",
              "hr",
              "cu",
              "cw",
              "cy",
              "cz",
              "dk",
              "dj",
              "dm",
              "do",
              "ec",
              "eg",
              "sv",
              "gq",
              "er",
              "ee",
              "sz",
              "et",
              "fk",
              "fo",
              "fj",
              "fi",
              "fr",
              "gf",
              "pf",
              "tf",
              "ga",
              "gm",
              "ge",
              "de",
              "gh",
              "gi",
              "gr",
              "gl",
              "gd",
              "gp",
              "gu",
              "gt",
              "gg",
              "gn",
              "gw",
              "gy",
              "ht",
              "hm",
              "hn",
              "hk",
              "hu",
              "is",
              "in",
              "id",
              "ir",
              "iq",
              "ie",
              "im",
              "il",
              "it",
              "jm",
              "jp",
              "je",
              "jo",
              "kz",
              "ke",
              "ki",
              "kw",
              "kg",
              "la",
              "lv",
              "lb",
              "ls",
              "lr",
              "ly",
              "li",
              "lt",
              "lu",
              "mo",
              "mg",
              "mw",
              "my",
              "mv",
              "ml",
              "mt",
              "mh",
              "mq",
              "mr",
              "mu",
              "yt",
              "mx",
              "fm",
              "md",
              "mc",
              "mn",
              "me",
              "ms",
              "ma",
              "mz",
              "mm",
              "na",
              "nr",
              "np",
              "nl",
              "nc",
              "nz",
              "ni",
              "ne",
              "ng",
              "nu",
              "nf",
              "kp",
              "mk",
              "mp",
              "no",
              "om",
              "pk",
              "pw",
              "ps",
              "pa",
              "pg",
              "py",
              "pe",
              "ph",
              "pn",
              "pl",
              "pt",
              "pr",
              "qa",
              "re",
              "ro",
              "ru",
              "rw",
              "bl",
              "sh",
              "kn",
              "lc",
              "mf",
              "pm",
              "vc",
              "ws",
              "sm",
              "st",
              "sa",
              "sn",
              "rs",
              "sc",
              "sl",
              "sg",
              "sx",
              "sk",
              "si",
              "sb",
              "so",
              "za",
              "gs",
              "kr",
              "ss",
              "es",
              "lk",
              "sd",
              "sr",
              "sj",
              "se",
              "ch",
              "sy",
              "tw",
              "tj",
              "tz",
              "th",
              "tl",
              "tg",
              "tk",
              "to",
              "tt",
              "tn",
              "tr",
              "tm",
              "tc",
              "tv",
              "um",
              "vi",
              "ug",
              "ua",
              "ae",
              "gb",
              "us",
              "uy",
              "uz",
              "vu",
              "va",
              "ve",
              "vn",
              "wf",
              "eh",
              "ye",
              "zm",
              "zw"
            ],
            "type": "string",
            "description": "Country to bias the search and location lookup toward. Leave empty to take the country from the location."
          },
          "hl": {
            "title": "🗣️ Language",
            "type": "string",
            "description": "Language Google writes the results in: category names, today's opening status and addresses (2-letter code, e.g. \"de\", \"ja\"). Phone numbers, ratings and every other field are the same in every language. The category filter matches category names in this language.",
            "default": "en"
          },
          "webPresence": {
            "title": "🌐 Count as \"no website\"",
            "type": "array",
            "description": "Which kinds of web presence make a business a lead. The default returns businesses with no site of their own. Add \"builder\" for weak free-builder sites, and \"deadsite\" to also check every listed website live and keep the ones that are down, parked or expired.",
            "items": {
              "type": "string",
              "enum": [
                "none",
                "social",
                "linkinbio",
                "directory",
                "builder",
                "deadsite"
              ],
              "enumTitles": [
                "No link at all",
                "Only a social page (Facebook, Instagram, TikTok…)",
                "Only a link-in-bio page (Linktree, Beacons…)",
                "Only a directory or booking profile (Yelp, Houzz, Booksy, a Google profile link…)",
                "A free site-builder subdomain (*.wixsite.com, *.square.site…)",
                "A website that is down, parked or gone (checked live)"
              ]
            },
            "default": [
              "none",
              "social",
              "linkinbio",
              "directory"
            ]
          },
          "onlyMatchingBusinesses": {
            "title": "🎯 Only businesses that match the search",
            "type": "boolean",
            "description": "Drop businesses Google shows for your term that are really a different trade (a pool cleaner in a plumber search). The run learns what the term means from Google's best-ranked results, in any language. Dropped businesses are not charged. Turn off to get Google's full, looser list.",
            "default": true
          },
          "minRating": {
            "title": "⭐ Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only keep businesses with at least this star rating (0–5). Leave empty for no minimum."
          },
          "minReviews": {
            "title": "🗳️ Minimum reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep businesses with at least this many reviews. When set, businesses without a review count are left out."
          },
          "category": {
            "title": "🏷️ Category contains",
            "type": "string",
            "description": "Keep only businesses with a Google category containing this text (case-insensitive), for example \"Plumber\". Leave empty to include every category."
          },
          "requirePhone": {
            "title": "📞 Require a phone number",
            "type": "boolean",
            "description": "Keep only businesses that list a phone number (recommended for outreach).",
            "default": false
          },
          "onlyClaimable": {
            "title": "🔓 Only unclaimed profiles",
            "type": "boolean",
            "description": "Keep only businesses whose Google profile is unclaimed (\"Claim this business\") — prospects for profile setup as well as a website.",
            "default": false
          },
          "skipClosed": {
            "title": "🚪 Skip closed businesses",
            "type": "boolean",
            "description": "Leave out businesses marked permanently or temporarily closed.",
            "default": true
          },
          "telegramToken": {
            "title": "🔑 Telegram bot token",
            "type": "string",
            "description": "Telegram bot token (from @BotFather). Required for Telegram notifications."
          },
          "telegramChatId": {
            "title": "💬 Telegram chat ID",
            "type": "string",
            "description": "Telegram chat or channel ID. Required when a Telegram token is set."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord webhook URL",
            "type": "string",
            "description": "Discord incoming webhook URL."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack webhook URL",
            "type": "string",
            "description": "Slack incoming webhook URL."
          },
          "whatsappAccessToken": {
            "title": "📱 WhatsApp access token",
            "type": "string",
            "description": "WhatsApp Cloud API access token. The recipient must have messaged your business number within the last 24h."
          },
          "whatsappPhoneNumberId": {
            "title": "📞 WhatsApp phone number ID",
            "type": "string",
            "description": "Your WhatsApp Business phone-number ID. Required when a WhatsApp token is set."
          },
          "whatsappTo": {
            "title": "📲 WhatsApp recipient",
            "type": "string",
            "description": "Recipient phone in E.164 format without + (e.g. \"15125550100\"). Separate several with commas."
          },
          "webhookUrl": {
            "title": "🪝 Generic webhook URL",
            "type": "string",
            "description": "Receives a JSON POST with the run's leads after the run finishes (n8n / Make / Zapier / custom)."
          },
          "webhookHeaders": {
            "title": "📋 Webhook headers",
            "type": "object",
            "description": "Optional JSON object of custom headers (e.g. {\"Authorization\":\"Bearer ...\"})."
          },
          "notifyOnlyChanges": {
            "title": "🔄 Notify only new / updated",
            "type": "boolean",
            "description": "Only send notifications for businesses that are new or changed since the previous run.",
            "default": false
          },
          "notificationLimit": {
            "title": "📊 Max leads per notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of leads listed in each chat notification (1–20). The webhook always receives every lead.",
            "default": 5
          },
          "appConnector": {
            "title": "Send a summary to Notion (or another connected app)",
            "type": "string",
            "description": "Optional. Pick an app you connected under Settings → API & Integrations. Notion gets a run-summary page with a lead table; an issue tracker gets one summary issue."
          },
          "mcpIssueTeam": {
            "title": "Issue tracker team",
            "type": "string",
            "description": "Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one."
          },
          "notionApiKey": {
            "title": "🗃️ Notion integration secret",
            "type": "string",
            "description": "Optional, for a full lead database instead of a summary: every lead becomes a row. Create an internal integration at notion.so/my-integrations, then open your database → ⋯ → Connections and connect it."
          },
          "notionDatabaseId": {
            "title": "🗃️ Notion database ID or URL",
            "type": "string",
            "description": "The database that receives one row per lead. Paste its URL or ID."
          },
          "notionCreateProperties": {
            "title": "Create missing Notion columns",
            "type": "boolean",
            "description": "Add any lead column the database is missing (phone, score, web presence, …).",
            "default": true
          },
          "startUrls": {
            "title": "🔗 Paste / Direct URLs",
            "type": "array",
            "description": "Google Maps search links (…/maps/search/plumber/@30.27,-97.74,13z) or place links. When set, the search fields above are ignored; the radius still applies around each search link's map position.",
            "items": {
              "type": "string"
            }
          },
          "compact": {
            "title": "📦 Compact output (for AI / MCP)",
            "type": "boolean",
            "description": "Return only the core lead fields. Smaller payloads for LLM pipelines and agent tools.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Exclude empty fields",
            "type": "boolean",
            "description": "Drop null, empty-string and empty-array fields from each lead.",
            "default": false
          },
          "query": {
            "title": "🔍 Search term(s) — alternative",
            "type": "string",
            "description": "Alternative to Search terms: one term, a comma-separated list, or a JSON array."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed for normal runs. Enable it only if your runs report that searches could not be completed.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}