Rakuten Travel Reviews Scraper avatar

Rakuten Travel Reviews Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Rakuten Travel Reviews Scraper

Rakuten Travel Reviews Scraper

Scrape structured hotel/ryokan reviews from Rakuten Travel (travel.rakuten.co.jp).

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

OrbitData Labs

OrbitData Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Rakuten Travel Reviews Scraper icon

Rakuten Travel Reviews Scraper

Extract structured hotel & ryokan reviews from Rakuten Travel (楽天トラベル) — Japan's largest accommodation review platform. This is a review-only actor: point it at a hotel and get every customer review as clean JSON, with ratings, sub-ratings, stay/posted dates, room & plan info, and hotel replies.

There is no other Rakuten Travel review-only actor on Apify Store. If you already use a Rakuten/Agoda hotel scraper for metadata, this is the matching review extractor.

Run on Apify

This actor is deployed on the Apify platform: console.apify.com/actors/XxwoZr8npNCXBoQI8

  • Console: open the actor, fill in the Input tab, and click Start.
  • API: POST https://api.apify.com/v2/acts/huggable_quote~rakuten-travel-reviews-scraper/runs?token=<APIFY_TOKEN> with the input JSON as the body.
  • CLI: apify call huggable_quote/rakuten-travel-reviews-scraper --input-file=input.json

Results land in the run's default dataset (export as JSON / CSV / Excel from the Console or the API).

What it does

  • Collects all reviews for each hotel (or up to a per-hotel cap you set).
  • Normalizes Japanese data: full-width → half-width numbers, Japanese dates (2026年5月28日) → ISO-8601 (2026-05-28), clean UTF-8 text with no HTML residue.
  • Captures per-review sub-ratings (room, service, location, bath, facilities, cleanliness — plus breakfast/dinner where available).
  • Captures hotel-level aggregates (average rating, rating distribution, sub-rating averages) on the first record of each hotel.
  • Captures the hotel's reply to each review.

Input

FieldTypeDescription
startUrlsarrayRakuten Travel hotel/review URLs. Any URL containing the hotel number works, e.g. https://review.travel.rakuten.co.jp/hotel/voice/5521 or https://travel.rakuten.co.jp/HOTEL/5521/review.html.
hotelIdsarrayHotel numbers (hotelNo) directly, e.g. ["5521"]. Alternative to startUrls.
maxReviewsPerHotelintegerMax reviews per hotel. 0 (default) = all available.
requestDelayMsintegerPolite delay between requests (default 1000). Rakuten tolerates ~1 req/s.

Example:

{
"startUrls": [{ "url": "https://review.travel.rakuten.co.jp/hotel/voice/5521" }],
"maxReviewsPerHotel": 0,
"requestDelayMs": 1000
}

Output

One dataset record per review:

{
"hotelId": "5521",
"hotelName": "神戸ポートピアホテル",
"reviewId": "fb2cec799cd8e6a8",
"reviewUrl": "https://review.travel.rakuten.co.jp/hotel/voice/5521?page=1",
"reviewerName": "shigeki777",
"reviewerType": "家族",
"tripPurpose": "レジャー",
"reviewerAge": "60代",
"reviewerGender": "男性",
"reviewerReviewCount": 1,
"overallRating": 4.0,
"ratingScale": 5,
"subRatings": { "room": 4.0, "service": 4.0, "location": 4.0, "bath": null, "facilities": 4.0, "cleanliness": 4.0 },
"title": "30年ぶりの宿泊、南館は広くて快適でした",
"text": "今回、30年ぶりに、宿泊しました。\n南館は…",
"stayDate": "2026-05",
"postedDate": "2026-05-28",
"roomType": "南館サウスリゾートフォース(4名様)【禁煙】",
"planName": "【事前決済限定】キャンセル・返金不可プラン 11時OUT<素泊まり>",
"likeCount": null,
"viewCount": 245,
"replyFromHotel": "この度はポートピアホテルをご利用いただき…",
"replyFromHotelDate": "2026-05-30",
"scrapedAt": "2026-06-09T00:00:00+00:00",
"hotelStats": {
"displayedTotalReviewCount": 8136,
"collectedReviewCount": 311,
"averageRating": 4.41,
"ratingDistribution": { "5": 2314, "4": 1490, "3": 261, "2": 101, "1": 65 },
"subRatingAverages": { "room": 4.43, "service": 4.43, "location": 4.43, "breakfast": 4.57, "dinner": 4.54, "bath": 4.06, "facilities": 4.27, "cleanliness": 4.4 }
}
}

Notes:

  • hotelStats is attached to the first record of each hotel only; it is null on the rest.
  • displayedTotalReviewCount is Rakuten's all-time displayed total (legacy お客さまの声). collectedReviewCount is the number actually browsable in the current クチコミ system — this is what the actor can collect.
  • stayDate is YYYY-MM (Rakuten exposes only the stay month). postedDate and replyFromHotelDate are YYYY-MM-DD.
  • reviewerType = companion type (家族/一人/カップル …); tripPurpose = レジャー/ビジネス.
  • Some reviews are photo-only and legitimately have an empty text.
  • Reviewer info is limited to the public display nickname Rakuten shows — no personal data is reconstructed.

How it works

Pure Python: httpx fetches the server-rendered review pages and BeautifulSoup parses them (no headless browser needed). The actor stops immediately and logs clearly if it ever sees a block/CAPTCHA — it does not attempt evasion.

Local development

pip install -r requirements.txt
python -m tests.test_live # live parse + normalization validation
apify run # run the actor locally (Apify CLI)
apify push # deploy to the Apify platform

Actor icon

The icon lives at .actor/icon.svg. Apify sets the Store icon via the Console (it is not applied by apify push): open the actor → Settings → Display information → Icon and upload .actor/icon.svg.