Viator Scraper — Tours, Prices, Ratings & Reviews avatar

Viator Scraper — Tours, Prices, Ratings & Reviews

Pricing

from $2.00 / 1,000 tour scrapeds

Go to Apify Store
Viator Scraper — Tours, Prices, Ratings & Reviews

Viator Scraper — Tours, Prices, Ratings & Reviews

Scrape Viator tours and activities from destination, category and search pages: prices, ratings, reviews, duration, cancellation policy, images, plus optional details and reviews.

Pricing

from $2.00 / 1,000 tour scrapeds

Rating

0.0

(0)

Developer

Trevor Ortega

Trevor Ortega

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Categories

Share

Viator Scraper

Scrape tours and activities from Viator destination, category, attraction and search pages: prices, discounts, ratings, review counts, duration, cancellation policy, images, badges and, optionally, the full tour details (highlights, inclusions, itinerary with coordinates, meeting point, languages, supplier) and the newest reviews of each tour.

Built for reliability: plain HTTP with browser TLS fingerprints, no headless browser, no login. Every Viator page carries its full page model as embedded JSON, so the scraper reads structured data instead of fragile CSS selectors. You pay only for the tours (and reviews) you get.

See also: GetYourGuide Scraper, the companion actor with the same input and output fields for GetYourGuide.

What data does Viator Scraper extract?

Every tour from a listing page (destination, category, attraction or search):

FieldDescription
idViator product code (the 67584P2 at the end of the URL)
titleTour title
urlTour URL
cityCity the tour belongs to ("Paris", "Versailles")
destination, destinationId, regionDestination of the page, its Viator ID and parent region/country
priceFromLowest price ("from" price), number
currencyISO currency code of the prices
originalPricePre-discount price when the tour is on sale, else null
discountPercentDiscount in percent when on sale
memberDiscountPercentExtra discount Viator shows to signed-in members, when offered
priceVariesByGroupSizeTrue when the price depends on group size
ratingAverage rating 1-5 (one decimal, as shown on Viator)
reviewCountNumber of reviews
durationDuration text ("2 hours", "3 hours to 3 hours 30 minutes")
durationMinutes, durationMaxMinutesDuration in minutes (min and max)
freeCancellation, cancellationPolicyFree cancellation flag and text (full policy text with details)
badges"Best Seller", "Likely to Sell Out", "Special Offer", "Travelers' Pick", "Recommended by Travelers", "New on Viator"
isBestseller, isLikelyToSellOut, isSpecialOffer, isTravelersPick, isPrivateTour, isNewBooleans
tagsCard features: "Free Cancellation", "Private Tour", "Price varies by group size", member price
categoriesCategory of the page (category and attraction pages) and the tour's breadcrumb with details
languageCodesGuide language codes
description, shortDescriptionTour description texts
images, photoCount, videoCountImage URLs (large size) and media counts
latitude, longitude, maxGroupSizeOn attraction pages already from the listing; otherwise with details
sourceUrl, scrapedAtStart URL that produced the item and the run timestamp

With Include tour details on, each tour also gets:

FieldDescription
highlightsHighlight bullet points
inclusions / exclusionsWhat's included / not included
additionalInfoAccessibility, fitness level, confirmation and other notes
cancellationPolicy, cancellationPolicyDetailsFull cancellation policy text and rules
itineraryItinerary stop names in order
itineraryStopsStops with duration, admission info and coordinates
meetingPoint, meetingPoints, endPointMeeting point address and instructions, all start points, end point
latitude, longitudeMeeting point coordinates (falls back to the first itinerary stop)
languagesGuide languages ("English", "French", …)
supplier, supplierIdTour operator
maxGroupSize, maxTravelersPerBookingGroup size limit and booking limit
nextAvailableDateNext date with availability
tourOptionsBookable options ("Group tour from Paris", "Semi-private from Paris")
ratingDistributionReview count per star, e.g. {"5": 3274, "4": 601, …}
mobileTicket, reserveNowPayLater, productType, timeZoneBooking details

With Include reviews on, reviews are saved as separate items with type: "review":

FieldDescription
tourId, tourUrlTour the review belongs to
reviewIdViator review ID
ratingStars, integer 1-5
title, textReview title and text
reviewerNameReviewer's nickname as Viator shows it on the review ("Lori_K"); null if the review shows none
reviewerId, reviewerLocationAlways null today: Viator's public reviews show no reviewer profile, id or home town. Kept so the shape matches our other review scrapers
publishedAtPublication date and time (ISO)
helpfulVotes"Helpful" votes
language, isMachineTranslatedLanguage of the site version the review was read from and translation flag
sourceVIATOR or TRIPADVISOR
ownerResponse, ownerResponseDateThe operator's public reply
photoCountNumber of traveler photos attached

Reviewer avatars are not collected, and neither is the account name of the operator staff member who wrote a response (only the response text).

How to use Viator Scraper

  1. Paste one or more Viator URLs into Start URLs: a destination (https://www.viator.com/Rome/d511-ttd), a category (https://www.viator.com/Paris-tours/Walking-Tours/d479-g16-c56), an attraction (https://www.viator.com/Paris-attractions/Eiffel-Tower/d479-a89), a search (https://www.viator.com/searchResults/all?text=rome+food+tour) or a single tour URL. Or type Search terms instead.
  2. Set Max tours to cap the run (and the cost). Pages hold 24 tours each and are followed automatically.
  3. Optionally pick a Currency and switch on Include tour details and/or Include reviews.
  4. Click Start. Results appear in the Dataset tab; export as JSON, CSV or Excel, or read them through the API.

Input example

{
"startUrls": [
{ "url": "https://www.viator.com/Paris/d479-ttd" },
{ "url": "https://www.viator.com/Paris-tours/Walking-Tours/d479-g16-c56" }
],
"searchTerms": ["lisbon sunset cruise"],
"maxItems": 200,
"currency": "EUR",
"includeDetails": true,
"includeReviews": true,
"maxReviewsPerTour": 20
}

Output example

{
"id": "67584P2",
"title": "Versailles Palace and Gardens Tour from Paris",
"url": "https://www.viator.com/tours/Paris/Golden-Versailles-Palace-and-Garden-Tour/d479-67584P2",
"city": "Paris",
"destination": "Paris",
"priceFrom": 72.85,
"currency": "USD",
"originalPrice": null,
"rating": 4.4,
"reviewCount": 4617,
"duration": "3 hours to 3 hours 30 minutes",
"durationMinutes": 180,
"freeCancellation": true,
"cancellationPolicy": "You can cancel up to 24 hours in advance of the experience for a full refund.",
"badges": ["Best Seller", "Likely to Sell Out"],
"isBestseller": true,
"tags": ["Free Cancellation"],
"images": ["https://dynamic-media.tacdn.com/media/photo-o/2e/cc/70/1e/caption.jpg?w=1600&h=1000&s=1"],
"highlights": ["Explore the Palace of Versailles, a UNESCO World Heritage site, with a guide", "…"],
"inclusions": ["Timed entry tickets to the Palace of Versailles", "Guided tour of the Palace of Versailles", "…"],
"exclusions": ["Guide tips", "Hotel Pickup/Drop Off"],
"itinerary": ["Paris", "Palace of Versailles", "Jardins du Chateau de Versailles"],
"meetingPoint": "Café Pierre Hermé Pierre, Pl. de la Résistance, 75007 Paris, France - Your guide will meet you outside of Café Pierre Hermé…",
"latitude": 48.8626944,
"longitude": 2.3010142,
"languages": ["English"],
"supplier": "The Tour Guy",
"maxGroupSize": 25,
"ratingDistribution": { "1": 250, "2": 170, "3": 323, "4": 601, "5": 3274 }
}

Review item:

{
"type": "review",
"tourId": "67584P2",
"reviewId": 1079957055,
"rating": 5,
"title": "A+ Tour",
"text": "Very informative and a beautiful place. I would definitely recommend this tour…",
"reviewerName": "Lori_K",
"reviewerId": null,
"reviewerLocation": null,
"publishedAt": "2026-09-30T08:22:07",
"helpfulVotes": 0,
"language": "en",
"ownerResponse": "Hi, thank you for the wonderful A+ review! …"
}

How much does it cost?

Pay per result: $0.002 per tour from a listing page, plus $0.003 per tour when Include tour details is on (one extra page per tour; a single tour URL as input always counts as a detailed tour), plus $0.001 per review. No subscription; Apify's free plan is enough to try it. 1,000 tours cost $2, or $5 with details.

How do I scrape all tours in a city?

Use the destination URL (https://www.viator.com/<City>/d<id>-ttd) and raise Max tours. The scraper follows /2, /3, … pages until the last page Viator reports (Paris has over 4,000 tours in 171 pages). Category pages (/<City>-tours/<Category>/d<id>-g<n>-c<n>) and attraction pages (/<City>-attractions/<Name>/d<id>-a<n>) are the best way to get one segment, such as walking tours or Eiffel Tower tickets.

How to scrape Viator reviews?

Switch on Include reviews and set Max reviews per tour. Reviews are saved newest first as separate dataset items with type: "review", linked to the tour by tourId. Use the Reviews view of the dataset, or filter by type. Each review carries the reviewer's nickname as shown on Viator.

Can I get prices in my currency?

Yes. Set Currency to any ISO code Viator supports (USD, EUR, GBP, AUD, CAD, …). All prices, including originalPrice, come back in that currency, and currency tells you which one was applied.

Does it work without login or a browser?

Yes. All data comes from public pages that Viator serves to anonymous visitors. No account, cookies or headless browser are needed. Viator uses bot protection; the scraper rotates browser fingerprints and proxy sessions and retries challenged pages automatically. If your log shows many "DataDome challenge" retries, switch the proxy to the RESIDENTIAL group.

Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the API tab for ready-made snippets. Schedule it to track prices, discounts or new tours in a destination.

This Actor collects only data that Viator shows publicly to logged-out visitors: tour listings, prices, ratings, supplier business names, review texts and the reviewer's nickname as shown on each review (usually a first name and last initial, such as "Lori_K"). It does not collect avatars, contact details or anything behind a login. Reviewer nicknames are personal data under GDPR and similar laws: make sure you have a lawful basis for processing them, and do not use them to contact or profile individuals. You are responsible for how you use the data and for complying with Viator's terms and applicable law.

Support

Found a bug or need a field added? Open an issue in the Issues tab; it is usually answered within a day.