{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper — Local Business Leads & GBP Gaps",
    "description": "Scrape Google Maps businesses with name, address, phone, website, categories, rating, hours and coordinates, plus a missing-fields audit of each Business Profile. Filter to businesses with no website, no phone or an incomplete profile, so you get a qualified prospect list, not a place dump.",
    "version": "1.0",
    "x-build-id": "hvrYhICVSRI8wdnab"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mochiboo~google-maps-local-business-leads/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mochiboo-google-maps-local-business-leads",
        "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/mochiboo~google-maps-local-business-leads/runs": {
      "post": {
        "operationId": "runs-sync-mochiboo-google-maps-local-business-leads",
        "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/mochiboo~google-maps-local-business-leads/run-sync": {
      "post": {
        "operationId": "run-sync-mochiboo-google-maps-local-business-leads",
        "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": "What to search on Google Maps. Put the place in the term itself (\"dentist in Austin, TX\") unless you also supply coordinates below. At least one non-blank term is required. Each term is paginated independently and Max results is shared evenly, row by row, across all of your terms (five terms at a cap of 8 return 2, 2, 2, 1 and 1 rows).",
            "default": [
              "auto repair in El Paso, TX"
            ],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (optional)",
            "type": "array",
            "description": "Optional map viewports to run every search term against, as [{\"latitude\": 33.5779, \"longitude\": -101.8552, \"radiusKm\": 5}]. Use this to sweep a grid of neighbourhoods with one generic term. Leave empty to let the search term carry the location. If you give locations, at least one must have valid coordinates or the run fails with a message. In a grid run, searchRank restarts in every cell.",
            "default": []
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of businesses written to the dataset, counted AFTER the filters below. One search term ended at 196, 215 and 221 unique businesses in three live tests (242, 260 and 241 results including repeats), so scale by adding terms or locations, not by raising this alone. For lead generation set this to 100 or more: incomplete profiles are concentrated deeper in the results, not on page one.",
            "default": 20
          },
          "country": {
            "title": "Country (2-letter code)",
            "type": "string",
            "description": "Country the search is run from, as a 2-letter code: us, gb, de, sg. Changes which businesses Google returns and how addresses are formatted. Anything that is not a 2-letter code fails the run with a message.",
            "default": "us"
          },
          "language": {
            "title": "Language (2-letter code)",
            "type": "string",
            "description": "Language for names, categories and opening-hours text, as a 2-letter code: en, de, fr. Anything that is not a 2-letter code fails the run with a message.",
            "default": "en"
          },
          "onlyMissingWebsite": {
            "title": "Only businesses with NO website",
            "type": "boolean",
            "description": "Keep only businesses whose Google Business Profile has no website link. In a live test of 140 listings across seven local trades, 30% had no website (from 0 to 12 of the first 20 results, depending on trade and city). Note that some of these still have a booking page or Facebook link, which is reported separately in otherLinks.",
            "default": false
          },
          "onlyMissingPhone": {
            "title": "Only businesses with NO phone number",
            "type": "boolean",
            "description": "Keep only businesses with no phone number on the profile. This is rare (4% of a 140-listing live test, 9% of one 196-listing run), so the run scans many result pages per row delivered.",
            "default": false
          },
          "minMissingFields": {
            "title": "Minimum missing profile fields",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only businesses missing at least this many of: website, phone, today's hours, logo, rating. 0 keeps everything. 2 or more is a strong 'neglected profile' signal.",
            "default": 0
          },
          "maxRating": {
            "title": "Maximum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only businesses rated at or below this (whole stars, 1-5). 0 disables the ceiling. Businesses with no rating at all are always kept, since that is the strongest neglect signal this data exposes.",
            "default": 0
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only businesses rated at or above this (whole stars, 1-5). 0 disables the floor. Unlike the ceiling, this DOES drop unrated businesses.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Requests go through Apify Proxy and each retry takes a fresh proxy session. The default datacenter pool fetched all 175 result pages in our test runs without a failure; switch to RESIDENTIAL if you see failed pages at high volume.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}