Captured from the Booking Android app on 2026-10-23, driven in an instrumented emulator with the traffic recorded alongside, so each number on screen is joined to the response it came from rather than matched by eye.
Describes build 1.0.173 of rl1987/booking-api-scraper, deployed 2026-10-29. The column set last changed 2026-10-29. Earlier builds can return a different one.
Captured from the Booking Android app on 2026-10-23, driven in an instrumented emulator with the traffic recorded alongside, so each number on screen is joined to the response it came from rather than matched by eye.
Property: BRYQS Hotel KL Sentral (hotel_id 1380580) · Stay: 2026-10-23 to 2026-10-24, 1 room, 1 adult · Currency: MYR
One property on one night is one observation. These pairings show which field this screen read, and that is enough to settle which column to compare against - it is not a claim that every property behaves identically. Where a column is known to differ by path, its own page says so.
The capture was anonymous and read-only throughout: no account, no sign-in, no booking. The in-app currency picker sits behind the account wall, so the currency above is the one the app chose, not one we selected - it served the property’s currency from a European exit IP rather than the exit’s.
Endpoint: mobile.roomList -> [0].block[0].product_price_breakdown

| # | On screen | Column | Response field |
|---|---|---|---|
| 1 | “MYR 167 x 1 night” | priceBeforeDiscount / price.before_discount | product_price_breakdown.strikethrough_amount.amount_rounded = MYR 167 (167.0108) |
| 2 | “- MYR 16” | the discount, as Booking states it | product_price_breakdown.items[3].item_amount = MYR 16 (15.7058), name 'Bonus savings' |
| 3 | “MYR 151” | price.total AND price.total_with_charges - identical here | product_price_breakdown.gross_amount = MYR 151 (151.305), taxes already inside it |
| 4 | “Additional charges may apply” | price.extra_charges - prose, no figure | product_price_breakdown.charges_details.translated_copy (amount.value 0.0, mode 'incalculable') |
Columns above are documented in Accommodations , Watched rates .
Endpoint: mobile.roomList -> [0].block[0]
![Room list - one card is one block, which is one row in products[]](/img/data-dictionaries/booking-com/103-room-list-annotated.png)
| # | On screen | Column | Response field |
|---|---|---|---|
| 1 | “Family Room” | roomName (roomtype_id 13 -> roomTypeCode FAMILY) | block[0].room_name |
| 2 | “2 king beds” | rooms[].beds[] - bed typeId 3, EXTRA_LARGE_DOUBLE_BED | room_list[0].children_and_beds_text / block_text |
| 3 | “Non-refundable” | cancellationType | block[0].paymentterms.cancellation.info.refundable = 0 |
| 4 | “Pay the property before arrival” | prepaymentPolicy / paymentTypes | block[0].paymentterms.prepayment.type = full_prepayment |
| 5 | “No credit card needed” | paymentTerms.noCardNeeded | block[0].no_cc_object present |
| 6 | “MYR 151” | price.total - the same figure the sheet totals | block[0].product_price_breakdown.gross_amount |
Columns above are documented in Accommodations , Watched rates , integer ID reference .
Endpoint: mobile.roomList -> [0].block[0].paymentterms

| # | On screen | Column | Response field |
|---|---|---|---|
| 1 | “You’ll be charged a prepayment of the total price at any time.” | prepaymentPolicy = full_prepayment, and why dueDate is null here | paymentterms.prepayment.description - 'at any time', so Booking states no deadline |
| 2 | “Note that if canceled, modified, or in case of no-show,” | cancellationType = NON_REFUNDABLE | paymentterms.cancellation.info.refundable = 0 |
Columns above are documented in Watched rates .
Endpoint: mobile.hotelPage + GraphQL PropertyPageReviewsQuery

| # | On screen | Column | Response field |
|---|---|---|---|
| 1 | “3.0 out of 5 stars” | starRating | hotelPage[0].accuratePropertyClass = 3 |
| 2 | “Review score of 7.1 out of 10” | reviewScore | property.reviewScore = 7.1 |
| 3 | “22, Jalan Tun Sambanthan 3, Brickfields,” | address + district + city + countryCode | hotelPage[0].address + .district + .city + .zip + .country_trans |
| 4 | “This is a Preferred Plus property” | isPreferredPlus | hotelPage[0].is_preferred_plus = 1 |
Columns above are documented in Accommodations , Reviews & scores .
Endpoint: mobile.saba (appsearch) -> ...property

| # | On screen | Column | Response field |
|---|---|---|---|
| 1 | “BRYQS Hotel KL Sentral.” | one card = one property row: name, starRating, reviewScore, reviewsCount, price, priceBeforeDiscount | property.name / .propertyClass / .reviewScore / .reviewCount / .priceBreakdown.grossPrice / .strikethroughPrice |
Columns above are documented in Accommodations , Reviews & scores .