{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Business Leads Scraper with Phone",
    "description": "Extract local businesses from Google Maps in any city, with phone, website, address, rating, review count, opening hours and coordinates. Filter only businesses with no website.",
    "version": "0.0",
    "x-build-id": "g4jguElwQyzTyqWQL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/incredible_expertise~google-maps-business-leads-scraper-with-phone/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-incredible_expertise-google-maps-business-leads-scraper-with-phone",
        "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/incredible_expertise~google-maps-business-leads-scraper-with-phone/runs": {
      "post": {
        "operationId": "runs-sync-incredible_expertise-google-maps-business-leads-scraper-with-phone",
        "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/incredible_expertise~google-maps-business-leads-scraper-with-phone/run-sync": {
      "post": {
        "operationId": "run-sync-incredible_expertise-google-maps-business-leads-scraper-with-phone",
        "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": {
          "categoryFilter": {
            "title": "Category contains (optional filter)",
            "type": "string",
            "description": "Optional (v0.10): only return businesses whose Google Maps category contains this text (case-insensitive), e.g. 'clinic' or 'dentist'. Filtered-out businesses are not charged."
          },
          "concurrency": {
            "title": "Parallel tabs (concurrency)",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many place pages to extract in parallel. Higher is faster but heavier and more likely to trip Google. Default 3.",
            "default": 3
          },
          "extractEmailsAndSocials": {
            "title": "Extract emails & socials from business websites (phase 2)",
            "type": "boolean",
            "description": "PHASE 2, OFF by default (v0.10): for each business WITH a website, visit ONLY its homepage (short per-site timeout, no deep crawling) and extract visible contact emails and social links (Instagram, Facebook, LinkedIn, WhatsApp, TikTok, X) into the new 'email' and 'socials' fields. Adds time to every business with a website; businesses without one simply get empty fields.",
            "default": false
          },
          "includeImages": {
            "title": "Include up to 3 place image URLs (phase 2)",
            "type": "boolean",
            "description": "PHASE 2, OFF by default (v0.10): include up to 3 image URLs from the place page in the 'images' field, if accessible. Empty list if none are accessible.",
            "default": false
          },
          "includeReviews": {
            "title": "Include up to 3 review snippets if present (phase 2)",
            "type": "boolean",
            "description": "PHASE 2, OFF by default (v0.10): include up to 3 recent review snippets per business in the 'reviews' field, ONLY if they are already present on the place page — no extra navigation is performed, so the field is often empty. Never slows down or blocks the run.",
            "default": false
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google Maps UI language code, e.g. 'en', 'es', 'pt-BR'. Affects field wording returned by Google. Tip: use 'es' for searches in Mexico/Spain so categories and labels come back in Spanish.",
            "default": "en"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City/region and country to search in. The pre-filled value is just an example — replace it with your city, e.g. 'Austin, Texas', 'Madrid, Spain', 'Guadalajara, Jalisco'. Ignored if locations is provided.",
            "default": "Mexicali, Baja California"
          },
          "locations": {
            "title": "Locations (multiple)",
            "type": "array",
            "description": "Optional: several locations in one run. Combined with every search term. If set, location is ignored.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum businesses to extract per search term x location (and cap for direct URLs). 120 is the real limit of a single Google Maps search — asking for more used to return ~120 silently. For larger pulls, split into several search terms/locations. Trying it out with 40 costs about $0.16. Large values need a higher Actor run timeout.",
            "default": 40
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Optional: only return businesses with at least this Google rating (e.g. 4.0). Businesses with no rating are excluded — except when this is 0, which means 'no minimum' and keeps them."
          },
          "minReviews": {
            "title": "Minimum reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Optional: only return businesses with at least this many Google reviews."
          },
          "onlyOpenNow": {
            "title": "Only businesses open now (best-effort)",
            "type": "boolean",
            "description": "Optional (v0.10): only return businesses open at the moment of extraction. Best-effort: read from the opening-hours summary line shown on the place page (English/Spanish); businesses whose line is unclear are excluded. Filtered-out businesses are not charged.",
            "default": false
          },
          "onlyWithoutWebsite": {
            "title": "Only businesses WITHOUT a website",
            "type": "boolean",
            "description": "If enabled, only returns businesses that do NOT have a website: prime leads for web-design and marketing agencies. Filtered-out businesses are not charged.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Standard Apify Proxy settings. Default: Apify Proxy with no groups (datacenter IPs). For large runs, or if Google shows a captcha, select the RESIDENTIAL group here — residential costs more per GB, so it is never forced. Turn Apify Proxy off to run without a proxy.",
            "default": {
              "useApifyProxy": true
            }
          },
          "requirePhone": {
            "title": "Only businesses WITH a phone number",
            "type": "boolean",
            "description": "If enabled, only returns businesses that list a phone number on Google Maps. Filtered-out businesses are not charged.",
            "default": false
          },
          "searchTerm": {
            "title": "Search term",
            "type": "string",
            "description": "Type of business to search for. The pre-filled value is just a ready-to-run example — replace it with what you need, e.g. 'dentists', 'taquerias', 'auto repair shops', 'hotels'. Ignored if searchTerms is provided.",
            "default": "dentists"
          },
          "searchTerms": {
            "title": "Search terms (multiple)",
            "type": "array",
            "description": "Optional: several search terms in one run. Combined with every location (term x location). If set, searchTerm is ignored.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Direct Google Maps place URLs",
            "type": "array",
            "description": "Optional: extract these Google Maps place URLs directly, without searching. If you provide ONLY URLs and leave the search fields at their example defaults, no search is run. Combine with a changed search term/location to run both.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}