Viator Scraper - Tours, Prices, Ratings & Duration avatar

Viator Scraper - Tours, Prices, Ratings & Duration

Pricing

from $2.47 / 1,000 activity delivereds

Go to Apify Store
Viator Scraper - Tours, Prices, Ratings & Duration

Viator Scraper - Tours, Prices, Ratings & Duration

Scrape Viator tours and activities by destination, keyword or link: price and discount, rating, review count, duration, free cancellation, badges, languages, photos and, on demand, supplier, inclusions, meeting point and itinerary stops. Error rows are free.

Pricing

from $2.47 / 1,000 activity delivereds

Rating

0.0

(0)

Developer

Scrapewise Data

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Viator Scraper: tours and activities with prices, ratings, reviews and duration

Viator Scraper collects tours, tickets and activities from Viator for any destination or keyword, without an account, cookies or a browser. Each activity comes back as one clean row: the title and link, the "from" price and the price before a discount, whether it is priced per person or per group, the exact rating and review count, the duration, free cancellation, badges such as Likely to Sell Out, the guide languages, a short and a long description and the main photo. Turn on includeDetails and each row also gets the supplier company, highlights, what is included and excluded, additional info, meeting points with coordinates, the itinerary stops, age bands, the maximum group size and the tour options.

It is used to monitor prices and ratings of tours in a destination, to benchmark a tour operator against its competitors, to find the best rated activities for a travel guide or app, to research what sells in a city before launching a product, and to feed AI travel assistants with fresh activity data.

At a glance

WhatPrice
Activity deliveredUS$ 2.90 per 1,000 activities (US$ 0.0029 each)
Run startUS$ 0.005 per run
  • 500 activities of one city = US$ 1.46.
  • The tour page details (includeDetails) cost nothing extra per activity.
  • Error rows and duplicates are never charged. maxItems is a hard cap, and a spending limit set on the run stops it cleanly with everything delivered so far.

Quick start

{
"searchQueries": ["Lisbon"],
"maxItems": 100
}

A destination name lists every activity Viator has there (Lisbon has more than 3,000). A keyword gives Viator's search results across the world (up to 200):

{
"searchQueries": ["kayak tour", "food tour Rome"],
"minRating": 4.5,
"minReviews": 50,
"includeDetails": true,
"maxItems": 60
}

Links work too:

{
"startUrls": [
{ "url": "https://www.viator.com/Rome/d511-ttd" },
{ "url": "https://www.viator.com/searchResults/all?text=sunset%20cruise" },
{ "url": "https://www.viator.com/tours/Paris/Golden-Versailles-Palace-and-Garden-Tour/d479-67584P2" }
]
}

An empty input runs the example destination (Lisbon) so you can see the output right away.

Input

FieldWhat it does
searchQueriesDestination names or activity keywords, one per line. Each line is one search.
startUrlsDestination pages (/Lisbon/d538-ttd), search pages (/searchResults/all?text=...) or tour pages (/tours/...).
minRatingKeep only activities rated at least this, on Viator's 0 to 5 scale (for example 4.5).
minReviewsKeep only activities with at least this many reviews.
maxPriceKeep only activities whose "from" price is at or below this value.
maxDurationHoursKeep only activities that last at most this many hours.
freeCancellationOnlyKeep only activities with free cancellation.
includeDetailsOpen each tour page for supplier, inclusions, meeting points, itinerary and more (default off; about 3 times slower).
onlyNewSkip activities delivered in earlier runs of the same search, for schedules. Skipped rows are not charged.
maxItemsCap for the whole run (default 50; 0 = no cap).
proxyConfigurationApify datacenter proxy by default. US residential is used only if datacenter IPs are refused.

searchQuery, keyword, destination, location, maxResults and urls are accepted too, so inputs written for other Viator tools keep working.

Output

FieldWhat it is
productCode, title, urlViator product code, title and tour page
destination, destinationId, countryWhere it happens (country comes on destination searches)
price, originalPrice, discountPercent, currency"From" price, price before the discount and the discount
pricingType, priceVariesByGroupSizePER_PERSON or PER_GROUP, and whether the price changes with the group size
rating, ratingRounded, reviewCountExact rating (for example 4.8), the rounded stars Viator shows, and the number of reviews
durationMinutes, durationMaxMinutes, durationDuration in minutes (with the upper end for flexible durations) and as text
freeCancellation, likelyToSellOut, isNew, isPrivateTour, badgesFlags and badges shown on the listing
languagesGuide languages (codes)
summary, descriptionShort and long description
image, photoCountMain photo (largest size) and number of listing photos
positionPosition in Viator's list for the search
supplierName, productType, timeZoneThe company that runs the activity, its type and local time zone (details)
highlights, inclusions, exclusions, additionalInfoWhat you get, what you do not, and the practical notes (details)
meetingPointsStart and end points with name, address, coordinates and instructions (details)
itineraryStopsStops with name, time spent, admission and coordinates (details)
ageBands, maxTravelersPerBooking, attributes, optionsAges accepted, group size, ticket attributes and tour options (details)
isExcellent, isHopOnHopOff, tripadvisorLocationIdExtra flags and the matching Tripadvisor id (details)
sourceQuery, scrapedAtThe search or link you sent, and when the row was collected

One real row with details (some fields shortened):

{
"type": "activity",
"productCode": "313166P2",
"title": "Kayak tour in Capri between caves and beaches. Photos included.",
"url": "https://www.viator.com/tours/Capri/Capri-Island-Kayak-Tour-between-History-and-Legend/d4223-313166P2",
"destination": "Capri",
"price": 256.45,
"currency": "BRL",
"pricingType": "PER_PERSON",
"rating": 4.9,
"reviewCount": 451,
"durationMinutes": 90,
"duration": "1 h 30 min",
"freeCancellation": true,
"badges": ["RECOMMENDED_BY_TRAVELLERS"],
"languages": ["en", "it"],
"supplierName": "Capri Hydro",
"productType": "ACTIVITIES",
"inclusions": ["GoPro Photos", "Kayak, Paddle", "Life Jacket", "Kayak Instructor and tour guide"],
"exclusions": ["Tips/Gratuities", "Beach towel"],
"meetingPoints": [
{
"kind": "START",
"name": "Capri Hydro - Watersports & Yacht Services",
"address": "Via Marina Piccola, 80073 Capri NA, Italy",
"latitude": 40.5451555,
"longitude": 14.234998
}
],
"maxTravelersPerBooking": 30
}

This row was collected from a Brazilian IP, so the price is in BRL. Viator prices follow the country of the IP: from a United States proxy they come in USD.

Errors you may see

Every error is a row with errorCode and is never charged:

errorCodeMeaning
INVALID_INPUTA field has a wrong value (for example minRating above 5)
INVALID_URLNot a Viator destination, search or tour link
NOT_FOUNDThe destination or tour does not exist or was removed
NO_RESULTSNothing matches the search and filters
BLOCKEDViator refused every attempt; run it again in a few minutes
NOT_REACHEDmaxItems, the spending limit or the run timeout came before this search or link

Integrations, scheduling and AI agents

  • Schedule the same destinations weekly in Apify schedules to follow prices, ratings and review counts, or turn on onlyNew to get only the activities added since the last run.
  • Export as JSON, CSV, Excel or XML, or read the dataset from the Apify API.
  • Connect it to Make, n8n, Zapier or Google Sheets through Apify integrations.
  • AI agents: call it as a tool through the Apify MCP server in Claude, ChatGPT, Cursor or any MCP client, for example "list the 20 best rated activities under 3 hours in Barcelona with free cancellation".

FAQ

Do I need a Viator account? No. Everything comes from public pages, without login or cookies.

How many activities can I get? For a destination, all of them: the Actor pages through Viator's full list until the end or your maxItems. For a keyword, Viator returns up to 200 results; to go deeper, search a destination name or add the city to the keyword.

Which currency are the prices in? Viator picks the currency from the country of the visitor's IP (USD for a United States IP). Every row carries its currency, so you never mix them.

Why is originalPrice empty on most rows? It is filled only when Viator shows a discount on the listing.

Do you collect reviews or reviewer names? No. The rating and the review count are included, but review texts and reviewer profiles are left out on purpose.

Is it legal? The Actor reads public listing pages only and returns business information, not personal data. You are responsible for how you use the data under the laws that apply to you.

Something broke or a field is missing? Open an issue on the Actor page; issues are answered within a day.

Limitations

  • Prices are Viator's "from" price for the cheapest option, not a quote for a given date.
  • Filters are applied to Viator's list; rows that do not pass are not delivered and not charged.
  • Tour pages are large (about 3 MB each), so includeDetails makes runs about three times slower.
  • country is filled on destination searches; keyword searches across many places leave it empty.

Changelog

  • 16 Oct 2026: first version. Destinations, keywords and links, full pagination of destinations, rating, review and duration filters, optional tour page details, onlyNew for schedules, free error rows.