{
  "openapi": "3.0.1",
  "info": {
    "title": "Reviews Scraper for Google Maps - Full History & Replies",
    "description": "Scrape Google Maps reviews for any place, full history up to 4,490 per place: text, stars, reviewer, dates, owner replies, photos and detailed ratings, plus Google's total and a scorecard per place. Give it a place URL, a place ID or a search term.",
    "version": "0.1",
    "x-build-id": "WqHuq31dDB1JtO1S7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~google-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-google-reviews-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/scrapesage~google-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-google-reviews-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/scrapesage~google-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-google-reviews-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": {
          "placeUrls": {
            "title": "Place URLs or IDs",
            "type": "array",
            "description": "The places to pull reviews for. Accepts a Google Maps place URL, a share link, a place ID (`ChIJ...`), a `place_id:...` string, a feature ID (`0x...:0x...`) or a CID. One per row.",
            "items": {
              "type": "string"
            }
          },
          "urlsFromFile": {
            "title": "Import places from a file",
            "type": "string",
            "description": "Bulk import. Paste a block of place URLs or IDs (one per line), **or** paste a single link to a `.txt` / `.csv` / Google Sheet / Google Drive / Apify key-value-store file holding them."
          },
          "searchTerms": {
            "title": "Search terms (find places by name)",
            "type": "array",
            "description": "Find places on Google Maps and pull their reviews. Use this when you do not have the URL. Example: `dentist`, `Blue Bottle Coffee`.",
            "items": {
              "type": "string"
            }
          },
          "searchLocation": {
            "title": "Search location",
            "type": "string",
            "description": "City or area to centre the search on, e.g. `Austin, TX`. Only used with *Search terms*."
          },
          "maxPlacesPerSearchTerm": {
            "title": "Places per search term",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many matching places to take reviews from, for each search term.",
            "default": 3
          },
          "maxReviewsPerPlace": {
            "title": "Max reviews per place",
            "minimum": 1,
            "type": "integer",
            "description": "How many reviews to deliver per place, up to 4,490 (Google's whole list for most places). You pay for the reviews a place really has, not the number you ask for: ask for 1,000 from a place with 12 reviews and you get 12.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "relevance",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "The order reviews are read in. A high \"Max reviews per place\" with *Newest* gives you the most recent history. Monitor mode and \"Reviews newer than\" always read newest first.",
            "default": "newest"
          },
          "ratings": {
            "title": "Star ratings",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these star ratings. Leave empty for all. From 20 November 2026, a review a filter removes costs the lower Filtered-out review price, shown on the Pricing tab; until then filter runs read the first 5 reviews of each place. Tip: with *Lowest rating* or *Highest rating* sorting, a star filter reads far fewer reviews.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star - critical (1)",
                "2 stars (2)",
                "3 stars (3)",
                "4 stars (4)",
                "5 stars - promoters (5)"
              ]
            }
          },
          "containsText": {
            "title": "Review text contains",
            "type": "string",
            "description": "Keep only reviews whose text contains this phrase (case-insensitive, original or translated text), e.g. `parking`, `rude`, `wait`."
          },
          "onlyWithOwnerReply": {
            "title": "Only reviews with an owner reply",
            "type": "boolean",
            "description": "Keep only reviews the business publicly answered: the fastest way to study how a competitor handles complaints.",
            "default": false
          },
          "onlyWithText": {
            "title": "Only reviews with text",
            "type": "boolean",
            "description": "Leave out reviews that have stars but no written text.",
            "default": false
          },
          "reviewsNewerThan": {
            "title": "Reviews newer than",
            "type": "string",
            "description": "Keep only reviews from this date on: a date such as `2026-01-31`, or a moving window such as `90 days`, `6 months`, `1 year` (best for schedules). Reads newest first and stops at the date. Older reviews are not charged."
          },
          "maxReviewsToCheck": {
            "title": "Max reviews to check per place (with a filter on)",
            "minimum": 10,
            "maximum": 4490,
            "type": "integer",
            "description": "With a star, text or owner-reply filter on, how far to read through a place looking for matches. A lower number costs less on places with few matches.",
            "default": 1000
          },
          "includeReviews": {
            "title": "Include the reviews",
            "type": "boolean",
            "description": "On by default: one row per review.",
            "default": true
          },
          "includePlaceSummary": {
            "title": "Include a place summary row",
            "type": "boolean",
            "description": "Adds one `place` row per place: overall score, Google's total review count, address, category, phone and website, plus a scorecard worked out from the reviews this run read (reply rate, recent against older stars, how much of the list was read). Charged as `place`.",
            "default": true
          },
          "includePlaceProfile": {
            "title": "Add the full place profile (optional)",
            "type": "boolean",
            "description": "Adds to the `place` row: Google's own count of 1 to 5 star reviews, the topics customers mention and how often, whether the listing is claimed, opening hours and address parts. Charged once per place as Place profile, starting 20 November 2026.",
            "default": false
          },
          "outputFields": {
            "title": "Output fields",
            "uniqueItems": true,
            "type": "array",
            "description": "Trim the export to just these columns. Leave empty for every field.",
            "items": {
              "type": "string",
              "enum": [
                "type",
                "reviewId",
                "reviewUrl",
                "placeName",
                "placeId",
                "placeCid",
                "featureId",
                "placeAddress",
                "rating",
                "text",
                "textLength",
                "originalLanguage",
                "publishedAtDate",
                "updatedAtDate",
                "publishedAtText",
                "reviewerName",
                "reviewerId",
                "reviewerUrl",
                "reviewerPhotoUrl",
                "reviewerNumberOfReviews",
                "reviewerNumberOfPhotos",
                "isLocalGuide",
                "localGuideLevel",
                "reviewerBadge",
                "reviewSource",
                "reviewDetailedRating",
                "photoCount",
                "photos",
                "photoUrls",
                "hasOwnerReply",
                "ownerReplyText",
                "ownerReplyDate",
                "ownerReplyText_relative",
                "ownerReplyLanguage",
                "scrapedAt",
                "placeCategory",
                "totalScore",
                "reviewsCount",
                "phone",
                "website",
                "latitude",
                "longitude",
                "reviewsFetched",
                "reviewsDistribution",
                "reviewsDistributionPercent",
                "reviewsDistributionBasis",
                "placeUrl",
                "textTranslated",
                "translatedLanguage",
                "isEdited",
                "ratingFood",
                "ratingService",
                "ratingAtmosphere",
                "ratingRooms",
                "ratingLocation",
                "pricePerPerson",
                "orderType",
                "mealType",
                "waitTime",
                "noiseLevel",
                "groupSize",
                "tripType",
                "travelGroup",
                "ownerReplyTextTranslated",
                "ownerReplyDateIsExact",
                "rank",
                "sortedBy",
                "placeScore",
                "placeReviewsCount",
                "placeLatitude",
                "placeLongitude",
                "storedExample",
                "reviewsRead",
                "reviewsCountIsExact",
                "scorecardBasedOn",
                "scorecardBasis",
                "avgRatingRead",
                "ownerReplyRatePct",
                "withTextPct",
                "withPhotosPct",
                "localGuidePct",
                "latestReviewAt",
                "reviewsLast30Days",
                "reviewsLast90Days",
                "reviewsLast365Days",
                "avgRatingLast90Days",
                "avgRatingBefore90Days",
                "ratingChange90Days",
                "coveragePct",
                "stars1",
                "stars2",
                "stars3",
                "stars4",
                "stars5",
                "reviewTopics",
                "topReviewTopics",
                "isClaimed",
                "openingHours",
                "businessStatus",
                "addressStreet",
                "city",
                "postalCode",
                "region",
                "borough",
                "countryCode",
                "additionalCategories",
                "totalPhotos",
                "hotelStars",
                "placeDescription",
                "websiteDomain",
                "bookingUrl",
                "logoUrl",
                "mainImageUrl"
              ],
              "enumTitles": [
                "Row type - review or place (type)",
                "Review ID (reviewId)",
                "Direct link to the review (reviewUrl)",
                "Place name (placeName)",
                "Google place ID (placeId)",
                "Google CID (placeCid)",
                "Google feature ID (featureId)",
                "Place address (placeAddress)",
                "Star rating (1-5) (rating)",
                "Review text (text)",
                "Review text length (textLength)",
                "Language the review was written in (originalLanguage)",
                "Published at (exact date) (publishedAtDate)",
                "Last edited at (exact date) (updatedAtDate)",
                "Published at (as Google shows it) (publishedAtText)",
                "Reviewer name (reviewerName)",
                "Reviewer ID (reviewerId)",
                "Reviewer profile link (reviewerUrl)",
                "Reviewer photo (reviewerPhotoUrl)",
                "Reviews written by this reviewer (reviewerNumberOfReviews)",
                "Photos posted by this reviewer (reviewerNumberOfPhotos)",
                "Reviewer is a Local Guide (isLocalGuide)",
                "No longer filled (it was never a real level) (localGuideLevel)",
                "Reviewer badge line (reviewerBadge)",
                "Review source (reviewSource)",
                "Detailed ratings (food, service, ...) (reviewDetailedRating)",
                "Number of review photos (photoCount)",
                "Review photos (full detail) (photos)",
                "Review photo links (photoUrls)",
                "Has an owner reply (hasOwnerReply)",
                "Owner reply text (ownerReplyText)",
                "Owner replied at (exact date) (ownerReplyDate)",
                "Owner replied at (as Google shows it) (ownerReplyText_relative)",
                "Owner reply language (ownerReplyLanguage)",
                "Scraped at (scrapedAt)",
                "Place category (placeCategory)",
                "Overall star score (totalScore)",
                "Total reviews on Google (reviewsCount)",
                "Phone (phone)",
                "Website (website)",
                "Latitude (latitude)",
                "Longitude (longitude)",
                "Reviews collected by this run (reviewsFetched)",
                "Star histogram (counts) (reviewsDistribution)",
                "Star histogram (percent) (reviewsDistributionPercent)",
                "What the histogram is based on (reviewsDistributionBasis)",
                "Place link (placeUrl)",
                "Review text, translated (textTranslated)",
                "Translated into (translatedLanguage)",
                "The reviewer edited this review (isEdited)",
                "Food rating (1-5) (ratingFood)",
                "Service rating (1-5) (ratingService)",
                "Atmosphere rating (1-5) (ratingAtmosphere)",
                "Rooms rating (1-5) (ratingRooms)",
                "Location rating (1-5) (ratingLocation)",
                "Price per person (pricePerPerson)",
                "Order type (orderType)",
                "Meal type (mealType)",
                "Wait time (waitTime)",
                "Noise level (noiseLevel)",
                "Group size (groupSize)",
                "Trip type (tripType)",
                "Travel group (travelGroup)",
                "Owner reply, translated (ownerReplyTextTranslated)",
                "Owner reply date is exact (false = worked out from \"2 months ago\") (ownerReplyDateIsExact)",
                "Position in the sort order (rank)",
                "Sort order used (sortedBy)",
                "Overall star score of the place (placeScore)",
                "Total reviews of the place on Google (placeReviewsCount)",
                "Place latitude (placeLatitude)",
                "Place longitude (placeLongitude)",
                "Stored example row, not charged (storedExample)",
                "Reviews read by this run (reviewsRead)",
                "Total is Google's own or was counted to the end (reviewsCountIsExact)",
                "Scorecard: reviews it is based on (scorecardBasedOn)",
                "Scorecard: which reviews (scorecardBasis)",
                "Scorecard: average stars of the reviews read (avgRatingRead)",
                "Scorecard: owner reply rate (%) (ownerReplyRatePct)",
                "Scorecard: reviews with text (%) (withTextPct)",
                "Scorecard: reviews with photos (%) (withPhotosPct)",
                "Scorecard: reviews by Local Guides (%) (localGuidePct)",
                "Scorecard: newest review (latestReviewAt)",
                "Scorecard: reviews in the last 30 days (reviewsLast30Days)",
                "Scorecard: reviews in the last 90 days (reviewsLast90Days)",
                "Scorecard: reviews in the last 365 days (reviewsLast365Days)",
                "Scorecard: average stars, last 90 days (avgRatingLast90Days)",
                "Scorecard: average stars, before that (avgRatingBefore90Days)",
                "Scorecard: change in stars, last 90 days against before (ratingChange90Days)",
                "Scorecard: share of Google's total that was read (%) (coveragePct)",
                "Profile: 1-star reviews on Google (stars1)",
                "Profile: 2-star reviews on Google (stars2)",
                "Profile: 3-star reviews on Google (stars3)",
                "Profile: 4-star reviews on Google (stars4)",
                "Profile: 5-star reviews on Google (stars5)",
                "Profile: topics customers mention, with counts (reviewTopics)",
                "Profile: top topics, as text (topReviewTopics)",
                "Profile: listing is claimed (isClaimed)",
                "Profile: opening hours (openingHours)",
                "Profile: open or closed now (businessStatus)",
                "Profile: street address (addressStreet)",
                "Profile: city (city)",
                "Profile: postal code (postalCode)",
                "Profile: state or region (region)",
                "Profile: borough (borough)",
                "Profile: country code (countryCode)",
                "Profile: other categories (additionalCategories)",
                "Profile: photos on the listing (totalPhotos)",
                "Profile: hotel stars (hotelStars)",
                "Profile: description (placeDescription)",
                "Profile: website domain (websiteDomain)",
                "Profile: booking link (bookingUrl)",
                "Profile: logo (logoUrl)",
                "Profile: main image (mainImageUrl)"
              ]
            }
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "The language reviews are shown in: Google translates reviews written in another language, and the original stays in `text` with the translation in `textTranslated`. Use a code such as `en`, `es`, `de`, `pt-BR`.",
            "default": "en"
          },
          "countryCode": {
            "title": "Country",
            "type": "string",
            "description": "Two-letter country Google should serve on search terms and the first reviews, e.g. `us`, `gb`, `de`. It does not change which reviews a place has.",
            "default": "us"
          },
          "monitorMode": {
            "title": "Monitor mode - only new reviews",
            "type": "boolean",
            "description": "Remembers review IDs between runs and delivers only reviews it has not seen, newest first. Pair with an Apify Schedule to watch a location. A check that finds nothing new costs no review. From 20 November 2026 it also reads past the first 5 reviews when all 5 are new; reviews it then reads again are charged at the lower Filtered-out review price.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store holding the remembered review IDs. Use a different name per tracked place set.",
            "default": "google-reviews-monitor"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many places to look up at the same time. Long lists keep moving while full reviews are being read, so the default suits most runs.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy, used for the first lookups. The datacenter pool that ships with every plan is enough: this Actor does not need residential traffic.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}