Nimbryxo Studio

Google Maps Review & Contributor Activity Scraper

Get reviews for any Google Maps business or place, or switch to author mode to pull everything one Google reviewer has written. Includes ratings, review text, dates, likes, and owner replies.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringoptionalReviews of places you list, reviews of places found by a search, or everything specific Google reviewers have published.
placeUrlsarrayoptionalGoogle Maps place links or IDs, one per line. Accepted: place links (also shared maps.app.goo.gl, goo.gl, g.page and share.google links, ?cid= links and review links), Place IDs starting with ChIJ, feature IDs like 0x89c259ab3c1ef289:0x3b67a41175949f55 and numeric CIDs. Used when collecting reviews of specific places.
searchQueriesarrayoptionalGoogle Maps searches such as "dentists in Austin, TX" or "ramen Shibuya Tokyo". Include a city or area in each search. Used when finding places by search.
Show all input fields
FieldTypeRequiredDescription
modestringoptionalReviews of places you list, reviews of places found by a search, or everything specific Google reviewers have published.
placeUrlsarrayoptionalGoogle Maps place links or IDs, one per line. Accepted: place links (also shared maps.app.goo.gl, goo.gl, g.page and share.google links, ?cid= links and review links), Place IDs starting with ChIJ, feature IDs like 0x89c259ab3c1ef289:0x3b67a41175949f55 and numeric CIDs. Used when collecting reviews of specific places.
searchQueriesarrayoptionalGoogle Maps searches such as "dentists in Austin, TX" or "ramen Shibuya Tokyo". Include a city or area in each search. Used when finding places by search.
maxPlacesPerQueryintegeroptionalHow many places to take from each search. One Google search lists about 120 to 360 places; when you ask for more, the actor also searches sub-areas of the same region to reach them.
contributorUrlsarrayoptionalGoogle Maps reviewer profile links (for example https://www.google.com/maps/contrib/108763873723673205857, or a shared maps.app.goo.gl profile link) or numeric reviewer IDs. Used when collecting everything specific reviewers have written.
maxReviewsintegeroptionalUpper limit of reviews collected for each place, or for each reviewer. Google publishes up to 200 contributions per reviewer.
sortBystringoptionalOrder of a place's reviews. Newest first and most relevant reach a place's complete review history; Google lists at most 188 reviews per star level in rating order.
languagestringoptionalLanguage of Google Maps labels such as "2 weeks ago". Reviews written in another language also come with Google's translation into this language.
reviewsNewerThanstringoptionalKeep reviews dated on or after this day, for example 2026-01-01, or a period such as 30 days. Reviews are then read newest first.
reviewsOlderThanstringoptionalKeep reviews dated on or before this day. Combine with "Only reviews from" for a date range.
keywordstringoptionalWords a review must mention, for example "parking" or "long wait". For places this uses Google's own review search, which also matches close word forms.
starRatingsarrayoptionalKeep only reviews with these star ratings. Leave empty for all ratings.
onlyWithTextbooleanoptionalSkip star-only reviews that have no written text.
ownerReplyFilterstringoptionalKeep all reviews, only reviews the business replied to, or only reviews still without a reply.
onlyWithPhotosbooleanoptionalKeep only reviews that include photos or videos.
reviewLanguagesarrayoptionalKeep only reviews written in these languages, as two-letter codes such as en, es, ko. Leave empty for all languages.
monitoringKeystringoptionalGive scheduled runs the same name, for example my-restaurants. Each run then returns only reviews added or edited since the previous run with that name.
includePlaceSummarybooleanoptionalAdds one record per place with its rating breakdown by stars, review topics, location, contact details and how many reviews were collected. These records have recordType "place".
includeContributorSummarybooleanoptionalAdds one record per reviewer with their Local Guide level, points and lifetime contribution counts. These records have recordType "contributor".
includeReviewerDetailsbooleanoptionalTurn off to leave out reviewer names, profile pictures, profile links and reviewer IDs from place reviews.
enrichReviewerProfilesbooleanoptionalFor place reviews, also open each reviewer's public profile to add likes, first-published and edited dates, view counts, owner-reply dates and the reviewer's Local Guide level. Adds one request per reviewer. Reviews by private profiles, or older than a reviewer's 200 most recent contributions, keep the standard fields.
includePartnerReviewsbooleanoptionalHotels on Google Maps also show reviews from partner sites such as Tripadvisor, Trip.com or Priceline. Turn on to add those reviews as separate records (recordType partnerReview), up to Max reviews per partner site, newest first. Places without partner reviews are not affected.
includePhotoDetailsbooleanoptionalFor place reviews with photos or videos, add the width, height and upload date of each one. Adds one request per photo.

Download the published input schema

View complete JSON
{
  "properties": {
    "contributorUrls": {
      "description": "Google Maps reviewer profile links (for example https://www.google.com/maps/contrib/108763873723673205857, or a shared maps.app.goo.gl profile link) or numeric reviewer IDs. Used when collecting everything specific reviewers have written.",
      "editor": "stringList",
      "title": "Reviewers",
      "type": "array"
    },
    "enrichReviewerProfiles": {
      "default": false,
      "description": "For place reviews, also open each reviewer's public profile to add likes, first-published and edited dates, view counts, owner-reply dates and the reviewer's Local Guide level. Adds one request per reviewer. Reviews by private profiles, or older than a reviewer's 200 most recent contributions, keep the standard fields.",
      "title": "Add likes, edit dates and Local Guide levels (slower)",
      "type": "boolean"
    },
    "includeContributorSummary": {
      "default": false,
      "description": "Adds one record per reviewer with their Local Guide level, points and lifetime contribution counts. These records have recordType \"contributor\".",
      "title": "Add a reviewer summary record",
      "type": "boolean"
    },
    "includePartnerReviews": {
      "default": false,
      "description": "Hotels on Google Maps also show reviews from partner sites such as Tripadvisor, Trip.com or Priceline. Turn on to add those reviews as separate records (recordType partnerReview), up to Max reviews per partner site, newest first. Places without partner reviews are not affected.",
      "title": "Add hotel reviews from partner sites (Tripadvisor, Trip.com, …)",
      "type": "boolean"
    },
    "includePhotoDetails": {
      "default": false,
      "description": "For place reviews with photos or videos, add the width, height and upload date of each one. Adds one request per photo.",
      "title": "Add photo details (size and upload date, slower)",
      "type": "boolean"
    },
    "includePlaceSummary": {
      "default": false,
      "description": "Adds one record per place with its rating breakdown by stars, review topics, location, contact details and how many reviews were collected. These records have recordType \"place\".",
      "title": "Add a place summary record",
      "type": "boolean"
    },
    "includeReviewerDetails": {
      "default": true,
      "description": "Turn off to leave out reviewer names, profile pictures, profile links and reviewer IDs from place reviews.",
      "title": "Include reviewer names and profiles",
      "type": "boolean"
    },
    "keyword": {
      "description": "Words a review must mention, for example \"parking\" or \"long wait\". For places this uses Google's own review search, which also matches close word forms.",
      "editor": "textfield",
      "title": "Only reviews mentioning",
      "type": "string"
    },
    "language": {
      "default": "en",
      "description": "Language of Google Maps labels such as \"2 weeks ago\". Reviews written in another language also come with Google's translation into this language.",
      "editor": "select",
      "enum": [
        "en",
        "es",
        "fr",
        "de",
        "it",
        "pt",
        "pt-BR",
        "ja",
        "ko",
        "zh",
        "zh-TW",
        "ar",
        "ru",
        "hi",
        "tr",
        "nl",
        "pl",
        "id",
        "th",
        "vi",
        "he",
        "sv",
        "uk"
      ],
      "enumTitles": [
        "English",
        "Spanish",
        "French",
        "German",
        "Italian",
        "Portuguese",
        "Portuguese (Brazil)",
        "Japanese",
        "Korean",
        "Chinese (Simplified)",
        "Chinese (Traditional)",
        "Arabic",
        "Russian",
        "Hindi",
        "Turkish",
        "Dutch",
        "Polish",
        "Indonesian",
        "Thai",
        "Vietnamese",
        "Hebrew",
        "Swedish",
        "Ukrainian"
      ],
      "title": "Language",
      "type": "string"
    },
    "maxPlacesPerQuery": {
      "default": 20,
      "description": "How many places to take from each search. One Google search lists about 120 to 360 places; when you ask for more, the actor also searches sub-areas of the same region to reach them.",
      "maximum": 2000,
      "minimum": 1,
      "title": "Places per search",
      "type": "integer"
    },
    "maxReviews": {
      "default": 50,
      "description": "Upper limit of reviews collected for each place, or for each reviewer. Google publishes up to 200 contributions per reviewer.",
      "maximum": 200000,
      "minimum": 1,
      "prefill": 5,
      "title": "Maximum reviews per place or reviewer",
      "type": "integer"
    },
    "mode": {
      "default": "place",
      "description": "Reviews of places you list, reviews of places found by a search, or everything specific Google reviewers have published.",
      "editor": "select",
      "enum": [
        "place",
        "search",
        "author"
      ],
      "enumTitles": [
        "Reviews of specific places (links or IDs)",
        "Find places by search, then collect their reviews",
        "Everything specific reviewers have written"
      ],
      "prefill": "place",
      "title": "What do you want to collect?",
      "type": "string"
    },
    "monitoringKey": {
      "description": "Give scheduled runs the same name, for example my-restaurants. Each run then returns only reviews added or edited since the previous run with that name.",
      "editor": "textfield",
      "sectionCaption": "Output options",
      "title": "Only new reviews since the last run (monitoring name)",
      "type": "string"
    },
    "onlyWithPhotos": {
      "default": false,
      "description": "Keep only reviews that include photos or videos.",
      "title": "Only reviews with photos or videos",
      "type": "boolean"
    },
    "onlyWithText": {
      "default": false,
      "description": "Skip star-only reviews that have no written text.",
      "title": "Only reviews with written text",
      "type": "boolean"
    },
    "ownerReplyFilter": {
      "default": "any",
      "description": "Keep all reviews, only reviews the business replied to, or only reviews still without a reply.",
      "editor": "select",
      "enum": [
        "any",
        "withReply",
        "withoutReply"
      ],
      "enumTitles": [
        "Any",
        "Only reviews with an owner reply",
        "Only reviews without an owner reply"
      ],
      "title": "Owner reply",
      "type": "string"
    },
    "placeUrls": {
      "description": "Google Maps place links or IDs, one per line. Accepted: place links (also shared maps.app.goo.gl, goo.gl, g.page and share.google links, ?cid= links and review links), Place IDs starting with ChIJ, feature IDs like 0x89c259ab3c1ef289:0x3b67a41175949f55 and numeric CIDs. Used when collecting reviews of specific places.",
      "editor": "stringList",
      "prefill": [
        "https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2944813,17z/data=!3m1!4b1!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8583701!4d2.2944813!16zL20vMDJqODE"
      ],
      "title": "Places",
      "type": "array"
    },
    "reviewLanguages": {
      "description": "Keep only reviews written in these languages, as two-letter codes such as en, es, ko. Leave empty for all languages.",
      "editor": "stringList",
      "title": "Review languages",
      "type": "array"
    },
    "reviewsNewerThan": {
      "dateType": "absoluteOrRelative",
      "description": "Keep reviews dated on or after this day, for example 2026-01-01, or a period such as 30 days. Reviews are then read newest first.",
      "editor": "datepicker",
      "sectionCaption": "Filters",
      "title": "Only reviews from",
      "type": "string"
    },
    "reviewsOlderThan": {
      "dateType": "absoluteOrRelative",
      "description": "Keep reviews dated on or before this day. Combine with \"Only reviews from\" for a date range.",
      "editor": "datepicker",
      "title": "Only reviews until",
      "type": "string"
    },
    "searchQueries": {
      "description": "Google Maps searches such as \"dentists in Austin, TX\" or \"ramen Shibuya Tokyo\". Include a city or area in each search. Used when finding places by search.",
      "editor": "stringList",
      "title": "Searches",
      "type": "array"
    },
    "sortBy": {
      "default": "newest",
      "description": "Order of a place's reviews. Newest first and most relevant reach a place's complete review history; Google lists at most 188 reviews per star level in rating order.",
      "editor": "select",
      "enum": [
        "newest",
        "relevant",
        "highest_rating",
        "lowest_rating"
      ],
      "enumTitles": [
        "Newest first",
        "Most relevant",
        "Highest rating first",
        "Lowest rating first"
      ],
      "title": "Sort reviews by",
      "type": "string"
    },
    "starRatings": {
      "description": "Keep only reviews with these star ratings. Leave empty for all ratings.",
      "editor": "select",
      "items": {
        "enum": [
          "1",
          "2",
          "3",
          "4",
          "5"
        ],
        "enumTitles": [
          "1 star",
          "2 stars",
          "3 stars",
          "4 stars",
          "5 stars"
        ],
        "type": "string"
      },
      "title": "Star ratings",
      "type": "array"
    }
  },
  "required": [],
  "schemaVersion": 1,
  "title": "Google Maps Review & Contributor Activity Scraper",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
resultsstringoptionalAll records in the default dataset
detailedstringoptionalEvery review field, including translations, sub-ratings, visit details, media details and partner-site fields
placeSummariesstringoptionalPer-place records (when the place summary option is on): reviews per star, topics, partner sites, location, opening hours and collection status

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One record per Google Maps review (place and search modes), per reviewer contribution (reviewer mode) or per partner-site review on hotels, with ratings, full text, translations, dates, owner replies, photos and place context. Optional place and reviewer summary records.",
  "properties": {
    "detailed": {
      "description": "Every review field, including translations, sub-ratings, visit details, media details and partner-site fields",
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=detailed",
      "title": "Reviews (all fields)",
      "type": "string"
    },
    "placeSummaries": {
      "description": "Per-place records (when the place summary option is on): reviews per star, topics, partner sites, location, opening hours and collection status",
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=places",
      "title": "Place summaries",
      "type": "string"
    },
    "results": {
      "description": "All records in the default dataset",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Reviews",
      "type": "string"
    }
  },
  "title": "Google Maps Review & Contributor Activity Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "fields": {
    "properties": {
      "businessAddress": {
        "description": "The place's address.",
        "nullable": true,
        "type": "string"
      },
      "businessCategories": {
        "description": "All of the place's categories.",
        "items": {
          "type": "string"
        },
        "nullable": true,
        "type": "array"
      },
      "businessCategory": {
        "description": "The place's main category.",
        "nullable": true,
        "type": "string"
      },
      "businessLatitude": {
        "description": "The place's latitude.",
        "nullable": true,
        "type": "number"
      },
      "businessLongitude": {
        "description": "The place's longitude.",
        "nullable": true,
        "type": "number"
      },
      "businessName": {
        "description": "Name of the place.",
        "nullable": true,
        "type": "string"
      },
      "businessRating": {
        "description": "The place's average rating.",
        "nullable": true,
        "type": "number"
      },
      "businessTotalReviews": {
        "description": "How many reviews Google shows for the place.",
        "nullable": true,
        "type": "integer"
      },
      "cid": {
        "description": "Google's customer ID (CID) for the place.",
        "nullable": true,
        "type": "string"
      },
      "contextLabels": {
        "description": "'Label: value' strings built from Google's structured review details.",
        "items": {
          "type": "string"
        },
        "nullable": true,
        "type": "array"
      },
      "contributorAvatarUrl": {
        "description": "Contributor avatar URL (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "contributorId": {
        "description": "Contributor profile ID (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "contributorLocalGuideLevel": {
        "description": "Contributor Local Guide level (reviewer mode).",
        "nullable": true,
        "type": "integer"
      },
      "contributorName": {
        "description": "Contributor name (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "contributorPoints": {
        "description": "Contributor points (reviewer mode).",
        "nullable": true,
        "type": "integer"
      },
      "contributorProfileUrl": {
        "description": "Contributor profile URL (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "contributorTotalReviews": {
        "description": "Reviews on the contributor's profile (reviewer mode).",
        "nullable": true,
        "type": "integer"
      },
      "countryCode": {
        "description": "Place summary: the place's country code.",
        "nullable": true,
        "type": "string"
      },
      "description": {
        "description": "Place summary: Google's description of the place.",
        "nullable": true,
        "type": "string"
      },
      "featureId": {
        "description": "Google Maps feature ID (0x...:0x...).",
        "nullable": true,
        "type": "string"
      },
      "isEdited": {
        "description": "True when the review was edited after publishing, filled only with enrichReviewerProfiles on.",
        "nullable": true,
        "type": "boolean"
      },
      "isRatingOnly": {
        "description": "True when the review has a rating and no text.",
        "nullable": true,
        "type": "boolean"
      },
      "isVerified": {
        "description": "Never filled: Google does not publish a verified flag on reviews. Kept in the schema for older integrations.",
        "nullable": true,
        "type": "boolean"
      },
      "kgmid": {
        "description": "Google's Knowledge Graph ID for the place.",
        "nullable": true,
        "type": "string"
      },
      "likesCount": {
        "description": "Review likes, filled only with enrichReviewerProfiles on.",
        "nullable": true,
        "type": "integer"
      },
      "mentionedItems": {
        "description": "Never filled as a separate field: the items a reviewer mentioned are in reviewContext (and contextLabels). Kept in the schema for older integrations.",
        "items": {
          "type": "string"
        },
        "nullable": true,
        "type": "array"
      },
      "openingHours": {
        "description": "Place summary: opening hours per weekday.",
        "nullable": true,
        "type": "object"
      },
      "order": {
        "description": "Position of the review in this place's collected output, starting at 1.",
        "nullable": true,
        "type": "integer"
      },
      "originalReviewLanguage": {
        "description": "Original language when the review came with a translation.",
        "nullable": true,
        "type": "string"
      },
      "ownerResponseDate": {
        "description": "ISO 8601 owner-reply date; place mode needs enrichReviewerProfiles, reviewer mode always has it.",
        "nullable": true,
        "type": "string"
      },
      "ownerResponseDateOriginal": {
        "description": "The owner-reply date as Google prints it.",
        "nullable": true,
        "type": "string"
      },
      "ownerResponseText": {
        "description": "The owner's public reply, when there is one.",
        "nullable": true,
        "type": "string"
      },
      "ownerResponseTextTranslated": {
        "description": "Google's translation of the owner's reply.",
        "nullable": true,
        "type": "string"
      },
      "partnerReviewId": {
        "description": "For partnerReview records: the review's ID on the partner site.",
        "nullable": true,
        "type": "string"
      },
      "partnerReviews": {
        "description": "Place summary: partner sites Google lists for the place, with rating, scale, review count, link and a sample review.",
        "items": {
          "type": "object"
        },
        "nullable": true,
        "type": "array"
      },
      "partnerReviewsDelivered": {
        "description": "Place summary: how many partner-site reviews this run delivered (with includePartnerReviews on).",
        "nullable": true,
        "type": "integer"
      },
      "partnerSource": {
        "description": "For partnerReview records: the partner site Google syndicates the review from, such as Tripadvisor or Trip.com.",
        "nullable": true,
        "type": "string"
      },
      "phone": {
        "description": "Place summary: the place's phone number.",
        "nullable": true,
        "type": "string"
      },
      "photoDetails": {
        "description": "With includePhotoDetails on: one entry per photo or video with url, width, height, uploadDate and, for videos, durationSeconds.",
        "items": {
          "type": "object"
        },
        "nullable": true,
        "type": "array"
      },
      "photosInReview": {
        "description": "Photo URLs attached to a review.",
        "items": {
          "type": "string"
        },
        "nullable": true,
        "type": "array"
      },
      "placeAddress": {
        "description": "Address of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "placeCategory": {
        "description": "Category of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "placeId": {
        "description": "Google's Place ID (ChIJ...) when available.",
        "nullable": true,
        "type": "string"
      },
      "placeLatitude": {
        "description": "Latitude of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "number"
      },
      "placeLongitude": {
        "description": "Longitude of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "number"
      },
      "placeName": {
        "description": "Name of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "placePriceRange": {
        "description": "Price range of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "string"
      },
      "placeRating": {
        "description": "Rating of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "number"
      },
      "placeTotalReviews": {
        "description": "Review count of the reviewed place (reviewer mode).",
        "nullable": true,
        "type": "integer"
      },
      "placeUrl": {
        "description": "Google Maps URL of the place.",
        "nullable": true,
        "type": "string"
      },
      "position": {
        "description": "Position of the review in Google's list (reviewer mode).",
        "nullable": true,
        "type": "integer"
      },
      "rating": {
        "description": "Rating on the review, and on partnerReview records on the partner's own scale.",
        "nullable": true,
        "type": "number"
      },
      "ratingHistogram": {
        "description": "Place summary: how many reviews the place has for each star rating.",
        "nullable": true,
        "type": "object"
      },
      "ratingScale": {
        "description": "For partnerReview records: the scale of the partner rating, for example 5 or 10.",
        "nullable": true,
        "type": "number"
      },
      "recordType": {
        "description": "review, authorReview, partnerReview, place or contributor.",
        "nullable": true,
        "type": "string"
      },
      "reviewContext": {
        "description": "Google's structured review details (meal type, price per person, dishes or items mentioned, and so on).",
        "nullable": true,
        "type": "object"
      },
      "reviewCreatedAt": {
        "description": "ISO 8601 first-published date, filled only with enrichReviewerProfiles on.",
        "nullable": true,
        "type": "string"
      },
      "reviewDate": {
        "description": "ISO 8601 date of the review's last update (Google's newest-order date).",
        "nullable": true,
        "type": "string"
      },
      "reviewDateOriginal": {
        "description": "The date as Google prints it (for example '2 weeks ago'). Partner reviews have only this relative date.",
        "nullable": true,
        "type": "string"
      },
      "reviewId": {
        "description": "Google's review ID (reviews and authorReview records).",
        "nullable": true,
        "type": "string"
      },
      "reviewLanguage": {
        "description": "Language Google detected for the review text.",
        "nullable": true,
        "type": "string"
      },
      "reviewPhotoCount": {
        "description": "Number of photos attached to a review.",
        "nullable": true,
        "type": "integer"
      },
      "reviewPhotoUrls": {
        "description": "Alias of photosInReview kept for older integrations.",
        "items": {
          "type": "string"
        },
        "nullable": true,
        "type": "array"
      },
      "reviewReportUrl": {
        "description": "Google's report-this-review URL.",
        "nullable": true,
        "type": "string"
      },
      "reviewText": {
        "description": "Review text, with Google's HTML removed.",
        "nullable": true,
        "type": "string"
      },
      "reviewTextTranslated": {
        "description": "Google's translation of the review into the chosen language.",
        "nullable": true,
        "type": "string"
      },
      "reviewTopics": {
        "description": "Place summary: Google's review topic chips and how many reviews mention each.",
        "items": {
          "type": "object"
        },
        "nullable": true,
        "type": "array"
      },
      "reviewUrl": {
        "description": "Google Maps URL of the review.",
        "nullable": true,
        "type": "string"
      },
      "reviewVideoUrls": {
        "description": "Video URLs attached to a review.",
        "items": {
          "type": "string"
        },
        "nullable": true,
        "type": "array"
      },
      "reviewViewCount": {
        "description": "Review view count, filled only with enrichReviewerProfiles on.",
        "nullable": true,
        "type": "integer"
      },
      "reviewerAvatarUrl": {
        "description": "Reviewer avatar URL (omitted with includeReviewerDetails off).",
        "nullable": true,
        "type": "string"
      },
      "reviewerEmoji": {
        "description": "Never filled: Google does not publish an emoji next to reviewer names. Kept in the schema for older integrations.",
        "nullable": true,
        "type": "string"
      },
      "reviewerId": {
        "description": "Reviewer profile ID (omitted with includeReviewerDetails off).",
        "nullable": true,
        "type": "string"
      },
      "reviewerIsLocalGuide": {
        "description": "True when Google labels this reviewer 'Local Guide' on the review.",
        "nullable": true,
        "type": "boolean"
      },
      "reviewerLocalGuideLevel": {
        "description": "Exact Local Guide level, filled only with enrichReviewerProfiles on.",
        "nullable": true,
        "type": "integer"
      },
      "reviewerName": {
        "description": "Name of the reviewer (omitted with includeReviewerDetails off).",
        "nullable": true,
        "type": "string"
      },
      "reviewerPhotoCount": {
        "description": "How many photos the reviewer has contributed, from Google's review feed.",
        "nullable": true,
        "type": "integer"
      },
      "reviewerProfileUrl": {
        "description": "Reviewer profile URL (omitted with includeReviewerDetails off).",
        "nullable": true,
        "type": "string"
      },
      "reviewerSubtitle": {
        "description": "The status line Google prints under the reviewer's name, such as 'Local Guide · 53 reviews · 58 photos', in the chosen language. Left out when Google's exact wording for that language and those counts was not observed; the counts stay in reviewerTotalReviews and reviewerPhotoCount.",
        "nullable": true,
        "type": "string"
      },
      "reviewerTotalReviews": {
        "description": "How many reviews the reviewer has written, from Google's review feed.",
        "nullable": true,
        "type": "integer"
      },
      "reviewsDelivered": {
        "description": "Place or contributor summary: how many reviews this run delivered.",
        "nullable": true,
        "type": "integer"
      },
      "reviewsRemovedNotice": {
        "description": "Place summary: Google's notice that reviews were removed after legal complaints.",
        "nullable": true,
        "type": "string"
      },
      "reviewsScanned": {
        "description": "Place summary: how many reviews the actor read before stopping.",
        "nullable": true,
        "type": "integer"
      },
      "scrapedAt": {
        "description": "ISO 8601 time when the run collected the record.",
        "nullable": true,
        "type": "string"
      },
      "searchQuery": {
        "description": "The search query that found the place (search mode).",
        "nullable": true,
        "type": "string"
      },
      "searchRank": {
        "description": "The place's rank in the search results (search mode).",
        "nullable": true,
        "type": "integer"
      },
      "sortBy": {
        "description": "The sort order that was requested.",
        "nullable": true,
        "type": "string"
      },
      "sortConfirmed": {
        "description": "True when the feed's order matched the requested sort. False means the actor delivered what Google returned (for example the 188-per-star rating window).",
        "nullable": true,
        "type": "boolean"
      },
      "sortStatus": {
        "description": "confirmed or unconfirmed.",
        "nullable": true,
        "type": "string"
      },
      "sourceUrl": {
        "description": "The input that produced this record.",
        "nullable": true,
        "type": "string"
      },
      "status": {
        "description": "Place or contributor summary: ok, noReviews, notFound, invalid or partial.",
        "nullable": true,
        "type": "string"
      },
      "statusReason": {
        "description": "Place or contributor summary: plain-language explanation of the status.",
        "nullable": true,
        "type": "string"
      },
      "stopReason": {
        "description": "Place summary: why collection stopped, such as requestedCountReached, allReviewsCollected, dateCutoffReached or sourceStoppedResponding.",
        "nullable": true,
        "type": "string"
      },
      "subRatings": {
        "description": "Google's numeric sub-ratings such as food or service, out of 5.",
        "nullable": true,
        "type": "object"
      },
      "timezone": {
        "description": "Place summary: the place's time zone.",
        "nullable": true,
        "type": "string"
      },
      "translatedLanguage": {
        "description": "Language of reviewTextTranslated (the chosen language).",
        "nullable": true,
        "type": "string"
      },
      "videosInReview": {
        "description": "Number of videos attached to a review.",
        "nullable": true,
        "type": "integer"
      },
      "visitDate": {
        "description": "When the reviewer visited, when Google shows it.",
        "nullable": true,
        "type": "string"
      },
      "website": {
        "description": "Place summary: the place's website.",
        "nullable": true,
        "type": "string"
      }
    },
    "type": "object"
  },
  "title": "Google Maps Reviews",
  "views": {
    "contributors": {
      "display": {
        "component": "table",
        "properties": {
          "contributions": {
            "format": "object",
            "label": "Contribution counts"
          },
          "contributorAvatarUrl": {
            "format": "link",
            "label": "Contributor Avatar"
          },
          "contributorBio": {
            "format": "text",
            "label": "Bio"
          },
          "contributorId": {
            "format": "text",
            "label": "Contributor ID"
          },
          "contributorIsLocalGuide": {
            "format": "boolean",
            "label": "Local Guide"
          },
          "contributorLocalGuideLevel": {
            "format": "text",
            "label": "contributorLocalGuideLevel"
          },
          "contributorName": {
            "format": "text",
            "label": "Contributor"
          },
          "contributorNextLevelPoints": {
            "format": "number",
            "label": "Points for next level"
          },
          "contributorPoints": {
            "format": "number",
            "label": "Contributor Points"
          },
          "contributorProfileUrl": {
            "format": "link",
            "label": "Contributor Profile URL"
          },
          "contributorTotalReviews": {
            "format": "text",
            "label": "contributorTotalReviews"
          },
          "recordType": {
            "format": "text",
            "label": "recordType"
          },
          "reviewsDelivered": {
            "format": "number",
            "label": "Reviews collected"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "sourceUrl": {
            "format": "text",
            "label": "sourceUrl"
          },
          "status": {
            "format": "text",
            "label": "Status"
          },
          "statusReason": {
            "format": "text",
            "label": "Status details"
          }
        }
      },
      "title": "Reviewer summaries",
      "transformation": {
        "fields": [
          "recordType",
          "contributorId",
          "contributorName",
          "contributorAvatarUrl",
          "contributorProfileUrl",
          "contributorIsLocalGuide",
          "contributorLocalGuideLevel",
          "contributorPoints",
          "contributorNextLevelPoints",
          "contributorTotalReviews",
          "contributorBio",
          "contributions",
          "status",
          "statusReason",
          "reviewsDelivered",
          "sourceUrl",
          "scrapedAt"
        ]
      }
    },
    "detailed": {
      "display": {
        "component": "table",
        "properties": {
          "businessAddress": {
            "format": "text",
            "label": "Address"
          },
          "businessCategories": {
            "format": "array",
            "label": "Categories"
          },
          "businessCategory": {
            "format": "text",
            "label": "Category"
          },
          "businessLatitude": {
            "format": "number",
            "label": "Latitude"
          },
          "businessLongitude": {
            "format": "number",
            "label": "Longitude"
          },
          "businessName": {
            "format": "text",
            "label": "Business"
          },
          "businessRating": {
            "format": "number",
            "label": "Business Rating"
          },
          "businessTotalReviews": {
            "format": "number",
            "label": "Total Reviews"
          },
          "cid": {
            "format": "text",
            "label": "CID"
          },
          "contextLabels": {
            "format": "array",
            "label": "Context Labels"
          },
          "contributorAvatarUrl": {
            "format": "link",
            "label": "Contributor Avatar"
          },
          "contributorId": {
            "format": "text",
            "label": "Contributor ID"
          },
          "contributorName": {
            "format": "text",
            "label": "Contributor"
          },
          "contributorPoints": {
            "format": "number",
            "label": "Contributor Points"
          },
          "contributorProfileUrl": {
            "format": "link",
            "label": "Contributor Profile URL"
          },
          "featureId": {
            "format": "text",
            "label": "Feature ID"
          },
          "isEdited": {
            "format": "text",
            "label": "isEdited"
          },
          "isRatingOnly": {
            "format": "boolean",
            "label": "Stars only"
          },
          "isVerified": {
            "format": "boolean",
            "label": "Verified"
          },
          "likesCount": {
            "format": "number",
            "label": "Likes"
          },
          "mentionedItems": {
            "format": "array",
            "label": "Mentioned Items"
          },
          "order": {
            "format": "number",
            "label": "Order"
          },
          "originalReviewLanguage": {
            "format": "text",
            "label": "Original Language"
          },
          "ownerResponseDate": {
            "format": "text",
            "label": "Owner Reply Date"
          },
          "ownerResponseDateOriginal": {
            "format": "text",
            "label": "ownerResponseDateOriginal"
          },
          "ownerResponseText": {
            "format": "text",
            "label": "Owner Reply"
          },
          "ownerResponseTextTranslated": {
            "format": "text",
            "label": "Owner reply (translated)"
          },
          "partnerReviewId": {
            "format": "text",
            "label": "Partner review ID"
          },
          "partnerSource": {
            "format": "text",
            "label": "Partner site"
          },
          "photoDetails": {
            "format": "array",
            "label": "Photo details"
          },
          "photosInReview": {
            "format": "array",
            "label": "Photos"
          },
          "placeAddress": {
            "format": "text",
            "label": "Reviewed Place Address"
          },
          "placeCategory": {
            "format": "text",
            "label": "Place category"
          },
          "placeId": {
            "format": "text",
            "label": "Place ID"
          },
          "placeLatitude": {
            "format": "number",
            "label": "Place latitude"
          },
          "placeLongitude": {
            "format": "number",
            "label": "Place longitude"
          },
          "placeName": {
            "format": "text",
            "label": "Reviewed Place"
          },
          "placePriceRange": {
            "format": "text",
            "label": "Price range"
          },
          "placeRating": {
            "format": "number",
            "label": "Place rating"
          },
          "placeTotalReviews": {
            "format": "number",
            "label": "Place reviews"
          },
          "placeUrl": {
            "format": "link",
            "label": "Place URL"
          },
          "position": {
            "format": "number",
            "label": "Position"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "ratingScale": {
            "format": "number",
            "label": "Partner rating scale"
          },
          "recordType": {
            "format": "text",
            "label": "recordType"
          },
          "reviewContext": {
            "format": "object",
            "label": "Visit details"
          },
          "reviewCreatedAt": {
            "format": "text",
            "label": "First published"
          },
          "reviewDate": {
            "format": "text",
            "label": "Date (ISO)"
          },
          "reviewDateOriginal": {
            "format": "text",
            "label": "Date (Original)"
          },
          "reviewId": {
            "format": "text",
            "label": "Review ID"
          },
          "reviewLanguage": {
            "format": "text",
            "label": "Language"
          },
          "reviewPhotoCount": {
            "format": "number",
            "label": "Contributor Review Photo Count"
          },
          "reviewPhotoUrls": {
            "format": "array",
            "label": "Contributor Review Photos"
          },
          "reviewReportUrl": {
            "format": "link",
            "label": "Report link"
          },
          "reviewText": {
            "format": "text",
            "label": "Review"
          },
          "reviewTextTranslated": {
            "format": "text",
            "label": "Translated review"
          },
          "reviewUrl": {
            "format": "link",
            "label": "Review link"
          },
          "reviewVideoUrls": {
            "format": "array",
            "label": "Videos"
          },
          "reviewViewCount": {
            "format": "number",
            "label": "Views"
          },
          "reviewerAvatarUrl": {
            "format": "link",
            "label": "Avatar"
          },
          "reviewerEmoji": {
            "format": "text",
            "label": "Reviewer Emoji"
          },
          "reviewerId": {
            "format": "text",
            "label": "Reviewer ID"
          },
          "reviewerIsLocalGuide": {
            "format": "boolean",
            "label": "Local Guide"
          },
          "reviewerLocalGuideLevel": {
            "format": "number",
            "label": "Local Guide Level"
          },
          "reviewerName": {
            "format": "text",
            "label": "Reviewer"
          },
          "reviewerPhotoCount": {
            "format": "number",
            "label": "Reviewer Photo Count"
          },
          "reviewerProfileUrl": {
            "format": "link",
            "label": "Profile URL"
          },
          "reviewerSubtitle": {
            "format": "text",
            "label": "Reviewer Subtitle"
          },
          "reviewerTotalReviews": {
            "format": "number",
            "label": "Reviewer Total Reviews"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "searchQuery": {
            "format": "text",
            "label": "Search"
          },
          "searchRank": {
            "format": "number",
            "label": "Search rank"
          },
          "sortBy": {
            "format": "text",
            "label": "Requested Sort"
          },
          "sortConfirmed": {
            "format": "boolean",
            "label": "Sort Confirmed"
          },
          "sortStatus": {
            "format": "text",
            "label": "Sort Status"
          },
          "sourceUrl": {
            "format": "text",
            "label": "sourceUrl"
          },
          "subRatings": {
            "format": "object",
            "label": "Sub-ratings"
          },
          "translatedLanguage": {
            "format": "text",
            "label": "Translated into"
          },
          "videosInReview": {
            "format": "number",
            "label": "Videos In Review"
          },
          "visitDate": {
            "format": "text",
            "label": "Visit Date"
          }
        }
      },
      "title": "Detailed",
      "transformation": {
        "fields": [
          "recordType",
          "reviewId",
          "reviewerName",
          "reviewerAvatarUrl",
          "reviewerProfileUrl",
          "reviewerSubtitle",
          "reviewerLocalGuideLevel",
          "reviewerTotalReviews",
          "reviewerPhotoCount",
          "reviewerEmoji",
          "contributorId",
          "contributorName",
          "contributorAvatarUrl",
          "contributorProfileUrl",
          "contributorPoints",
          "rating",
          "reviewText",
          "reviewLanguage",
          "originalReviewLanguage",
          "reviewDate",
          "reviewDateOriginal",
          "isEdited",
          "likesCount",
          "photosInReview",
          "reviewPhotoUrls",
          "reviewPhotoCount",
          "videosInReview",
          "photoDetails",
          "ownerResponseText",
          "ownerResponseDate",
          "ownerResponseDateOriginal",
          "isVerified",
          "visitDate",
          "mentionedItems",
          "contextLabels",
          "businessName",
          "businessRating",
          "businessTotalReviews",
          "businessCategory",
          "businessAddress",
          "placeName",
          "placeAddress",
          "placeId",
          "featureId",
          "placeUrl",
          "sourceUrl",
          "order",
          "position",
          "sortBy",
          "sortConfirmed",
          "sortStatus",
          "scrapedAt",
          "reviewUrl",
          "reviewReportUrl",
          "reviewTextTranslated",
          "translatedLanguage",
          "reviewerId",
          "reviewerIsLocalGuide",
          "reviewVideoUrls",
          "ownerResponseTextTranslated",
          "subRatings",
          "reviewContext",
          "reviewCreatedAt",
          "reviewViewCount",
          "isRatingOnly",
          "businessCategories",
          "businessLatitude",
          "businessLongitude",
          "cid",
          "placeLatitude",
          "placeLongitude",
          "placeCategory",
          "placeRating",
          "placeTotalReviews",
          "placePriceRange",
          "searchQuery",
          "searchRank",
          "partnerSource",
          "partnerReviewId",
          "ratingScale"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "businessName": {
            "format": "text",
            "label": "Business"
          },
          "likesCount": {
            "format": "number",
            "label": "Likes"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "reviewDate": {
            "format": "text",
            "label": "Date"
          },
          "reviewText": {
            "format": "text",
            "label": "Review"
          },
          "reviewerName": {
            "format": "text",
            "label": "Reviewer"
          },
          "sortBy": {
            "format": "text",
            "label": "Requested Sort"
          },
          "sortConfirmed": {
            "format": "boolean",
            "label": "Sort Confirmed"
          }
        }
      },
      "title": "Reviews",
      "transformation": {
        "fields": [
          "recordType",
          "reviewerName",
          "rating",
          "reviewText",
          "reviewDate",
          "likesCount",
          "businessName",
          "sortBy",
          "sortConfirmed",
          "sourceUrl",
          "scrapedAt"
        ]
      }
    },
    "places": {
      "display": {
        "component": "table",
        "properties": {
          "businessAddress": {
            "format": "text",
            "label": "Address"
          },
          "businessCategories": {
            "format": "array",
            "label": "Categories"
          },
          "businessCategory": {
            "format": "text",
            "label": "Category"
          },
          "businessLatitude": {
            "format": "number",
            "label": "Latitude"
          },
          "businessLongitude": {
            "format": "number",
            "label": "Longitude"
          },
          "businessName": {
            "format": "text",
            "label": "Business"
          },
          "businessRating": {
            "format": "number",
            "label": "Business Rating"
          },
          "businessTotalReviews": {
            "format": "number",
            "label": "Total Reviews"
          },
          "cid": {
            "format": "text",
            "label": "CID"
          },
          "countryCode": {
            "format": "text",
            "label": "Country"
          },
          "description": {
            "format": "text",
            "label": "Description"
          },
          "featureId": {
            "format": "text",
            "label": "Feature ID"
          },
          "kgmid": {
            "format": "text",
            "label": "Knowledge Graph ID"
          },
          "openingHours": {
            "format": "object",
            "label": "Opening hours"
          },
          "partnerReviews": {
            "format": "array",
            "label": "Reviews on partner sites"
          },
          "partnerReviewsDelivered": {
            "format": "number",
            "label": "Partner reviews delivered"
          },
          "phone": {
            "format": "text",
            "label": "Phone"
          },
          "placeId": {
            "format": "text",
            "label": "Place ID"
          },
          "placeUrl": {
            "format": "link",
            "label": "Place URL"
          },
          "ratingHistogram": {
            "format": "object",
            "label": "Reviews per star"
          },
          "recordType": {
            "format": "text",
            "label": "recordType"
          },
          "reviewTopics": {
            "format": "array",
            "label": "Review topics"
          },
          "reviewsDelivered": {
            "format": "number",
            "label": "Reviews collected"
          },
          "reviewsRemovedNotice": {
            "format": "text",
            "label": "Removed-reviews notice"
          },
          "reviewsScanned": {
            "format": "number",
            "label": "Reviews read"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "searchQuery": {
            "format": "text",
            "label": "Search"
          },
          "searchRank": {
            "format": "number",
            "label": "Search rank"
          },
          "sourceUrl": {
            "format": "text",
            "label": "sourceUrl"
          },
          "status": {
            "format": "text",
            "label": "Status"
          },
          "statusReason": {
            "format": "text",
            "label": "Status details"
          },
          "stopReason": {
            "format": "text",
            "label": "Stopped because"
          },
          "timezone": {
            "format": "text",
            "label": "Time zone"
          },
          "website": {
            "format": "link",
            "label": "Website"
          }
        }
      },
      "title": "Place summaries",
      "transformation": {
        "fields": [
          "recordType",
          "businessName",
          "businessRating",
          "businessTotalReviews",
          "ratingHistogram",
          "reviewTopics",
          "businessCategory",
          "businessCategories",
          "businessAddress",
          "businessLatitude",
          "businessLongitude",
          "phone",
          "website",
          "timezone",
          "countryCode",
          "description",
          "reviewsRemovedNotice",
          "partnerReviews",
          "openingHours",
          "placeId",
          "featureId",
          "cid",
          "kgmid",
          "placeUrl",
          "sourceUrl",
          "searchQuery",
          "searchRank",
          "status",
          "statusReason",
          "partnerReviewsDelivered",
          "reviewsDelivered",
          "reviewsScanned",
          "stopReason",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Google Maps Review & Contributor Activity Scraper

Turn Google Maps reviews into a clean spreadsheet. Paste a list of places, describe the places you want with a search such as "dentists in Austin, TX", or point at Google reviewers' profiles. You get every review's stars, full text with Google's translation, exact date, owner reply, photos and videos, food/service/atmosphere sub-ratings and visit details. No Google account, API key or cookies are needed.

What this actor does

  • Whole review histories, not a sample. Newest-first and most-relevant orders go all the way back to a place's first review (a place with 27,335 reviews returned all 27,335).
  • Every way of choosing places. Mix place links, Place IDs (ChIJ…), feature IDs (0x…:0x…), CIDs, shared maps.app.goo.gl / share.google / g.page links and review links; search like a local ("dentists in Austin, TX") and expand into sub-areas to reach around 1,000 places; or collect up to 200 recent contributions per reviewer profile.
  • Filters, order and monitoring. Date range, keywords, stars, written text, owner replies, photos/videos and review language; newest, most relevant, highest or lowest rating; scheduled runs with monitoringKey return only reviews added or edited since the previous one.
  • Rich, honest records. Full text with Google's translation, exact dates, owner replies, photos and videos, sub-ratings, visit context, reviewer identity, place facts, rating histogram and topic chips. Every row says whether the requested order was confirmed, and place summaries say why collection stopped.
  • Empty fields are omitted. Fields Google doesn't show for a record are left out instead of being empty; links to places that no longer exist are reported, never swapped for a lookalike business.
Mode You provide You get
Reviews of specific places Links or IDs of places Reviews of each place, plus optional place summaries
Find places by search Searches such as "ramen Shibuya Tokyo" The places Google ranks for each search, their reviews, and the search and rank they came from
Everything specific reviewers have written Reviewer profile links or numeric IDs Each reviewer's reviews and star-only ratings across all places, plus optional reviewer summaries

Output per record

Every record has a recordType: review (a place review), authorReview (a reviewer's contribution), and, when enabled, place and contributor summary records. Fields that Google does not show for a record are left out instead of being empty.

Place review (review)

{
  "recordType": "review",
  "reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2twcVJsbFlkVUV0WjBGcldrNHdVRFpxWjBoc01YYxAB",
  "rating": 5,
  "reviewText": "Absolutely stunning at night, the sparkle every hour is magical.",
  "reviewLanguage": "en",
  "reviewDate": "2026-10-19T09:31:51.751+00:00",
  "reviewDateOriginal": "8 minutes ago",
  "reviewUrl": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlR…",
  "reviewerName": "Ajay C.",
  "reviewerId": "113024036179217636785",
  "reviewerProfileUrl": "https://www.google.com/maps/contrib/113024036179217636785/reviews",
  "reviewerTotalReviews": 3,
  "reviewerPhotoCount": 3,
  "reviewerIsLocalGuide": false,
  "subRatings": { "Food": 5, "Service": 4, "Atmosphere": 5 },
  "reviewContext": { "Meal type": "Dinner", "Price per person": "$20 to $30" },
  "visitDate": "Visited in October",
  "businessName": "Eiffel Tower",
  "businessRating": 4.7,
  "businessTotalReviews": 498339,
  "businessCategory": "Historical landmark",
  "businessAddress": "Av. Gustave Eiffel, 75007 Paris, France",
  "businessLatitude": 48.8583701,
  "businessLongitude": 2.2944813,
  "placeId": "ChIJLU7jZClu5kcR4PcOOO6p3I0",
  "featureId": "0x47e66e2964e34e2d:0x8ddca9ee380ef7e0",
  "cid": "10222232094831998944",
  "placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJLU7jZClu5kcR4PcOOO6p3I0",
  "order": 1,
  "sortBy": "newest",
  "sortConfirmed": true,
  "sortStatus": "confirmed",
  "scrapedAt": "2026-10-19T09:39:52+00:00"
}

Other review fields when Google shows them: reviewTextTranslated + translatedLanguage + originalReviewLanguage (reviews in another language), photosInReview, reviewPhotoCount, reviewVideoUrls, videosInReview, ownerResponseText, ownerResponseDateOriginal, ownerResponseTextTranslated, contextLabels, reviewReportUrl, businessCategories, searchQuery and searchRank (search mode). reviewerSubtitle (the line Google prints under the reviewer's name, such as "Local Guide · 37 reviews · 5 photos", in the chosen language). With enrichReviewerProfiles on: reviewerLocalGuideLevel, likesCount, isEdited, reviewCreatedAt, reviewViewCount and ownerResponseDate. With includePhotoDetails on: photoDetails, one entry per photo or video with url, width, height, uploadDate and, for videos, durationSeconds.

Reviewer contribution (authorReview)

Reviewer fields (contributorId, contributorName, contributorAvatarUrl, contributorProfileUrl, contributorLocalGuideLevel, contributorPoints, contributorTotalReviews), the review (reviewId, rating, reviewText, reviewLanguage, reviewDate = last update, reviewCreatedAt = first published, isEdited, reviewDateOriginal, likesCount, reviewViewCount, isRatingOnly, reviewUrl, reviewPhotoUrls, reviewPhotoCount, subRatings, reviewContext, contextLabels, ownerResponseText, ownerResponseDate, ownerResponseDateOriginal), and the reviewed place (placeName, placeAddress, placeId, featureId, placeUrl, placeLatitude, placeLongitude, placeCategory, placeRating, placeTotalReviews, placePriceRange), plus position (rank in the reviewer's list), sourceUrl and scrapedAt.

Place summary (place, optional)

Name, address, all categories, coordinates, phone, website, time zone, country, description, rating, total reviews, ratingHistogram (reviews per star), reviewTopics (Google's topic chips with how many reviews mention each), openingHours (per weekday), partnerReviews (hotels and some restaurants: rating, scale, review count, link and a sample review from sites such as Tripadvisor or Booking.com), reviewsRemovedNotice (Google's notice that reviews were removed after legal complaints, shown for some places in Germany), Place ID / feature ID / CID / Knowledge Graph ID, and collection results: reviewsDelivered, partnerReviewsDelivered (with includePartnerReviews), reviewsScanned, stopReason (for example requestedCountReached, allReviewsCollected, dateCutoffReached, noNewReviewsSinceLastRun), status (ok, noReviews, notFound, invalid, partial) and statusReason.

Partner-site review (partnerReview, optional)

With includePartnerReviews, hotels also get one record per review Google shows from a partner site: partnerSource (for example Tripadvisor), partnerReviewId, rating with ratingScale (some sites rate out of 10), reviewText, reviewDateOriginal (Google shows partner reviews with a relative date such as "2 weeks ago"), reviewerName, reviewUrl (the review on the partner site), ownerResponseText when the hotel replied, the place fields (businessName, placeId, featureId, …) and order. Partner sites are read newest first.

Reviewer summary (contributor, optional)

Name, Local Guide level and points, points needed for the next level, bio, contributions (lifetime counts of reviews, ratings, photos, videos, answers, edits, places added and more), status (public, private, notFound) and reviewsDelivered.

Likes, edit dates and Local Guide levels

Google shows likes, first-published and edit dates, view counts, owner-reply dates and exact Local Guide levels only on reviewer profiles. Reviewer mode always has them. In place and search modes, turn on enrichReviewerProfiles and the actor looks up each reviewer once and adds them to the matching reviews. In practice this fills about 8 in 10 reviews; the rest were written by reviewers with private profiles, or are older than the reviewer's 200 most recent contributions. reviewerLocalGuideLevel is added for every reviewer with a public level, including private profiles. View counts are Google's running counters and can differ slightly between two lookups. Without the option, reviewerIsLocalGuide is true for reviewers Google labels "Local Guide" on the review. reviewerSubtitle is filled when the actor knows Google's exact wording for that language and those counts; otherwise it is left out and the counts are still in reviewerTotalReviews and reviewerPhotoCount. reviewerEmoji and isVerified are not published by Google and stay in the schema for older integrations; the dishes a reviewer recommends (the old mentionedItems) are in reviewContext.

Input

Field Type Default Description
mode select place place = reviews of the places you list; search = find places by search, then their reviews; author = everything specific reviewers wrote
placeUrls list – Place links or IDs, one per line: place links, shared maps.app.goo.gl / share.google / g.page links, ?cid= links, review links, ChIJ… Place IDs, 0x…:0x… feature IDs, numeric CIDs
searchQueries list – Searches like "dentists in Austin, TX"; include a city or area
maxPlacesPerQuery integer 20 Places taken from each search (1–2,000), in Google's ranking; above about 120 places the actor also searches sub-areas
contributorUrls list – Reviewer profile links (https://www.google.com/maps/contrib/<id>, or a shared maps.app.goo.gl profile link) or numeric reviewer IDs
maxReviews integer 50 Maximum reviews per place or per reviewer (1–200,000; reviewers publish at most 200)
sortBy select newest newest, relevant, highest_rating, lowest_rating
language select en Language of labels such as "2 weeks ago"; foreign-language reviews also get Google's translation into it. 23 languages
reviewsNewerThan date – Keep reviews from this day on, e.g. 2026-01-01 or 30 days
reviewsOlderThan date – Keep reviews up to this day (use both for a range)
keyword text – Only reviews mentioning these words
starRatings multi-select – Only these star ratings, e.g. ["1", "2"]
onlyWithText boolean false Skip star-only reviews without written text
ownerReplyFilter select any any, withReply, withoutReply
onlyWithPhotos boolean false Only reviews with photos or videos
reviewLanguages list – Only reviews written in these languages, e.g. ko, es
monitoringKey text – Same name on scheduled runs → only reviews added or edited since the last run with that name
includePlaceSummary boolean false Add one summary record per place
includeContributorSummary boolean false Add one summary record per reviewer
includeReviewerDetails boolean true Turn off to leave reviewer names, pictures, profile links and IDs out of place reviews
enrichReviewerProfiles boolean false Place and search modes: also look up each reviewer's public profile to add likes, first-published and edit dates, view counts, owner-reply dates and the exact Local Guide level. Slower
includePartnerReviews boolean false Hotels: also collect the reviews Google shows from partner sites such as Tripadvisor, Trip.com or Priceline, as partnerReview records. maxReviews applies to each partner site, the same way it applies to each place
includePhotoDetails boolean false Add width, height and upload date (and video length) for every photo and video in place reviews. One extra request per photo

Inputs saved for earlier versions keep working. A single placeUrl or placeId, a single contributorUrl and old proxy settings are all accepted. Change in this version: in reviewer mode, maxReviews now applies to each reviewer separately (it used to be a total for the whole run).

Example: newest reviews of two places

{
  "placeUrls": [
    "https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2944813,17z/data=!3m1!4b1!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8583701!4d2.2944813",
    "ChIJifIePKtZwokRVZ-UdRGkZzs"
  ],
  "maxReviews": 200
}

Example: one- and two-star reviews for a city's top dentists

{
  "mode": "search",
  "searchQueries": ["dentists in Boise, Idaho"],
  "maxPlacesPerQuery": 30,
  "starRatings": ["1", "2"],
  "reviewsNewerThan": "90 days",
  "maxReviews": 500,
  "includePlaceSummary": true
}

Example: everything two reviewers wrote

{
  "mode": "author",
  "contributorUrls": ["https://www.google.com/maps/contrib/108763873723673205857", "100413133939170473725"],
  "maxReviews": 200,
  "includeContributorSummary": true
}

Example: daily monitoring returns only new reviews

{ "placeUrls": ["ChIJifIePKtZwokRVZ-UdRGkZzs"], "monitoringKey": "my-pizzerias", "maxReviews": 1000 }

Use cases

  • Reputation tracking for branches and franchises: schedule a monitoring run over every location and get only the new reviews each morning.
  • Competitor and market research: run a search for a category and city, then compare rating breakdowns, topics and complaints.
  • Customer-experience analytics: feed full texts, translations and sub-ratings into sentiment or topic models.
  • Lead generation for agencies: find businesses with recent low ratings or without owner replies.
  • Trust and safety: review a reviewer's whole activity, spot unusual patterns, and see which places they reviewed and when.

FAQ

Do I need a Google account, API key or cookies? No. The actor reads what Google Maps shows to anyone who is not signed in.

Do I need to set up a proxy? No. The actor chooses its connection itself and switches automatically if Google slows it down. There are no proxy settings to configure.

Why does a place give fewer reviews than its total? Google's total also counts reviews it no longer displays. On a full newest-first collection the actor reads everything Google still lists, and the place summary shows exactly how many reviews were read and why collection stopped.

Can I get only new reviews every day? Yes. Set monitoringKey to any name and schedule the run. Set maxReviews high enough to cover the reviews expected between two runs.

Is the requested order trustworthy? Every place review carries sortConfirmed. It is true only when the row continues the requested order.

What happens with a link to a closed or removed place? It is skipped with a clear reason, and with place summaries enabled you get a notFound record. The actor never collects reviews from a different business with a similar name. A shared link that opens something other than a place (a reviewer profile, a photo, a video) is skipped with a reason saying what it opens.

Can I get likes or Local Guide levels for place reviews? Yes, turn on enrichReviewerProfiles. It makes one extra request per reviewer, so runs take longer. The status message says how many reviews were filled.

Do I get the reviews hotels show from Tripadvisor or Booking.com? Yes. Turn on includePartnerReviews and every review Google shows from those sites is added as a partnerReview record, up to maxReviews per site. The place summary also lists each partner site's rating and review count in partnerReviews.

Can I collect reviews in another language? Choose a language and Google's labels plus translations come in that language. Each review's original text and language are kept as well.

Is this an official Google product? No. It is an independent tool that collects publicly visible Google Maps data.

How many reviews can I get?

  • Newest first or most relevant: the complete history of a place, down to its first review.
  • Highest or lowest rating first: Google lists at most 188 reviews per star level in these orders. When you also pick star ratings, the actor collects the rest of those stars newest first and marks those rows with sortConfirmed: false.
  • Reviewers: up to 200 of each reviewer's most recently updated reviews and ratings. That is the full history of most reviewers.
  • Searches: one Google search lists about 120 to 360 places. Ask for more with maxPlacesPerQuery and the actor also searches up to about 80 sub-areas around them, small ones in dense city centres and larger ones where places are spread out: "restaurants in Istanbul" went from 200 to 1,200 places. Places far outside the searched area are left out, and small markets simply end when there are no more places (for example about 90 dentists in Bozeman, Montana).
  • Speed: long newest-first histories (places with 1,000+ reviews) are read in several date ranges at once and merged back into exact newest-first order, which shortens big collections; how much it saves depends on how quickly Google serves the parallel ranges (a 25,000-review walk took about 15 minutes on Apify's cloud). Several places are collected in parallel.
  • Filters (stars, written text, owner reply, photos, review language) are applied while reviews are read. When few reviews match, for example an owner-reply filter on a place that never replies, the actor keeps reading back through the history. Add a date range to keep such runs short; the status message and place summary show how many reviews were read.

Limitations

  • Likes and edit dates in place mode come from reviewer profiles, so reviews by private profiles, or older than a reviewer's 200 most recent contributions, can't get them. Workaround: run reviewer mode on the reviewers you care about.
  • Rating-ordered collection stops at 188 reviews per star level in Google's own order. Workaround: pick the star ratings you want; the rest of those stars are collected newest first (sortConfirmed: false).
  • Reviewer mode returns at most the 200 most recently updated contributions per profile; Google does not page further. Private profiles return no reviews and are reported as private.
  • Partner-site reviews are the ones Google shows on the hotel page, which can be far fewer than the partner site itself has (one hotel: 176 Tripadvisor reviews on Google, 7,499 on Tripadvisor), and they carry a relative date only.
  • Single reviews by link: a review link is read as its place, and that place's reviews are collected. Use keyword or a date range to find one review quickly.
  • Price level is not part of Google's public data for signed-out visitors. Photo locations are not published: Google returns the place's position for every photo, so it is not output.
  • Very large places take time: a full 500,000-review history is still a long collection even when read in parallel. Use date filters or maxReviews for faster runs; a date range now starts reading at its end date instead of at today.

Please use the data responsibly and in line with Google's terms and applicable privacy laws. Turn off includeReviewerDetails when you don't need reviewer identities.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build JH65XCXfaCu7jh0t2. Documentation is regenerated from the default published build; private drafts are not included.