{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Lead Finder & Business Enricher",
    "description": "Find local businesses on Google Maps and turn them into structured leads: website enrichment, public emails, phones, WhatsApp, social profiles, contact people, optional reviews with sentiment, and deterministic lead scoring. No AI or API keys required.",
    "version": "1.0",
    "x-build-id": "ldUTS9zkD2u4dPjVe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/outspoken_strategy~google-maps-lead-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-outspoken_strategy-google-maps-lead-finder",
        "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/outspoken_strategy~google-maps-lead-finder/runs": {
      "post": {
        "operationId": "runs-sync-outspoken_strategy-google-maps-lead-finder",
        "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/outspoken_strategy~google-maps-lead-finder/run-sync": {
      "post": {
        "operationId": "run-sync-outspoken_strategy-google-maps-lead-finder",
        "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": [
          "searchQueries"
        ],
        "properties": {
          "searchQueries": {
            "title": "Search queries",
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "description": "What to search for on Google Maps, one query per line, e.g. \"dentists\", \"car dealerships\", \"real estate agents\". Duplicate queries are removed automatically. Businesses found by several queries appear only once.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "maxLength": 200,
            "type": "string",
            "description": "Where to search, e.g. \"Johannesburg, South Africa\". It is appended to every query as \"<query> in <location>\". Leave empty if your queries already contain a location."
          },
          "maxResultsPerQuery": {
            "title": "Max results per query",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of Google Maps results to collect for each search query. Google Maps typically shows up to about 120 results per search; use more specific queries or locations to find more businesses.",
            "default": 20
          },
          "includeReviews": {
            "title": "Extract reviews",
            "type": "boolean",
            "description": "Extract public Google Maps reviews and compute a deterministic sentiment score and recurring topics. Adds time per business. Google may not expose reviews to signed-out visitors (\"limited view\"); in that case reviews are reported as not available.",
            "default": false
          },
          "maxReviewsPerBusiness": {
            "title": "Max reviews per business",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of reviews to extract per business when review extraction is enabled.",
            "default": 10
          },
          "enrichWebsite": {
            "title": "Enrich from website",
            "type": "boolean",
            "description": "Visit each business's official website (as listed on Google Maps) to extract contact details, social profiles, description and services. When disabled, no websites are visited.",
            "default": true
          },
          "maxWebsitePages": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of pages crawled per website, including the homepage. Contact, about, team, services and locations pages are prioritized. robots.txt is respected.",
            "default": 5
          },
          "extractEmails": {
            "title": "Extract emails",
            "type": "boolean",
            "description": "Extract publicly displayed email addresses (mailto links and visible text) from the business website. Emails are validated, classified (general, sales, support, bookings, marketing, contact) and never guessed.",
            "default": true
          },
          "extractPhones": {
            "title": "Extract phones & WhatsApp from website",
            "type": "boolean",
            "description": "Extract additional phone numbers and WhatsApp click-to-chat links from the business website. The phone number shown on the Google Maps listing is always included.",
            "default": true
          },
          "includeSocialProfiles": {
            "title": "Extract social profiles",
            "type": "boolean",
            "description": "Extract Facebook, Instagram, LinkedIn, TikTok, YouTube and X/Twitter profiles that are explicitly linked from the official website. Profiles are never guessed.",
            "default": true
          },
          "extractContactPeople": {
            "title": "Extract contact people",
            "type": "boolean",
            "description": "Extract names and roles that the business itself publishes on its about, team, staff or contact pages (e.g. \"Jane Smith – Practice Manager\"). No people-search or third-party enrichment is performed.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of Google Maps pages processed in parallel. One browser serves 5 pages; allow about 1 GB of memory per 5 pages (default 10 → 4 GB). Higher values are faster at the same compute cost per lead but more likely to be rate-limited by Google.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy for Google Maps requests. The default automatic Apify Proxy (datacenter) worked in our tests and is not billed per GB. Switch to the RESIDENTIAL group (with the country of your searches) only if Google blocks the run or hides reviews.",
            "default": {
              "useApifyProxy": true
            }
          },
          "websiteProxyConfiguration": {
            "title": "Proxy for business websites",
            "type": "object",
            "description": "Proxy used only for fetching business websites. Default: no proxy — plain website pages are cheap to fetch directly and do not need residential bandwidth. Set a DATACENTER group if some websites block Apify IPs.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}