{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Leads Scraper: Emails, Phones & Socials",
    "description": "Find local business leads on Google Maps by keyword and location: name, category, address, phone, website, rating, reviews, plus emails and social profiles from their websites and a lead score that flags no website, broken or slow sites, unclaimed profiles and few reviews.",
    "version": "1.0",
    "x-build-id": "wDoF7z7utvIDf2Icr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/northloop-labs~google-maps-leads-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-northloop-labs-google-maps-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/northloop-labs~google-maps-leads-scraper/runs": {
      "post": {
        "operationId": "runs-sync-northloop-labs-google-maps-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/northloop-labs~google-maps-leads-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-northloop-labs-google-maps-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",
        "required": [
          "searchTerms"
        ],
        "properties": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Business types or keywords, the way you would type them in Google Maps, e.g. \"dentist\", \"plumber\", \"italian restaurant\", \"marketing agency\". Each term is searched in each location.",
            "default": [
              "dentist"
            ],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, regions, postcodes or countries, e.g. \"Austin, TX\", \"Manchester, UK\", \"10115 Berlin\", \"Romania\". Add the country for small or ambiguous places. Leave empty to search the terms as typed (e.g. \"dentist near Times Square\").",
            "default": [
              "Bucharest, Romania"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerSearch": {
            "title": "Max leads per search",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Leads to save for each search term + location pair. Up to ~250 come from the normal Maps results list; above that the Actor scans the area as a grid of map tiles to find more. 0 = as many as possible.",
            "default": 20
          },
          "scrapeContacts": {
            "title": "Find emails and social profiles on websites",
            "type": "boolean",
            "description": "Visit each business website (homepage plus contact, about and imprint pages) to find emails, extra phone numbers and Facebook, Instagram, LinkedIn, X, TikTok, YouTube and Pinterest profiles, and to check the website (HTTPS, speed, mobile, platform, analytics). Charged only when at least one email or social profile is found.",
            "default": true
          },
          "maxPagesPerWebsite": {
            "title": "Pages per website",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Homepage plus up to this many minus one contact-like pages. 3 finds most emails; raise it for larger sites.",
            "default": 3
          },
          "websiteFilter": {
            "title": "Website filter",
            "enum": [
              "any",
              "with-website",
              "without-website"
            ],
            "type": "string",
            "description": "Skipped businesses are not charged.",
            "default": "any"
          },
          "minLeadScore": {
            "title": "Minimum lead opportunity score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Save only leads whose opportunity score (0-100, higher = more problems an agency can fix) is at least this. Skipped leads are not charged. Example: 35 keeps businesses with no website, a broken website or an unclaimed profile plus a few weaker signals.",
            "default": 0
          },
          "skipClosedPlaces": {
            "title": "Skip closed businesses",
            "type": "boolean",
            "description": "Leave out places Google marks as permanently or temporarily closed.",
            "default": true
          },
          "onlyNewPlaces": {
            "title": "Only new places since the last run",
            "type": "boolean",
            "description": "Remember which places each search has already returned (in a named key-value store on your account) and save only new ones. Great for a weekly schedule that finds newly opened businesses. The first run saves everything and sets the baseline.",
            "default": false
          },
          "stateStoreName": {
            "title": "Memory store name",
            "type": "string",
            "description": "Named key-value store that keeps the list of places already seen. Use a different name per client or campaign.",
            "default": "google-maps-leads-seen"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language for categories and opening hours, e.g. en, de, fr, es, ro.",
            "default": "en"
          },
          "deepSearch": {
            "title": "Grid search for large areas",
            "type": "boolean",
            "description": "When one results list is not enough, split the location into map tiles to find more places. Turn off to get only the main results list (faster).",
            "default": true
          },
          "lowReviewThreshold": {
            "title": "\"Few reviews\" below",
            "minimum": 0,
            "type": "integer",
            "description": "Businesses with fewer reviews than this get the few-reviews flag.",
            "default": 20
          },
          "lowRatingThreshold": {
            "title": "\"Low rating\" below",
            "enum": [
              "3.5",
              "4.0",
              "4.3",
              "4.5"
            ],
            "type": "string",
            "description": "Businesses rated below this get the low-rating flag.",
            "default": "4.0"
          },
          "countryCode": {
            "title": "Country code (only without a location)",
            "type": "string",
            "description": "2-letter country code used for Google Maps when Locations is empty or cannot be found, e.g. US, GB, DE."
          },
          "maxConcurrency": {
            "title": "Websites in parallel",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many business websites to check at the same time.",
            "default": 24
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy for Google Maps requests. The default (Apify residential) is included in the price.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "websiteProxyFallback": {
            "title": "Retry blocked websites through the proxy",
            "type": "boolean",
            "description": "Websites are visited directly. If a site refuses the connection, its homepage is retried once through the proxy.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}