Rakuten Travel Reviews Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
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
| Field | Type | Description |
|---|---|---|
startUrls | array | Rakuten 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. |
hotelIds | array | Hotel numbers (hotelNo) directly, e.g. ["5521"]. Alternative to startUrls. |
maxReviewsPerHotel | integer | Max reviews per hotel. 0 (default) = all available. |
requestDelayMs | integer | Polite 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:
hotelStatsis attached to the first record of each hotel only; it isnullon the rest.displayedTotalReviewCountis Rakuten's all-time displayed total (legacy お客さまの声).collectedReviewCountis the number actually browsable in the current クチコミ system — this is what the actor can collect.stayDateisYYYY-MM(Rakuten exposes only the stay month).postedDateandreplyFromHotelDateareYYYY-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.txtpython -m tests.test_live # live parse + normalization validationapify 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.