{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps API - Places, Reviews, Emails & Leads",
    "description": "Google Maps API and Google Maps scraper, no Google API key: search places by keyword and city, or by URL / place ID. Phone, website, rating, hours, reviews and website emails for local business leads. Places API alternative, $2.80 per 1,000 places.",
    "version": "1.0",
    "x-build-id": "Emop1FQfIoJD8C6l4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pnda~google-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pnda-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/pnda~google-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-pnda-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/pnda~google-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-pnda-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",
        "properties": {
          "searchQueries": {
            "title": "Search terms",
            "type": "array",
            "description": "What you would type in Google Maps, one per line (e.g. \"dentist\", \"coffee shop\", \"plumber\"). Each term is combined with the location below. Duplicates are removed.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region or country to search in (e.g. \"Paris, France\", \"Austin, TX\"). Leave empty if your search terms already contain the place."
          },
          "maxResultsPerSearch": {
            "title": "Max places per search term",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Google Maps shows up to about 120 places per search. You are billed per place delivered.",
            "default": 20
          },
          "onlyNew": {
            "title": "Only new places (skip what you already got)",
            "type": "boolean",
            "description": "Skip the places you already received from this Actor in previous runs (same Apify account, last 12 months) and keep searching until you have \"Max places per search\" NEW ones. Example: you got 20 bakeries yesterday, run again with 20 and onlyNew to get 20 more, no duplicate. Places skipped are never charged.",
            "default": false
          },
          "phoneType": {
            "title": "Phone type",
            "enum": [
              "any",
              "mobile",
              "landline"
            ],
            "type": "string",
            "description": "Keep only the places whose phone is a mobile (SMS / WhatsApp campaigns) or a landline (calls), from the official numbering plan of each country. In the US and Canada a number does not tell mobile from landline: those places are kept with phoneType \"mobile-or-landline\". Places skipped are never charged. Every place gets phoneE164 and phoneType.",
            "default": "any"
          },
          "placeUrls": {
            "title": "Google Maps place URLs or place IDs (optional)",
            "type": "array",
            "description": "Get specific places directly: a Google Maps place URL, a place_id (ChIJ...) or a CID. Billed as \"place details\" (one lookup per place).",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerPlace": {
            "title": "Reviews per place",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "0 = no reviews. Otherwise the latest reviews (text, rating, date, author, owner response) are added to each place. Billed per review.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Reviews order",
            "enum": [
              "newestFirst",
              "qualityScore",
              "ratingHigh",
              "ratingLow"
            ],
            "type": "string",
            "description": "Which reviews come first.",
            "default": "newestFirst"
          },
          "scrapeEmails": {
            "title": "Find emails on the website",
            "type": "boolean",
            "description": "Visit each place's website (homepage and contact page) and return the public email addresses found. Billed only when at least one email is found.",
            "default": false
          },
          "verifyEmails": {
            "title": "Verify emails (SMTP)",
            "type": "boolean",
            "description": "Only with \"Find emails on the website\". Checks each email found with the mail server (SMTP, no message sent) and adds \"email\" (the verified address, listed first) and \"email_status\": found (valid), catch-all, invalid, unknown, or unverified when the check could not run. No extra charge: contact details are billed exactly as without this option.",
            "default": false
          },
          "coordinates": {
            "title": "Map center (optional)",
            "type": "string",
            "description": "Center the search on exact GPS coordinates: \"latitude,longitude[,zoom]\", e.g. \"48.8566,2.3522,14\"."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of the results (Google hl code: en, fr, de, es, it, pt-BR...).",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Two-letter country code of the Google version to use (us, gb, fr, de...).",
            "default": "us"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}