Rakuten Travel Room Rates Scraper (楽天トラベル) avatar

Rakuten Travel Room Rates Scraper (楽天トラベル)

Pricing

from $2.10 / 1,000 hotel-priceds

Go to Apify Store
Rakuten Travel Room Rates Scraper (楽天トラベル)

Rakuten Travel Room Rates Scraper (楽天トラベル)

Scrape every plan and room Rakuten Travel (楽天トラベル) prices for a hotel and your dates. Just add hotel numbers, URLs or Japanese names and get stay totals with and without tax, per-night and per-person prices, meals, payment, points, rooms left and hotel details. $3.50 per 1,000 priced hotel-stays.

Pricing

from $2.10 / 1,000 hotel-priceds

Rating

0.0

(0)

Developer

BonCross API

BonCross API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

What is Rakuten Travel Room Rates Scraper (楽天トラベル)?

One Kyoto hotel, two nights in November: 74 bookable plan and room combinations, the cheapest at ¥121,500 for the stay. That's the kind of answer Rakuten Travel Room Rates Scraper gives you. Hand it hotel numbers, hotel URLs or Japanese hotel names with your dates, and it returns everything 楽天トラベル is selling at that hotel, plan (プラン) by plan and room by room, priced for the whole stay.

What a search page won't give you, and this does:

  • The whole grid. A run across 400 hotels returned 16,690 offers, up to 39 plans at a single hotel, and rooms a hotel sells without a named plan are priced as well.
  • Meal terms you can filter on. Each offer says whether breakfast and dinner are included, in Rakuten's wording and as two true-or-false columns.
  • Both sides of the tax line. You get the stay total with tax and before consumption tax, plus per-night and per-person prices.
  • An answer for a sold-out stay. It comes back as its own row, and you pay $0.0005 for it, not the full price.
  • $3.50 per 1,000 priced hotel-stays on the Free plan and $2.60 on Business, however many plans and rooms each stay has.

BonCross Verified means we tested this actor against the live site before release and kept the record:

  • 39 of 39 live checks on its inputs and filters passed on 7 October 2026
  • 5 hotels run the same day on 2 stays each: 7 stays priced, 3 sold out
  • Charges matched the rows
  • A sold-out stay gets its own row, and so does one your filters empty

It also lets you:

  • Price several date ranges for the same hotels in one run
  • Read payment terms, room capacity, Rakuten points and rooms left on each offer
  • Add the hotel's address, coordinates, access, check-in times, parking and FAQ
  • Choose one record per hotel-stay, or one row per offer for a spreadsheet
  • Keep only refundable plans, plans with breakfast or dinner, or offers inside a budget
  • Track the lowest price between runs and get back only the stays that moved

How much does it cost to scrape Rakuten Travel room rates?

EventFree planStarterScaleBusiness
actor-start, per run$0.002$0.002$0.002$0.002
hotel-resolved, per Japanese name looked up (URLs and numbers skip it)$0.002$0.002$0.002$0.002
hotel-checked, per hotel and stay Rakuten Travel answered, priced or not: a sold-out stay, a stay your filters emptied, an unchanged stay in an only-new run and a hotel number with no hotel are charged this alone$0.0005$0.0005$0.0005$0.0005
hotel-priced, per hotel and stay returned, every plan and room included, hotel details included$0.003$0.0027$0.0024$0.0021

Enterprise plans pay the Business price.

$3.50 per 1,000 hotel-stays on the Free plan, $2.60 on Business. You pay per stay, not per row: a hotel with 100 offers costs the same as one with five. Proxy usage and platform usage are included, and there's nothing else on the bill.

What a stay costs when there's nothing to price:

  • Sold out for your dates: one row with isSoldOut: true, charged hotel-checked ($0.0005) and nothing more.
  • Answered, but your filters removed every offer: one row with the reason in error and the number of offers Rakuten had in ratesFound, and the same $0.0005.
  • Unchanged since the last run, in an only-changes run: no row, $0.0005.
  • A hotel number Rakuten doesn't know: $0.0005.
  • A stay Rakuten Travel didn't answer at all: a row that says why, and no charge.

Two worked examples:

  • Ten hotels by number, one stay each: 0.002 + 10 × (0.003 + 0.0005) = $0.037 ($0.028 on Business)
  • Twenty hotels by name, three stays each: 0.002 + 20 × 0.002 + 60 × (0.003 + 0.0005) = $0.252 ($0.198 on Business)

Apify's Free plan gives you $5 of credits a month. At the size of the first example that's about 135 runs, or roughly 1,350 priced hotel-stays.

What data is in each offer?

🏨 Hotel name, Rakuten number and URL🔗 Plan list URL
Plan name, plan id and plan URL🛏️ Room name, code and type (bed, size, bath)
💴 Stay total, with and without taxPer-night and per-person prices
🍽️ Meals, with breakfast and dinner flags👥 Room capacity
Room notes and plan description💳 Payment terms
Rakuten points, point rate and member discountAvailability and rooms left per offer
Plan count, room rows and available offersLowest total and lowest refundable total, with plan and room
📍 Address and coordinates🚉 Access and parking
🕒 Check-in and check-out timesHotel FAQ entries
📈 Previous lowest price and change🖼️ Hotel, plan and room images
📅 Plan sale periodDiscount name and amount

How to scrape Rakuten Travel room rates

  1. Create a free Apify account.
  2. Open Rakuten Travel Room Rates Scraper.
  3. List your hotels. A Rakuten hotel number, a hotel URL or the hotel's name in Japanese all work.
  4. Set the dates, adults, children and rooms.
  5. Switch on hotel details or a plan filter if you want them, and press Start.
  6. Download the result as Excel, CSV, JSON, XML or HTML.

Don't have hotel numbers yet? Rakuten Travel Search Scraper lists the hotels in an area, and its hotelId column is what goes in here.

⬇️ Input

Paste hotels into "Hotels" as numbers (1369), URLs or Japanese names. Numbers and URLs cost nothing to resolve. A name is looked up on Rakuten and costs one hotel-resolved. English hotel names aren't in Rakuten's index and won't resolve.

Have a long list of links? "Start URLs" loads them in bulk from a file, a Google Sheet or a remote list, and is combined with whatever is in "Hotels".

To price more than one date range, fill in "Multiple stays". Every hotel is priced for every stay, up to 366 stays a run.

Two caps keep a run in hand, and it stops at whichever it reaches first. "Maximum hotel-stays for the whole run" counts priced hotel-stays. "Maximum rows for the whole run" counts rows. If the row cap lands partway through a stay, you get that stay's cheapest offers and it's billed as one stay. Nothing past a cap is fetched or charged for.

Every plan for one hotel

{
"hotels": ["1369"],
"checkIn": "2026-11-17",
"checkOut": "2026-11-19",
"adults": 2,
"includeHotelDetails": true
}

Several hotels, refundable plans with breakfast under a budget

{
"hotels": ["1369", "7365", "ホテルグランヴィア京都"],
"checkInDaysAhead": 30,
"nights": 1,
"refundableOnly": true,
"breakfastOnly": true,
"maxTotalForStay": 60000
}

Two stays, one row per offer

{
"hotels": ["1369", "178586"],
"stays": [
{ "checkIn": "2026-11-17", "checkOut": "2026-11-19" },
{ "checkIn": "2026-12-24", "checkOut": "2026-12-26" }
],
"flattenRooms": true
}

A daily grid watch that returns only changes

{
"hotels": ["1369", "7365"],
"checkInDaysAhead": 30,
"nights": 1,
"priceStoreName": "rakuten-grid",
"onlyNewOrChanged": true
}

Settings the examples leave out:

  • "Rooms" (default 1) and "Children" (default none). Children are counted per room in Rakuten's own child categories, for example { "lowerElementary": 1 }.
  • "Available rooms only" (on by default) drops plan and room rows Rakuten shows without a price, because they're sold out for your dates or outside the plan's capacity.
  • "Dinner included only" keeps plans with dinner (夕食あり). "Breakfast included only" does the same for breakfast.
  • "Minimum stay total" (JPY, 0 turns it off) drops offers below this tax-inclusive total. The ceiling is "Maximum stay total".
  • "Include plan descriptions" is on by default. Plan text can be long, and switching it off keeps records small.

For developers

  • maxItems caps priced hotel-stays and maxRows caps rows. Sold-out and unchanged stays aren't counted by maxItems.
  • With flattenRooms, maxRowsPerStay (default 300, which is also the maximum) keeps each stay's cheapest offers. A stay is billed once however many rows it has.
  • A hotel's plan list is read up to 100 plans a stay, or 60 when nothing on its first page is bookable.
  • stays takes { "checkIn", "checkOut" } pairs and overrides the single dates. Lowercase checkin, checkout and checkinDaysAhead are accepted too.
  • priceStoreName names the store that remembers each hotel-stay's lowest total. Later runs fill previousLowestTotal, priceChange, priceChangePct and previousScrapedAt, and onlyNewOrChanged skips stays whose lowest total hasn't moved.
  • maxConcurrency (default 16, from 1 to 32) sets how many requests run at once. delayMs (default 0, up to 10,000) adds a pause before each request. Lower the first only if a run reports errors.
  • A run cut off by its timeout keeps every stay it had already returned.

⬆️ Output

By default you get one record per hotel and stay, with all its offers in an offers list. With "One row per plan × room" switched on, each offer is a row of its own with the hotel-stay fields beside it.

{
"input": "171941",
"id": "171941-2026-11-05-2026-11-06",
"hotelId": 171941,
"hotelName": "リッチモンドホテルプレミア京都駅前",
"url": "https://travel.rakuten.co.jp/HOTEL/171941/171941.html",
"planListUrl": "https://hotel.travel.rakuten.co.jp/hotelinfo/plan/171941?f_t…",
"checkIn": "2026-11-05",
"checkOut": "2026-11-06",
"nights": 1,
"adults": 2,
"rooms": 1,
"children": {},
"currency": "JPY",
"pricesIncludeTax": true,
"planCount": 10,
"roomRowCount": 128,
"availableCount": 49,
"offerCount": 49,
"isAvailable": true,
"lowestTotal": 45600,
"lowestPerNight": 45600,
"lowestTotalExcludingTax": 41455,
"lowestPerNightExcludingTax": 41455,
"lowestPerPerson": 22800,
"lowestPlan": "【特別限定料金】20%OFF -素泊まり-",
"lowestRoom": "スタンダードダブル −アウトサイド−【禁煙】",
"lowestRefundableTotal": 45600,
"previousLowestTotal": null,
"priceChange": null,
"priceChangePct": null,
"previousScrapedAt": null,
"scrapedAt": "2026-10-02T13:17:41.594Z",
"offers": [
{
"planId": 6209028,
"planName": "【特別限定料金】20%OFF -素泊まり-",
"isNonRefundable": false,
"planUrl": "https://hotel.travel.rakuten.co.jp/hotelinfo/plan/171941?f_camp_id=6209028&f_flg=PLAN",
"planPeriod": "2025年04月10日〜2026年12月31日",
"planDescription": "京都 ふたつのプレミアラウンジ 〜それぞれの時を楽しみ、空間を楽しむ〜\n京都に2店舗あるリッチモンドホテル『プレミア京都…",
"roomCode": "stod",
"roomName": "スタンダードダブル −アウトサイド−【禁煙】",
"roomType": "ダブル 19m²/バス・トイレ付",
"roomRemark": "【客室情報】・シモンズ社製ベッド(140cm幅1台)・WiFi接続無料・45型TV設置・ユニットバス・ズボンプレッサー、アイロン設置",
"meals": "朝食なし 夕食なし",
"isBreakfastIncluded": false,
"isDinnerIncluded": false,
"capacity": "2人〜3人 子供料金設定有り",
"payment": "予約時オンラインカード決済・現地払い",
"isAvailable": true,
"priceTotal": 45600,
"priceTotalExcludingTax": 41455,
"pricePerNight": 45600,
"pricePerNightExcludingTax": 41455,
"pricesIncludeTax": true,
"pricePerPerson": 22800,
"currency": "JPY",
"points": 414,
"pointRate": 1,
"discountTotal": 0,
"discountName": null,
"memberDiscount": 0,
"roomsLeft": 1,
"roomsLeftText": "残り1部屋",
"images": [
"https://trvimg.r10s.jp/share/image_up/171941/LARGE/2d21ec53b…",
"https://trvimg.r10s.jp/share/image_up/171941/LARGE/a4a161558…"
]
}
]
}

With "Include hotel details" on, each record also has a hotel block with the address, coordinates (lat, lng), check-in times, access, parking and FAQ. This one is hotel 1369:

"hotel": {
"name": "京都センチュリーホテル",
"address": "〒600-8216京都府京都市下京区東塩小路町680",
"checkInFrom": "15:00",
"checkInUntil": "24:00",
"checkOutUntil": "12:00",
"access": "JR京都駅中央口<ニデック京都タワー>より徒歩約2分。",
"parking": "1泊¥2000(15:00-翌日12:00)(収容台数50台まで・予約不可)",
"faq": [ … ],
…
}

Tax fields. pricesIncludeTax is true where the price is Rakuten's tax-included total, on each offer and on the hotel-stay row (where it describes the lowest offer). It's empty where a row has no price, a sold-out stay included. priceTotalExcludingTax and pricePerNightExcludingTax on an offer, and lowestTotalExcludingTax and lowestPerNightExcludingTax on the row, give the same stay before consumption tax, as Rakuten states it. A local accommodation tax or hot spring tax the property collects on arrival isn't in either figure and has no amount on the site.

A sold-out stay is one row with isSoldOut: true and an empty offers list.

A few more columns: hotelUrl is the hotel's Rakuten Travel page, the same address as url. On each offer, consecutiveNote is the plan's note on how many nights it can be booked for, in Japanese (for example 「※このプランは1泊限定で予約可能となります。」), and null when the plan has none. planImages lists up to eight of the plan's own photo URLs and is empty when it has none.

How big is a grid, and how long does a run take?

HotelGiven asOffersLowest total
おやど 古都の夢URL7¥154,000
京都センチュリーホテルnumber 136974¥121,500
ホテルグランヴィア京都Japanese name52¥82,800

Those three came from one run for 17 to 19 November with hotel details on, each with coordinates and check-in times. A single hotel can list more than a hundred plan and room rows, and the bookable ones are the ones with a price.

RunRecordsTime
One hotel, one stay14.3 s
Four hotels × three stays12 hotel-stays4.1 s
400 hotels across Japan, one stay (3 October 2026)400 hotel-stays, 16,690 offers, up to 39 plans a hotel179 s

The two small runs were measured on Apify on 1 October 2026. The large one works out at about 136 hotel-stays a minute, which puts roughly 8,000 hotel-stays inside the default one-hour run limit. Split a longer list over several runs. However many pages Rakuten spreads a hotel's plans over, you get them all, and a room sold without a named plan appears with plan id 0.

Scheduled grid watches, the API and AI agents

For rate monitoring, put the run on an Apify Schedule with "Check-in days ahead" and a price memory store, and switch on "Only new or changed". Each run then reports the hotel-stays whose lowest total moved, and the unchanged ones cost $0.0005 each. Slack, Google Sheets, Zapier, Make and Airbyte connect through Apify's integrations, and a webhook can fire when a run ends.

From your own code, POST https://api.apify.com/v2/acts/boncross~rakuten-travel-room-rates/run-sync-get-dataset-items with the input JSON as the body returns the dataset in a single call for small runs. Larger ones go through the asynchronous run endpoint. The apify-client packages on NPM and PyPI wrap both.

An agent in Claude, Cursor, ChatGPT or another MCP client can use the actor through the Apify MCP server at mcp.apify.com, where it shows up as a tool named boncross/rakuten-travel-room-rates. Asking it to price a Japanese hotel for given dates and read out the plans with dinner is a fair first test.

FAQ

How do I know if a plan is refundable?

Rakuten marks a non-refundable plan in its name, with 返金不可. Those offers have isNonRefundable: true, and "Refundable plans only" drops them. On one Kyoto hotel, 18 of 71 room offers had the mark. Many hotels sell no such plan, and there the filter removes nothing. Everything else follows the hotel's own cancellation policy, which is on the hotel page and on the plan page linked from each offer.

Why do some offers have no price?

That plan and room combination isn't bookable for your dates or party. With "Available rooms only" on, which is the default, you never see them. Turn it off and they're returned with isAvailable false.

What do I get, and pay, when a hotel is sold out?

One row for that hotel and stay with isSoldOut: true, at $0.0005. If Rakuten Travel doesn't answer for a stay at all, the row says why and it's free.

Is the price for the whole stay?

It is, for the party and rooms you asked for, with tax. Per-night and per-person figures are beside it, and the before-tax total is in priceTotalExcludingTax.

Can I use an English hotel name?

Not here. Rakuten's hotel lookup knows the Japanese names only. Use the hotel number or URL, or the name as Rakuten writes it (ホテルグランヴィア京都).

Do I need proxies, a Rakuten account or an API key?

No to all three. Proxy usage is part of the price, and nothing needs configuring.

What are the limits?

  • Per-plan cancellation terms aren't returned, and cancellation is empty. Refundability comes from the plan name alone.
  • Member-only rates and coupons need a login and aren't included. memberDiscount is the advertised member amount where Rakuten shows one.
  • Names and texts are Japanese.
  • One run prices about 8,000 hotel-stays inside the default one-hour limit (measured 3 October 2026, about 136 a minute).

Scraping publicly available data is generally legal. This actor reads only what the site serves to any logged-out visitor. You're responsible for complying with Rakuten's terms and applicable law in your use of the data.

More from BonCross

Your feedback

If a plan is missing from a grid, or a total differs from what Rakuten shows for the same dates and party, tell us on the Issues tab in Apify Console and include the hotel number and dates. BonCross reads every issue and answers there.