{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper & Email Extractor: Phone Numbers, B2B Leads",
    "description": "Google Maps scraper, email extractor & Google Places scraper for local business leads and B2B leads: emails, phone numbers, websites, Instagram/Facebook, ratings, hours. Any city, ZIP code, postcode, county or country, radius or GeoJSON. No 120-result limit. $0.50 per 1,000 places, all included.",
    "version": "1.0",
    "x-build-id": "lxsjNAdOFmW4IjEdT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fit_melon~google-maps-scraper-cheap/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fit_melon-google-maps-scraper-cheap",
        "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/fit_melon~google-maps-scraper-cheap/runs": {
      "post": {
        "operationId": "runs-sync-fit_melon-google-maps-scraper-cheap",
        "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/fit_melon~google-maps-scraper-cheap/run-sync": {
      "post": {
        "operationId": "run-sync-fit_melon-google-maps-scraper-cheap",
        "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": [
          "maxPlaces"
        ],
        "properties": {
          "searchStringsArray": {
            "title": "🔎 Search terms",
            "type": "array",
            "description": "What to search on Google Maps, e.g. \"restaurant\", \"plumber\", \"dentist\". One search per term. Combine with a location below, or put the place in the term itself (\"bakery in Lyon\").",
            "items": {
              "type": "string"
            }
          },
          "locationQuery": {
            "title": "📍 Location (city, postal code, county, region, country…)",
            "type": "string",
            "description": "Where to search, in plain text: \"Lyon\", \"75011\", \"Haute-Savoie\", \"Bavaria\", \"Belgium\". The exact administrative boundary is used (OpenStreetMap) and covered with an adaptive grid, so you get places from the whole area — far beyond Google's ~120 results per search."
          },
          "locations": {
            "title": "📍 More locations (one per line)",
            "type": "array",
            "description": "Search several cities, postcodes or regions in one run. Each search term is run in each location; maxPlaces applies per term and location.",
            "items": {
              "type": "string"
            }
          },
          "maxPlaces": {
            "title": "Max places per search term (and per location)",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum number of places returned for each search term in each location. You pay only for places actually returned ($0.0005 each).",
            "default": 100
          },
          "scrapeContacts": {
            "title": "📧 Emails & social profiles (included)",
            "type": "boolean",
            "description": "Visit each place's website (home + contact page) to extract emails and Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest profiles. Included in the price — no add-on fee.",
            "default": true
          },
          "checkEmails": {
            "title": "Check email domains (included)",
            "type": "boolean",
            "description": "Check that each email's domain can receive mail (DNS MX lookup, no message is ever sent) and add emailStatus and emailChecks. Emails whose domain cannot receive mail are removed from email and emails, and stay listed in emailChecks. Included in the price.",
            "default": true
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of the results (categories, opening hours), e.g. en, fr, de, es, it, nl, pt.",
            "default": "en"
          },
          "countryCode": {
            "title": "Country code (optional)",
            "type": "string",
            "description": "Two-letter country code to bias results (e.g. fr, us, de). Leave empty for automatic."
          },
          "lat": {
            "title": "Latitude (optional)",
            "type": "number",
            "description": "Search center latitude. Use with longitude and radius instead of a text location."
          },
          "lng": {
            "title": "Longitude (optional)",
            "type": "number",
            "description": "Search center longitude."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0.2,
            "maximum": 200,
            "type": "number",
            "description": "Search radius around the center (coordinates or text location). Default: 5 km for coordinates, automatic for text locations."
          },
          "customGeolocation": {
            "title": "🗺️ Custom area (GeoJSON)",
            "type": "object",
            "description": "Draw your own area: a GeoJSON Polygon or MultiPolygon ([lng, lat] coordinates), or a Point with \"radiusKm\". Example: {\"type\":\"Point\",\"coordinates\":[2.3522,48.8566],\"radiusKm\":3}. Takes priority over the text location."
          },
          "startUrls": {
            "title": "Google Maps URLs",
            "type": "array",
            "description": "Google Maps place URLs (…/maps/place/…) or search URLs (…/maps/search/…). Place URLs return that single place.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "placeIds": {
            "title": "Place IDs",
            "type": "array",
            "description": "Google place IDs (\"ChIJ…\"), one per line.",
            "items": {
              "type": "string"
            }
          },
          "minRating": {
            "title": "⭐ Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only return places rated at least this value (e.g. 4.0). Unrated places are excluded when set. 0 = no filter.",
            "default": 0
          },
          "website": {
            "title": "🌐 Website",
            "enum": [
              "allPlaces",
              "withWebsite",
              "withoutWebsite"
            ],
            "type": "string",
            "description": "Keep all places, only places with a website, or only places WITHOUT a website (great to find businesses that need one).",
            "default": "allPlaces"
          },
          "categoryFilterWords": {
            "title": "🏷️ Category filter",
            "type": "array",
            "description": "Keep only places whose Google category contains one of these words (e.g. \"pizza\", \"dentist\"). Leave empty for no filter.",
            "items": {
              "type": "string"
            }
          },
          "searchMatching": {
            "title": "🔤 Place name must match the search term",
            "enum": [
              "all",
              "only_includes",
              "only_exact"
            ],
            "type": "string",
            "description": "Keep all places, only places whose name contains the search term (e.g. \"Starbucks\" for a chain), or only places whose name is exactly the search term. Case and accents are ignored.",
            "default": "all"
          },
          "areaFilter": {
            "title": "🏙️ Only in these areas",
            "type": "array",
            "description": "Keep only places located in one of these cities, postal codes (a prefix like \"69\" works), counties, regions or neighborhoods. Exact names; case and accents are ignored. Example: search \"Rhône\" but keep only [\"Villeurbanne\", \"Bron\"].",
            "items": {
              "type": "string"
            }
          },
          "skipClosedPlaces": {
            "title": "Skip closed places",
            "type": "boolean",
            "description": "Do not return places that are temporarily or permanently closed.",
            "default": false
          },
          "completeDetails": {
            "title": "Complete missing details",
            "type": "boolean",
            "description": "When a search result lacks the reviews count or the full week of opening hours, open the place page to complete it. Included in the price.",
            "default": true
          },
          "scrapeBusinessDescription": {
            "title": "Business description (from the owner)",
            "type": "boolean",
            "description": "Add businessDescription, the text written by the business on its Google profile (\"From the business\"). Opens each place page, so runs take about twice as long. Included in the price.",
            "default": false
          },
          "scrapeReviewsTags": {
            "title": "Review topics (reviewsTags)",
            "type": "boolean",
            "description": "Add reviewsTags, the topics Google extracts from reviews with the number of reviews mentioning each one (e.g. \"terrace\": 42). Opens each place page (shared with the business description option), so runs take about twice as long. Included in the price.",
            "default": false
          },
          "scrapeOrderProviders": {
            "title": "Delivery and pickup providers (orderBy)",
            "type": "boolean",
            "description": "Add orderBy, the providers listed on the place's Google \"Order online\" page (Uber Eats, Deliveroo, DoorDash, own website...), each with its link and whether it offers delivery or pickup. Opens one more page for each place that takes orders online. Included in the price.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Parallel requests. The default is safe and fast.",
            "default": 20
          },
          "residentialFallback": {
            "title": "Residential proxy fallback",
            "type": "boolean",
            "description": "If Google blocks datacenter IPs, retry the request through Apify residential proxies (included in the price, limited per run).",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Included in the price. Google is reached through Apify datacenter proxies; residential proxies are only used as a limited automatic fallback (choosing residential here does not change that). Custom proxy URLs are used as given.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}