Scraper for TripAdvisor — Restaurants, Hotels & Reviews avatar

Scraper for TripAdvisor — Restaurants, Hotels & Reviews

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Scraper for TripAdvisor — Restaurants, Hotels & Reviews

Scraper for TripAdvisor — Restaurants, Hotels & Reviews

Independent, unofficial scraper for TripAdvisor — no key, no login. Get restaurants, hotels, attractions & reviews by city, geoId or URL: ratings, prices, cuisine, coordinates & review text. Not affiliated with or endorsed by TripAdvisor; all trademarks belong to their owners.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

2

Monthly active users

18 hours ago

Last modified

Share

Tripadvisor Hotels & Reviews Scraper

Independent, unofficial tool. Not affiliated with, endorsed by, or sponsored by Tripadvisor LLC. Tripadvisor trademarks belong to their owners.

Extract public hotel shelf cards and review rows without a Tripadvisor API key, login, user cookie, or browser. Results are written as flat records to the default Apify dataset.

Current upstream status — 2026-08-01

ModeSurfaceStatus
hotelsGraphQL hotel shelves, then the hotel list pages for depthWorking (residential + Apify UNBLOCKER)
reviewsGraphQL review list, with the review pages as fallbackWorking (residential + Apify UNBLOCKER)
restaurants, attractions, search, detailsHTML pages / TypeAheadJsonWorking through Apify's UNBLOCKER route (TripAdvisor's DataDome refuses plain residential exits)

The healthy modes use the registered GraphQL operations currently called by Tripadvisor's public web client. They require no user-supplied credential. Registered query IDs are upstream implementation details and can rotate: if Tripadvisor removes them, the Actor fails explicitly until the current web-client operation is identified and revalidated. It never converts a blocked or structurally unknown response into a misleading successful empty dataset.

List modes accept a numeric geoId (for example g187791), a list URL or a free-text place name ("Rome", resolved through TripAdvisor's autocomplete); reviews and details take a d… locationId or a detail URL.

Quick start

Empty input defaults to a bounded hotel shelf for Rome (g187791). An explicit run:

{
"mode": "hotels",
"url": "https://www.tripadvisor.com/Hotels-g187791-Rome_Lazio-Hotels.html",
"maxResults": 20,
"language": "en-US",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Reviews for a known location:

{
"mode": "reviews",
"url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html",
"maxResults": 100,
"language": "en-US"
}

Inputs

FieldTypeMeaning
modestringhotels (default), reviews, or a legacy mode
querystringGeoId such as g187791 is recommended; free text is legacy/best effort
locationIdstringGeoId for hotels or d… POI id for reviews/details
urlstringFull matching Tripadvisor URL; takes priority
locationIdsstring[]Batch inputs for legacy details mode
maxResultsintegerOutput cap, not a guaranteed row count
languagestringRequested locale; Tripadvisor may still return mixed-language content
proxyConfigurationobjectDefaults to Apify RESIDENTIAL

Hotel shelves are a bounded discovery surface, not deep search pagination. maxResults caps the unique cards available in the returned shelves. Reviews paginate in batches until the cap, upstream end, or the Actor time budget.

Output

Every row includes _mode, sourceSurface, and scrapedAt.

Hotel rows can include:

  • geoId, locationId, name, rating, numReviews
  • lowestOffer (display text, not a normalized or guaranteed bookable rate)
  • photoUrl, photoCaption, awardType, awardYear
  • shelfType, shelfTitle, url

Review rows can include:

  • locationId, locationName, reviewId, rating, title, text
  • publishedDate, stayDate, tripType
  • username, userContributions, helpfulVotes, ownerResponse, url

Fields are optional because Tripadvisor controls the live payload. IDs, counts and ratings are normalized where possible; no inference fills missing source data.

Operational behavior

  • Requests use got-scraping through Apify residential proxies with a sticky cookie/IP session after success.
  • DataDome-protected pages (lists, autocomplete, details, review pages) go through Apify's UNBLOCKER route; GraphQL operations use residential sessions and move to the unblocker when refused. Network errors are retried with a fresh session.
  • GraphQL errors, unknown payload shapes, blocked pages, and zero trustworthy rows fail the run explicitly.
  • Trustworthy partial review rows already written before a later pagination failure remain in the dataset.
  • No headless browser is launched and no user credentials are collected.

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('YOUR_ACTOR_ID').call({
mode: 'hotels',
query: 'g187791',
maxResults: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Limits and responsible use

Tripadvisor can change or withdraw public surfaces without notice. Residential proxy access improves reachability but is not a guarantee. Review text, photos, reviewer names, and other fields may be protected by copyright or privacy law. Follow Tripadvisor's terms and applicable law, minimize personal-data use, and do not use outputs for spam, harassment, or re-identification. Consider Tripadvisor's official Content API when you need a supported commercial integration.

How much for TripAdvisor data can you extract in one run?

A single run returned 20 rows in 5 seconds on the example input. That example is deliberately narrow; the result limit and the input list are both yours to widen. That is roughly 200 rows a minute.

There is no hard ceiling built into this Actor. What bounds a run is the result limit you set, the breadth of the input you give it, and how much for TripAdvisor itself publishes. Because billing is per result, a wider run costs proportionally more and a narrow one costs almost nothing — so it is worth starting small and scaling once the output looks right.

for TripAdvisor scraping — frequently asked questions

Do I need a for TripAdvisor API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

How do I export for TripAdvisor data to CSV, Excel, JSON or Google Sheets?

Open the Storage tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

Can I schedule this for TripAdvisor scraper to run daily or hourly?

Yes. Use the Schedules tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the rows you care about really do change that fast.

How many rows can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

This Actor collects only information that for TripAdvisor publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

What happens if for TripAdvisor blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run fails with the reason instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

How to scrape for TripAdvisor without an API

for TripAdvisor has no public bulk export for this data, which normally leaves copy-and-paste or a custom crawler. This Actor is the second one, already built and maintained: it reads the public pages, follows the pagination, and hands back clean rows.

  1. Fill in the input below — the example is prefilled, so Start works straight away.
  2. Watch the log name each page it walks and how many rows each one returned.
  3. Export from Storage, or pull the dataset over the API into your own pipeline.

No API key, no account, no browser extension, no manual copying.

Export for TripAdvisor data to CSV, Excel, JSON or Google Sheets

Every run writes a dataset you can download as CSV, Excel, JSON, JSONL, XML or an HTML table. For a live feed rather than a download, point Google Sheets, Airtable, Power BI or your own database at the dataset URL and it refreshes with each run.

Changelog

2026-08-01

  • Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
  • Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
  • Kept the last successful residential proxy session, browser fingerprint and cookie jar sticky across typeahead and subsequent list/detail requests; blocked sessions now rotate together with their cookies.
  • Added blocked/challenge and response-structure guards so an entirely blocked or structurally unreadable run fails explicitly instead of reporting SUCCEEDED with an empty dataset.
  • Corrected priceLevel normalization so ranges such as $$ - $$$ produce the valid lower band 2 instead of the impossible summed value 5, while preserving the raw priceRange.
  • Aligned explicit URL priority, the UI maxResults prefill, locale headers, input copy and README claims with best-effort source coverage.
  • Recovered hotels and reviews through Tripadvisor's current public registered GraphQL hotel-shelf and review-list operations, repeatedly verified over Apify RESIDENTIAL routing without a user key or cookie.
  • Moved empty input and Console defaults to hotels plus Rome geoId g187791 so the healthy path does not depend on the currently challenged TypeAheadJson surface.
  • Limited blocked responses to one residential-session rotation, kept explicit fail-closed behavior, and documented the persisted-query rotation recovery path and current BLOCKED status of legacy HTML modes.
  • Added typed GraphQL dataset fields and curated explicit-URL variations for Rome hotels and Michelangelo reviews.

2026-08-01 — deterministic hotel/review recovery

  • Replaced challenged hotel HTML and review-page fetches with current registered GraphQL hotel-shelf and review-list operations.
  • Moved empty input and Console defaults to hotels + Rome g187791, avoiding challenged autocomplete.
  • Reduced blocked-response handling to one session rotation and kept fail-closed semantics.
  • Added typed GraphQL output fields, curated Rome hotel/Michelangelo review validations, and explicit upstream-status/recovery documentation.
  • Preserved legacy modes for compatibility while marking their current residential-proxy status accurately.

2026-08-01 — parser and session hardening

  • Kept successful proxy, browser fingerprint, and transient cookie jar together across related legacy requests.
  • Added challenge/structure guards so blocked or unreadable runs do not report successful empty datasets.
  • Corrected priceLevel: $$ - $$$ now yields lower band 2 while preserving priceRange.

*Maintained: last verified 2026-09-01 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).


Use cases

  • Export records in bulk and analyse them in a spreadsheet or database.
  • Track how the data changes over time by scheduling repeat runs.
  • Feed records into a dashboard, CRM or internal tool through the Apify API.
  • Build a research dataset without writing or maintaining a scraper.
  • Monitor Scraper for TripAdvisor for new entries and alert your team when they appear.

Pricing

This Actor is pay per result: you are charged for the rows it writes to your dataset, not for the time it spends running. There are no platform fees to calculate on top, and higher Apify plans pay a lower rate per result. A run that returns nothing costs nothing.

This Actor collects only publicly available data — the same content any visitor to Scraper for TripAdvisor can see without logging in. It does not bypass authentication and does not gather private information. How you use the output is your responsibility: respect the source's terms, applicable copyright, and data-protection law such as GDPR where personal data is involved.

Other Actors from the same collection: