{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Business Leads Scraper (Email, Phone...)",
    "description": "Scrape business listings from Google Maps and enrich with emails, phones, and social profiles from each company website. Lead generation in one click.",
    "version": "0.0",
    "x-build-id": "SWeW8o8OiFgPdevIh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lurkapi~google-maps-business-leads-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lurkapi-google-maps-business-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/lurkapi~google-maps-business-leads-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lurkapi-google-maps-business-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/lurkapi~google-maps-business-leads-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lurkapi-google-maps-business-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": "Keywords to search on Google Maps. One per line. Each is paired with the Location field below.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region, or country to search in. A city name alone works (e.g. 'Austin'); add state or country for precision (e.g. 'Austin, TX' or 'Paris, France')."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google Maps language. Default 'en'.",
            "default": "en"
          },
          "maxPlacesPerSearch": {
            "title": "Max places per search term",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cap how many places are returned per search term. Google Maps limits results to ~120 per query regardless.",
            "default": 100
          },
          "googleMapsUrls": {
            "title": "Google Maps URLs (replaces keyword search if set)",
            "type": "array",
            "description": "Paste Google Maps search URLs or place URLs to scrape directly. When this list is non-empty, the search-terms / location pair above is ignored; only the URLs you provide are processed.",
            "items": {
              "type": "string"
            }
          },
          "placeIdsToSkip": {
            "title": "Place IDs to skip",
            "type": "array",
            "description": "Place IDs you've already collected. Skipped without charge. Bulk-paste many at once: one per line, or comma-separated.",
            "items": {
              "type": "string"
            }
          },
          "searchCircle": {
            "title": "Search circle (lat / lng / radius miles)",
            "type": "object",
            "description": "Limit search to a circular area. Provide { \"lat\": <number>, \"lng\": <number>, \"radiusMiles\": <number> }. Centers the Maps viewport here and drops places outside the radius. Combine with Search terms; Location is ignored when this is set."
          },
          "searchPolygon": {
            "title": "Search polygon (GeoJSON ring)",
            "type": "array",
            "description": "Limit search to an arbitrary polygon. Provide an array of [lng, lat] pairs (GeoJSON convention; first and last point can match). Centers the viewport on the polygon's bounding box and filters places to those inside. Takes precedence over Search circle when both are set."
          },
          "minRating": {
            "title": "Minimum rating (1–5)",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Skip places below this average rating. Filtered places are not charged."
          },
          "minReviewCount": {
            "title": "Minimum review count",
            "minimum": 0,
            "type": "integer",
            "description": "Skip places with fewer than this many reviews. Filtered places are not charged."
          },
          "hasWebsite": {
            "title": "Only places with a website",
            "type": "boolean",
            "description": "If on, skip listings that have no website. Filtered places are not charged."
          },
          "webHostFilter": {
            "title": "Only places running these web platforms",
            "uniqueItems": true,
            "type": "array",
            "description": "Multi-select. When set, only places whose website is detected as running one of these platforms are kept (rest are dropped without charge). Useful if you're a web agency only working with WordPress (or Shopify, Webflow, etc.) clients and want to filter leads to your stack.",
            "items": {
              "type": "string",
              "enum": [
                "WordPress",
                "WordPress.com",
                "Shopify",
                "Wix",
                "Squarespace",
                "Webflow",
                "Ghost",
                "Drupal",
                "Joomla",
                "Magento",
                "BigCommerce",
                "HubSpot CMS",
                "Duda",
                "Weebly",
                "Jimdo",
                "WP Engine",
                "Kinsta",
                "Pantheon",
                "Vercel",
                "Netlify",
                "GitHub Pages",
                "Cloudflare Pages",
                "AWS Amplify",
                "Google Sites",
                "Heroku",
                "AWS / CloudFront",
                "Cloudflare",
                "Fastly",
                "Akamai"
              ],
              "enumTitles": [
                "WordPress (self-hosted)",
                "WordPress.com (hosted SaaS)",
                "Shopify",
                "Wix",
                "Squarespace",
                "Webflow",
                "Ghost",
                "Drupal",
                "Joomla",
                "Magento",
                "BigCommerce",
                "HubSpot CMS",
                "Duda",
                "Weebly",
                "Jimdo",
                "WP Engine",
                "Kinsta",
                "Pantheon",
                "Vercel",
                "Netlify",
                "GitHub Pages",
                "Cloudflare Pages",
                "AWS Amplify",
                "Google Sites",
                "Heroku",
                "AWS / CloudFront",
                "Cloudflare",
                "Fastly",
                "Akamai"
              ]
            }
          },
          "outputPlaceId": {
            "title": "Place ID",
            "type": "boolean",
            "description": "Google's permanent identifier for the business.",
            "default": true
          },
          "outputCid": {
            "title": "CID (long-form ID)",
            "type": "boolean",
            "description": "Google's hex CID identifier for the business.",
            "default": true
          },
          "outputTitle": {
            "title": "Business name",
            "type": "boolean",
            "description": "Display name shown on Google Maps.",
            "default": true
          },
          "outputPhone": {
            "title": "Primary phone (from Google Maps)",
            "type": "boolean",
            "description": "Primary phone listed on the Google Maps profile.",
            "default": true
          },
          "outputWebsite": {
            "title": "Website URL (from Google Maps)",
            "type": "boolean",
            "description": "Business website URL listed on Google Maps.",
            "default": true
          },
          "outputEmail": {
            "title": "Primary email (first found via website)",
            "type": "boolean",
            "description": "First email discovered while crawling the website.",
            "default": true
          },
          "outputGoogleMapsUrl": {
            "title": "Google Maps URL",
            "type": "boolean",
            "description": "Direct link to the listing on Google Maps.",
            "default": true
          },
          "outputSearchKeyword": {
            "title": "Source search keyword",
            "type": "boolean",
            "description": "Keyword that produced this row.",
            "default": true
          },
          "outputError": {
            "title": "Error details (when status is not Success)",
            "type": "boolean",
            "description": "Technical error string when a lookup fails.",
            "default": true
          },
          "outputCategory": {
            "title": "Primary category",
            "type": "boolean",
            "description": "First category Google assigns to the business.",
            "default": true
          },
          "outputCategories": {
            "title": "All categories",
            "type": "boolean",
            "description": "All categories Google assigns to the business.",
            "default": true
          },
          "outputWebsiteBusinessType": {
            "title": "Website business type (schema.org)",
            "type": "boolean",
            "description": "Schema.org @type values from the website's own structured data (e.g. Restaurant, MedicalBusiness, AutoRepair). Often more specific than Google's category and standardized to a known vocabulary.",
            "default": true
          },
          "outputWebHost": {
            "title": "Web host / platform (WordPress, Shopify, etc.)",
            "type": "boolean",
            "description": "Detected web platform / hosting layer of the business website (WordPress, Shopify, Webflow, Vercel, Cloudflare, etc.). Useful for B2B segmentation by tech stack.",
            "default": true
          },
          "outputAddress": {
            "title": "Full address",
            "type": "boolean",
            "description": "Complete street address.",
            "default": true
          },
          "outputCity": {
            "title": "City",
            "type": "boolean",
            "description": "City component of the address.",
            "default": true
          },
          "outputState": {
            "title": "State / region",
            "type": "boolean",
            "description": "State or region component of the address.",
            "default": true
          },
          "outputCountry": {
            "title": "Country",
            "type": "boolean",
            "description": "Country component of the address.",
            "default": true
          },
          "outputPostalCode": {
            "title": "Postal / zip code",
            "type": "boolean",
            "description": "Postal code component of the address.",
            "default": true
          },
          "outputLatitude": {
            "title": "Latitude",
            "type": "boolean",
            "description": "Latitude in decimal degrees.",
            "default": true
          },
          "outputLongitude": {
            "title": "Longitude",
            "type": "boolean",
            "description": "Longitude in decimal degrees.",
            "default": true
          },
          "outputRating": {
            "title": "Average rating",
            "type": "boolean",
            "description": "Average review rating (1 to 5).",
            "default": true
          },
          "outputReviewCount": {
            "title": "Review count",
            "type": "boolean",
            "description": "Total number of reviews.",
            "default": true
          },
          "outputPriceRange": {
            "title": "Price range",
            "type": "boolean",
            "description": "Price range string (such as $$ or US$10-20).",
            "default": true
          },
          "outputDescription": {
            "title": "Editorial description",
            "type": "boolean",
            "description": "Editorial description shown on the listing.",
            "default": true
          },
          "outputOpeningHours": {
            "title": "Opening hours (per day)",
            "type": "boolean",
            "description": "Opening hours per day of the week.",
            "default": true
          },
          "outputPopularTimes": {
            "title": "Popular times (busyness % per hour)",
            "type": "boolean",
            "description": "Hourly busyness percentages from Google.",
            "default": true
          },
          "outputCurrentStatus": {
            "title": "Current open / closed status",
            "type": "boolean",
            "description": "Current status string (Open, Closed, Permanently closed).",
            "default": true
          },
          "outputTimezone": {
            "title": "Timezone (IANA)",
            "type": "boolean",
            "description": "IANA timezone string for the location.",
            "default": true
          },
          "outputPlusCode": {
            "title": "Plus code",
            "type": "boolean",
            "description": "Google plus code for the location.",
            "default": true
          },
          "outputMainImage": {
            "title": "Main image URL",
            "type": "boolean",
            "description": "Primary photo of the business.",
            "default": true
          },
          "outputImages": {
            "title": "Image gallery URLs",
            "type": "boolean",
            "description": "List of additional photo URLs.",
            "default": true
          },
          "outputServiceOptions": {
            "title": "Service options (Delivery / Takeout / Dine-in)",
            "type": "boolean",
            "description": "Service options listed on the business profile.",
            "default": true
          },
          "outputAdditionalInfo": {
            "title": "Additional info (LGBTQ+ friendly, accessibility, etc.)",
            "type": "boolean",
            "description": "Additional attributes Google publishes for the business.",
            "default": true
          },
          "outputMenu": {
            "title": "Menu link",
            "type": "boolean",
            "description": "Menu link if the business publishes one.",
            "default": true
          },
          "outputReservations": {
            "title": "Reservation links",
            "type": "boolean",
            "description": "Reservation links if the business publishes any.",
            "default": true
          },
          "outputOrderOnline": {
            "title": "Order-online links",
            "type": "boolean",
            "description": "Order-online links if the business publishes any.",
            "default": true
          },
          "outputOwner": {
            "title": "Owner / contributor info",
            "type": "boolean",
            "description": "Listing owner or top contributor info if available.",
            "default": true
          },
          "outputEmails": {
            "title": "All emails (from website crawl)",
            "type": "boolean",
            "description": "All emails found while crawling the website.",
            "default": true
          },
          "outputPhones": {
            "title": "All phones (from website crawl)",
            "type": "boolean",
            "description": "All phone numbers found while crawling the website.",
            "default": true
          },
          "outputSocials": {
            "title": "Social profiles (Facebook, Instagram, LinkedIn, etc.)",
            "type": "boolean",
            "description": "Social profile URLs found while crawling the website.",
            "default": true
          },
          "checkGoogleAdsActive": {
            "title": "Detect Google Ads activity",
            "type": "boolean",
            "description": "Flag businesses currently advertising on Google. Adds a googleAdsActive boolean and a link to their public Ads Transparency Center profile when a match is found.",
            "default": false
          },
          "checkMetaAdsActive": {
            "title": "Detect Meta (Facebook / Instagram) Ads activity",
            "type": "boolean",
            "description": "Flag businesses currently advertising on Facebook or Instagram. Adds a metaAdsActive boolean and a link to their Meta Ad Library page when a match is found.",
            "default": false
          },
          "enrichLinkedIn": {
            "title": "LinkedIn company enrichment",
            "type": "boolean",
            "description": "Pull public company data from LinkedIn: name, follower count, headcount range, industry, headquarters, founded year, specialties, logo, cover image, and whether the company has posted in the last 30 days. Only runs when a LinkedIn URL is found on the website.",
            "default": false
          },
          "enrichRegistry": {
            "title": "Company registry enrichment",
            "type": "boolean",
            "description": "Look up the business in official government registries: registration number, legal status, incorporation date, registered address, and IDs like EIN / SIREN / NZBN. Covers the US, UK, Australia, France, and New Zealand, plus a worldwide LEI fallback.",
            "default": false
          },
          "enrichLegalEntity": {
            "title": "Find the legal entity behind the listing",
            "type": "boolean",
            "description": "Find the legal company behind the trade name. Many businesses operate under a brand that differs from the entity that owns it (a 'Subway' franchise may legally belong to 'Doctor's Associates LLC'). Also extracts tax and registration IDs (VAT, EIN, SIREN, ABN, NZBN, etc.) from the website.",
            "default": false
          },
          "enrichDomain": {
            "title": "Domain registration data (age + registrar)",
            "type": "boolean",
            "description": "Get the website's domain age, registrar, creation date, and expiry. Useful as a credibility signal: a domain registered in 1999 is an established business; one registered last week is a red flag.",
            "default": false
          },
          "validateEmail": {
            "title": "Validate primary email + classify provider",
            "type": "boolean",
            "description": "Check that each scraped email's domain accepts mail and isn't on a disposable-email list. Also classifies the email host (Google Workspace, Microsoft 365, Zoho, etc.), which helps separate real businesses from personal Gmail / Outlook setups.",
            "default": false
          },
          "enableLeadScoring": {
            "title": "Score each lead (0 to 100)",
            "type": "boolean",
            "description": "Compute a 0 to 100 lead score per place from signals already in the row (email, phone, website, rating, social, Google Ads activity, email provider type, etc.). Free, no extra fetches. Tune the defaults via Lead score weights below.",
            "default": false
          },
          "leadScoreWeights": {
            "title": "Lead score weights (override defaults)",
            "type": "object",
            "description": "Override the default scoring weights. Provide any subset of: emailDomainMatch (default 25), emailPresent (8), phonePresent (12), websitePresent (8), ratingAtLeast4 (8), descriptionPresent (5), mainImagePresent (5), additionalInfoPopulated (5), socialAny (10), googleAdsActive (15), emailValidValid (10), emailProviderBusiness (6; fires when the email is hosted on a paid business provider like Google Workspace, Microsoft 365, or Zoho rather than a free consumer mailbox). Keys you don't specify keep their defaults. Permanently-closed places always score 0."
          },
          "proxyConfig": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy used for Google Maps requests and website enrichment. Datacenter is the default for cost efficiency. Switch to Residential if you see frequent blocks.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": []
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}