Install
openclaw skills install google-maps-reviews-scraper-apifyUse this skill when the user needs Google Maps reviews from exact places through an Apify actor, including review text, ratings, dates, review URLs, reviewer profile data, owner replies, review context, detailed ratings, and place metadata from Google Maps place URLs, CID URLs, review URLs, or Place IDs.
openclaw skills install google-maps-reviews-scraper-apifyThis skill helps an AI agent run the Apify Google Maps Reviews Scraper actor for exact-place review extraction.
Default actor:
V2kIsQs3Ta9C9kkEtx_guru/google-maps-reviews-scraperhttps://apify.com/x_guru/google-maps-reviews-scraperUse this skill when a user asks to:
startUrls or placeIds, maxReviews, reviewsSort, language, and personalData.reviewsStartDate only when the user needs recent reviews.maxTotalChargeUsd when spend matters.scripts/google_maps_reviews_scraper_actor.py or call the Apify API directly.RUN_SUMMARY for diagnostics.startUrls must be array objects: [{"url": "https://www.google.com/maps/..."}].placeIds accepts raw Google Place IDs, place_id: values, or compatible URLs.maxReviews is required in practice and should be a positive integer.reviewsSort must be one of newest, mostRelevant, highestRanking, or lowestRanking.reviewsSort: "newest" with reviewsStartDate.reviewsStartDate accepts YYYY-MM-DD or relative values such as 8 days, 3 months, or 1 year.reviewsOrigin should usually be google; all is accepted for compatibility.personalData=false when the user only needs review text, rating, date, and place metadata.Use an Apify token:
export APIFY_TOKEN='apify_api_xxx'
Never hardcode or print the full token.
The bundled script uses only Python standard library.
Run by Place ID:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_reviews_scraper_actor.py quick-place-id \
--place-id "ChIJ8Q2WSpJZwokRQz-bYYgEskM" \
--max-reviews 25 \
--budget-usd 1
Run by Google Maps URL:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_reviews_scraper_actor.py quick-url \
--url "https://www.google.com/maps/place/Joe%27s+Pizza/..." \
--max-reviews 100 \
--reviews-sort newest \
--budget-usd 1
Run custom JSON:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_reviews_scraper_actor.py run \
--input-file references/sample_input.json \
--budget-usd 1
{
"startUrls": [
{
"url": "https://www.google.com/maps/place/Joe%27s+Pizza/@40.7306597,-74.0021707,17z/data=!3m1!4b1!4m6!3m5!1s0x89c259924a960df1:0x43b20488619b3f43!8m2!3d40.7306597!4d-74.0021707!16s%2Fg%2F1tyyy0n3"
}
],
"maxReviews": 100,
"reviewsSort": "newest",
"language": "en",
"personalData": true
}
{
"placeIds": ["ChIJ8Q2WSpJZwokRQz-bYYgEskM"],
"maxReviews": 250,
"reviewsSort": "mostRelevant",
"reviewsOrigin": "google",
"language": "en"
}
{
"placeIds": ["ChIJ8Q2WSpJZwokRQz-bYYgEskM"],
"maxReviews": 100,
"reviewsSort": "newest",
"reviewsStartDate": "3 months",
"personalData": false
}
The runner returns:
okactorIdfetchedAtinputUseditemCountrows[]Rows are actor dataset items. Important groups:
searchString, inputStartUrl, inputPlaceId, rank, searchPageUrl, searchPageLoadedUrlreviewId, reviewUrl, text, textTranslated, publishAt, publishedAtDate, stars, rating, likesCount, reviewOrigin, originalLanguage, translatedLanguageresponseFromOwnerDate, responseFromOwnerTextreviewImageUrls, reviewContext, reviewDetailedRating, visitedIn, isAdvertisementreviewerId, reviewerUrl, name, reviewerNumberOfReviews, isLocalGuide, reviewerPhotoUrltitle, placeId, fid, cid, kgmid, categoryName, categories, totalScore, reviewsCount, url, imageUrl, priceaddress, city, state, countryCode, location, scrapedAt, languageFor the full contract, read references/input-output-contract.md.
RUN_SUMMARY.personalData=false was used before treating it as missing data.references/input-output-contract.mdreferences/sample_input.jsonreferences/troubleshooting.md