{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Scraper",
    "description": "Turn any Google Maps search into clean business leads: names, addresses, phones, websites, ratings, and hours. You only pay for the businesses returned. Add decision-maker contacts, verified work emails, and full Google reviews as paid add-ons. No proxies, no login.",
    "version": "1.0",
    "x-build-id": "IzTdALLGktigxgV15"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/atomus~google-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-atomus-google-maps-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/atomus~google-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-atomus-google-maps-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/atomus~google-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-atomus-google-maps-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": [
          "query"
        ],
        "properties": {
          "query": {
            "title": "🔍 Search query",
            "type": "string",
            "description": "What to search for on Google Maps, e.g. \"coffee shops\", \"dentist\", \"plumber\"."
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "Where to search, in Google's \"City,State,Country\" format, e.g. \"New York,New York,United States\" or \"Paris,Ile-de-France,France\". A country on its own also works (\"United States\", \"Germany\"). Use commas with NO spaces after them. Defaults to United States if left empty. Ignored when \"Location by coordinates\" is set. If a location isn't recognized you'll get a clear message and the run won't just fail."
          },
          "locationCoordinate": {
            "title": "🧭 Location by coordinates",
            "type": "string",
            "description": "Search around a point instead of a named place. Format: \"latitude,longitude,zoom\", e.g. \"40.7128,-74.0060,14z\" (zoom 3z to 21z, higher is tighter, default 17z). Overrides the Location field above. Free, same search cost."
          },
          "languageCode": {
            "title": "🌍 Language",
            "enum": [
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "ru",
              "tr",
              "ar",
              "id",
              "ja",
              "ko",
              "zh-CN",
              "zh-TW",
              "hi",
              "th",
              "vi",
              "sv"
            ],
            "type": "string",
            "description": "Language of the Google Maps search results. Free, same search cost. Defaults to English.",
            "default": "en"
          },
          "maxResults": {
            "title": "💯 Number of businesses to return",
            "minimum": 1,
            "maximum": 700,
            "type": "integer",
            "description": "How many businesses to return (1 to 700). We return exactly this many when Google has them, and you are billed per business returned. Google itself runs out of relevant local results for most searches well before 700, so asking for more than a city really has simply returns fewer, and you are not charged for businesses that don't exist.",
            "default": 20
          },
          "minRating": {
            "title": "⭐ Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only return businesses with at least this star rating (0 to 5). Businesses with no rating at all are also excluded."
          },
          "requireWebsite": {
            "title": "🌐 Only businesses with a website",
            "type": "boolean",
            "description": "Keep only businesses that have a website. Useful for building outreach lists, and required if you plan to use the contacts add-on below.",
            "default": false
          },
          "skipClosed": {
            "title": "🚫 Skip closed businesses",
            "type": "boolean",
            "description": "Exclude businesses marked closed or permanently closed.",
            "default": false
          },
          "exactMatch": {
            "title": "🎯 Exact name match",
            "type": "boolean",
            "description": "Keep only businesses whose name contains your exact search text (case-insensitive).",
            "default": false
          },
          "category": {
            "title": "🏷️ Category filter",
            "type": "string",
            "description": "Keep only businesses whose category matches this text, e.g. \"coffee shop\", \"restaurant\". Matches primary and secondary categories (case-insensitive). Keep in mind that Google's categories vary and businesses categorize themselves, so a category filter can exclude places you meant to keep."
          },
          "maxReviews": {
            "title": "⭐ How many reviews per business",
            "minimum": 0,
            "maximum": 4490,
            "type": "integer",
            "description": "Number of Google reviews to fetch for each business (0 turns the add-on off). Each review comes with its text, star rating, author, date, photos, and the owner's reply.",
            "default": 0
          },
          "reviewsSort": {
            "title": "↕️ Review sort order",
            "enum": [
              "newest",
              "highest_rating",
              "lowest_rating",
              "relevant"
            ],
            "type": "string",
            "description": "Which reviews you get when you ask for fewer than a business has. \"Newest first\" is the right choice for spotting recent complaints, \"Lowest rating first\" for finding the worst ones regardless of when they were written.",
            "default": "newest"
          },
          "recentBadReviewMaxRating": {
            "title": "🚩 Look for a bad review of this many stars or fewer",
            "enum": [
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Returns only the businesses that got a review of this many stars or fewer. Pick 1 star to find the ones that recently took a 1-star review.\n\nWe read only the bad reviews, and all of them, so none is missed: a business with 8 reviews of 2 stars or fewer gets all 8 read. A bad review that is the 150th most recent is still found.\n\nYou pay for the reviews read on every business that could match, not only on the ones that end up in your results, because reading them is what tells the two apart."
          },
          "recentBadReviewPeriod": {
            "title": "🚩 How far back to look",
            "enum": [
              "3m",
              "6m",
              "12m",
              "24m",
              "all"
            ],
            "type": "string",
            "description": "How recent the bad review has to be. Only used when the filter above is set. \"Any time\" is free and reads nothing; every other option reads the bad reviews of the businesses that could match.",
            "default": "6m"
          },
          "maxLeadsPerPlace": {
            "title": "👤 How many contacts per business",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Number of decision-makers to look for at each business (0 turns the add-on off). Only works for businesses that have a website, so pairing this with the \"Only businesses with a website\" filter above avoids wasting the search on places we can never enrich.",
            "default": 0
          },
          "leadSeniority": {
            "title": "🎖️ Contact seniority",
            "type": "array",
            "description": "Only look for people at these levels. Leave empty to accept any. To reach the owner of a small local business, pick Owner and Founder.",
            "items": {
              "type": "string",
              "enum": [
                "owner",
                "founder",
                "c_suite",
                "partner",
                "vp",
                "director",
                "head",
                "manager",
                "senior"
              ],
              "enumTitles": [
                "Owner",
                "Founder",
                "C-Suite (CEO/CTO/CFO…)",
                "Partner",
                "VP",
                "Director",
                "Head",
                "Manager",
                "Senior"
              ]
            }
          },
          "leadDepartment": {
            "title": "🗂️ Contact department",
            "type": "array",
            "description": "Only look for people in these departments. Leave empty to accept any.",
            "items": {
              "type": "string",
              "enum": [
                "sales",
                "marketing",
                "engineering",
                "information_technology",
                "operations",
                "finance",
                "human_resources",
                "legal",
                "business_development",
                "product_management",
                "customer_success_and_support",
                "accounting"
              ],
              "enumTitles": [
                "Sales",
                "Marketing",
                "Engineering",
                "Information Technology",
                "Operations",
                "Finance",
                "Human Resources",
                "Legal",
                "Business Development",
                "Product Management",
                "Customer Success & Support",
                "Accounting"
              ]
            }
          },
          "findLeadEmails": {
            "title": "✉️ Find and verify each contact's work email",
            "type": "boolean",
            "description": "Look up the work email of every contact found above, and verify it (each email comes back marked VALID or INVALID). Does nothing on its own: without \"How many contacts per business\" set above there is no person to find an email for, and nothing is charged.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}