Skip to main content
Travel and review data feeds rate shopping, hotel benchmarking and reputation monitoring. This page covers hotel details, room prices as travelers in different countries see them, and public reviews, using Booking.com and Trustpilot as the worked examples. Uses: Fetch with js_render, premium_proxy, proxy_country and wait_for; Extract (extract=auto); css_extractor; Adaptive Stealth Mode (mode=auto)

Ask your AI agent

With the Zenrows MCP server connected to Claude, Cursor or any MCP client, paste this prompt. Your agent picks the right Zenrows tools and settings on its own.

Get hotel details from Booking.com

Booking.com is prepared for Extract, so extract=auto returns the property, location, review scores, room types and house rules as JSON. Include check-in and check-out dates in the URL so the page shows availability, and wait for the room table (.hprt-table) so the whole page is in place before Extract reads it.

Example output

Omit extract_fields to get every group, including facilities, photos, fine_print, the coordinates in location and the per-category scores in review_summary (cleanliness, comfort, location, staff, value for money).

Compare room prices by traveler location

Hotel sites show prices in the traveler’s currency and can quote different rates by market. Request the same dates from different countries with proxy_country, and read the room names and prices with css_extractor:
Python (Requests)
prices lists every rate row in the room table, in page order, so a room with several rate plans has several prices. Add the selector for the rate conditions, or loop over prices to pick the lowest.

Collect reviews from Trustpilot

Review pages render each review in a card. css_extractor returns one list per field, so the star ratings, titles and texts line up review by review. The selectors below use Trustpilot’s data-* attributes, which are more stable than its class names:
Python (Requests)
The selectors leave out reviewer names and profiles, so you keep only the review content. For sentiment analysis or summaries with an LLM, request the page with response_type=markdown instead and send the text to your model, see Markdown for LLMs.

Customize it

Troubleshooting

  • no_data_extracted (422) on a hotel page: Extract read the page before the room table was in place. Use js_render=true and premium_proxy=true with wait_for=.hprt-table, as in the examples. See no_data_extracted.
  • prices is empty: the page has no availability for those dates, or the table hadn’t loaded. Check the dates in the URL and keep wait_for=.hprt-table.
  • Prices are in an unexpected currency: the currency follows the request’s location. Set proxy_country to the market you want.
  • Review lists have different lengths: some reviews have no title or text. Read the cards in the order they appear and compare the list lengths before you pair them.

Get content as seen from any country

Geotarget any request with proxy_country.

Scrape JavaScript-rendered pages

Render JavaScript and wait for the elements you need.

Get structured JSON from any page

How extract=auto and prepared domains work.

Build a price monitor

Track rates on a schedule and store the history.