The short answer
Tripadvisor set August 31, 2026 for the deprecation of the keys of its old Content API, whose reviews endpoint returns up to 5 of the most recent reviews of a place. Its replacement, Terra, sells access by usage or by contract, and its reviews endpoint draws from a fixed pool set by your contract: the N most recent reviews, or those of the last M months. To read every review of a place, or every new review of a list of places each day, our Tripadvisor Reviews Scraper reads the public pages, without an account or API key. Two New York places over 90 days, 188 reviews, took a 59-second run.
What Tripadvisor's APIs give you
From Tripadvisor's Content API reference and the Terra documentation, read on October 30, 2026:
| Option | Reviews you get | Catch |
|---|---|---|
| Content API (legacy) | “Up to 5 of the most recent reviews” per place. | Keys set to be deprecated on August 31, 2026, per Terra's migration FAQ, which also says the 5,000 free calls of the old API are gone. |
| Terra Discover, self-service | A page of reviews per call, drawn from “a fixed pool defined by your contract: either the N most recent reviews or every review published in the last M months”, as the Location Reviews reference puts it. Filters narrow the pool, never widen it. | First 1,000 billable entities free once per account, then $0.015 down to $0.009 each by monthly volume; one reviews call counts as one entity. 10 requests per second and 10,000 calls per day per API. |
| Terra Growth and Scale | Same API, by contract. | Price and daily limit set by your contract with Tripadvisor. |
| Our Tripadvisor Reviews Scraper | Every review of a place, back to the oldest, or only the new ones since a date or since the last run. Up to 500 places per run. | Paid per review delivered. Tripadvisor's terms and privacy law apply to how you use the data. |
Terra's Review Implementation Policy also asks that review text shown on your site be loaded by a script blocked in robots.txt, “so that Google cannot crawl the review text”. Prices and limits are those of Terra's usage-based pricing and access and limits pages.
Watch the reviews of your places
This script reads the last 90 days of reviews of a hotel and a restaurant, prints the average rating, how many reviews got an owner reply and how fast, and writes the reviews of 3 stars or less that still have no reply to a CSV:
import csv
import statistics
from datetime import datetime
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("quarra/tripadvisor-reviews-scraper").call(run_input={
"startUrls": [
"https://www.tripadvisor.com/Hotel_Review-g60763-d93450-Reviews-Hyatt_Grand_Central_New_York-New_York_City_New_York.html",
"https://www.tripadvisor.com/Restaurant_Review-g60763-d4418144-Reviews-Reichenbach_Hall-New_York_City_New_York.html",
],
"since": "90 days",
"maxReviewsPerPlace": 500,
})
reviews = [r for r in client.dataset(run.default_dataset_id).iterate_items()
if r["type"] == "review" and r["status"] == "ok"]
def day(s):
return datetime.fromisoformat(s.replace("Z", "+00:00"))
for place in sorted({r["placeName"] for r in reviews}):
rs = [r for r in reviews if r["placeName"] == place]
answered = [r for r in rs if r["ownerResponse"]]
delays = [(day(r["ownerResponseDate"]) - day(r["date"])).days for r in answered if r["ownerResponseDate"]]
print(place, len(rs), "reviews, average", round(statistics.mean(r["rating"] for r in rs), 2),
"| answered", len(answered), "| median days to answer", statistics.median(delays) if delays else "-")
# the reviews of 3 stars or less that still have no answer, oldest first
with open("to-answer.csv", "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["placeName", "date", "rating", "title", "reviewUrl"])
for r in sorted(reviews, key=lambda r: r["date"]):
if r["rating"] <= 3 and not r["ownerResponse"]:
w.writerow([r["placeName"], r["date"][:10], r["rating"], r["title"], r["reviewUrl"]])
Tested with apify-client 3.3 on October 30, 2026: 188 reviews in a 59-second run, one review shown twice by the site skipped and not charged.
| Last 90 days | The hotel | The restaurant |
|---|---|---|
| Reviews | 104 | 84 |
| Average rating | 3.52 | 4.93 |
| Reviews of 3 stars or less | 43 | 2 |
| With an owner reply | 101 | 0 |
| Replied within 48 hours | 94 | 0 |
| Delivered as an English translation | 10 | 4 |
Without a language set, each review comes once, mostly in the language it was written in; Tripadvisor gives some in English translation, flagged translated: true with their originalLanguage. Set "languages": ["fr"] and you get the reviews written in French only: on October 18, 2026, 43 of the first 80 reviews Tripadvisor listed under French for the Empire State Building were English reviews translated by machine. With apify-client 2.x, write run["defaultDatasetId"] instead of run.default_dataset_id.
Only the new reviews, every day
Schedule the Actor on Apify with onlyNew and a watch name. Each run then delivers only the reviews that appeared since the last run of the same watch, with no date to move:
{
"startUrls": ["https://www.tripadvisor.com/Hotel_Review-g60763-d93450-Reviews-Hyatt_Grand_Central_New_York-New_York_City_New_York.html"],
"onlyNew": true,
"watchName": "my hotels",
"since": "30 days"
}
On October 29, 2026, two New York places read twice a few minutes apart: the first run delivered 63 reviews, the second none, in 8 seconds, charged the start only. A review that Tripadvisor shows days after it was posted, below reviews already delivered, is still delivered if it appears within a week.
Whole history
Leave since out and raise maxReviewsPerPlace and maxItems to read a place back to its first review. On October 18, 2026, a run read three places with place details, 6,130 reviews and 3 place records in 104 seconds, and the reading went down to offset 14,000 on a hotel with 15,041 reviews without a refusal.
Limits
- No reviewer name, profile or ID. The owner's reply is delivered in full, with the name it uses for the reviewer replaced by
[reviewer]. - Up to 500 place and language pairs per run: with two languages, each place counts twice.
- Tripadvisor lists a pinned review at the top and again at its date, about 1 in 2,400 reviews: it is delivered and charged once.
- A review edited after it was delivered is not delivered again by a watch.
- A link to a single review reads the whole place. Old links to merged or removed places get a free error record, never the reviews of another place.
What it costs
| Apify plan | Per 1,000 reviews | Per 1,000 place records |
|---|---|---|
| Free | $4.60 | $4.60 |
| Starter | $1.75 | $2.70 |
| Scale | $1.40 | $2.30 |
| Business and above | $0.83 | $1.80 |
Plus $0.005 per run start at the default memory. The 188 reviews above cost $0.87 on the Free plan and $0.16 on Business. Place records are charged only when you ask for place details. Reviews outside your filters, translations you did not ask for, repeats and error records are not charged.
Questions
How do I get a Tripadvisor API key?
Terra's migration FAQ says to create an account at tripadvisor.com/developers, sign up for a package and generate a key. A Content API key does not carry over, and the FAQ sets their deprecation for August 31, 2026.
Is the Tripadvisor API free?
Terra Discover gives 1,000 billable entities once per account, then charges by usage. The 5,000 free calls of the Content API are gone, per the same FAQ.
Can I get all the reviews of a place?
Not from Terra: each call draws from the pool your contract sets. Our Actor reads every review the place shows, back to the oldest.
Do I need a Tripadvisor account?
No. The Actor uses no account, cookies or API key.
Run it on the Apify Store
Reviews cost $4.60 per 1,000 on the Free plan ($1.75 on Starter, $1.40 on Scale, $0.83 on Business and above), plus $0.005 per run at the default memory. Errors are not charged, a run that finds nothing new costs only its start, and you can set a maximum cost per run.