
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape Viator tours, activities and attraction tickets by destination, category, search term or URL, plus tour reviews. Get prices, ratings, review counts, duration, operator, free cancellation, itinerary, meeting points and photos.
Scrape tours, activities and attraction tickets from Viator: prices, ratings, review counts, duration, operator, free cancellation, languages, highlights, what's included, itinerary, meeting points with coordinates and photos. Or switch to reviews mode and collect the newest traveler reviews of any tour, with operator responses. Paste a destination, category, attraction or search URL, or just type a search term. No login needed.
https://www.viator.com/Paris/d479-ttd) and/or type search terms like colosseum.| Field | What it does |
|---|---|
startUrls | Destination (/Paris/d479-ttd), category (/Paris-tours/Day-Trips/d479-g5), attraction, search (/searchResults/all?text=…) or tour (/tours/Rome/…/d511-47029P2) URLs |
searchQueries | Free-text searches, like the Viator search box |
mode | tours (one row per tour) or reviews (one row per review) |
maxItems | Max rows across all inputs (0 = no limit) |
minPrice / maxPrice / minRating / minReviews / freeCancellationOnly | Filters on the listing |
includeDetails | Open each tour page for the full details (tour URLs always get them) |
maxReviewsPerTour | Reviews mode: reviews per tour, newest first (up to 30) |
currency | Price currency (default USD) |
{
"startUrls": [{ "url": "https://www.viator.com/Paris/d479-ttd" }],
"searchQueries": ["colosseum"],
"mode": "tours",
"maxItems": 20,
"minRating": 4.5,
"includeDetails": true,
"currency": "USD"
}
| Field | Description |
|---|---|
productCode, url, title, description | Identity and description |
price, originalPrice, discountPercent, currency, priceType | Starting price and price before a discount |
rating, reviewCount, ratingBreakdown | Average rating, number of reviews, count per star (details) |
durationText, durationMinutes, durationMaxMinutes | Duration as shown and in minutes |
location, country, destinationId, latitude, longitude | Where it takes place |
operator, operatorId | Tour operator (details) |
freeCancellation, cancellationPolicy, reserveNowPayLater | Booking conditions |
badges, likelyToSellOut, privateTour, languages | Badges and flags |
highlights, includes, excludes, additionalInfo, itinerary, meetingPoints | Page content (details) |
image, images, imageCount, travelerPhotoCount | Photos |
Example (trimmed, full details on):
{
"productCode": "6602PARHOHO",
"url": "https://www.viator.com/tours/Paris/Paris-Big-Bus-Hop-On-Hop-Off-Tour-with-Optional-River-Cruise/d479-6602PARHOHO",
"title": "Paris Big Bus Hop On Hop Off Tour with Optional River Cruise",
"price": 44.63,
"currency": "USD",
"priceType": "TRAVELLER_BY_AGE_BAND",
"rating": 3.9,
"reviewCount": 7031,
"ratingBreakdown": { "1": 768, "2": 508, "3": 771, "4": 1554, "5": 3432 },
"durationText": "2 hours 15 minutes (approx.)",
"durationMinutes": 135,
"location": "Paris",
"operator": "Big Bus - France",
"freeCancellation": true,
"cancellationPolicy": "You can cancel up to 24 hours in advance of the experience for a full refund.",
"languages": ["German", "Russian", "Korean", "Portuguese", "Mandarin", "English", "Italian", "French", "Spanish"],
"highlights": ["Create a personalized itinerary of the sights you want to see", "Upgrade your experience with a Seine River cruise"],
"includes": ["24- or 48-Hour Hop-on, Hop-on Bus Tour", "1-hour Seine River Cruise (if option selected)"],
"tourOptions": ["48hr & River Cruise", "24hr & River Cruise", "24hr Hop-on, Hop-off Bus"],
"image": "https://dynamic-media.tacdn.com/media/photo-o/2e/ae/c0/3c/caption.jpg?w=1400&h=1000&s=1",
"scrapedAt": "2026-10-16T01:20:29Z"
}
| Field | Description |
|---|---|
reviewId, rating, title, text, publishedDate | The review |
author, helpfulVotes, photos, provider, machineTranslated | Traveler and review metadata |
ownerResponse, ownerResponseAuthor, ownerResponseDate | The operator's reply |
productCode, productUrl, productTitle, productRating, productReviewCount | The tour it belongs to |
Example (traveler and responder names are fictional):
{
"reviewId": "1081767086",
"productCode": "67584P2",
"productUrl": "https://www.viator.com/tours/Paris/Golden-Versailles-Palace-and-Garden-Tour/d479-67584P2",
"productTitle": "Versailles Palace and Gardens Tour from Paris",
"rating": 5,
"title": "The palace and gardens...",
"text": "The palace and gardens are fantastic. Be prepared for a lot of walking...",
"publishedDate": "2026-10-14T05:46:01",
"author": "Alex_R",
"helpfulVotes": 0,
"provider": "viator",
"photos": [],
"ownerResponse": "Hi Alex, thank you for your review! ...",
"ownerResponseAuthor": "Sam B",
"ownerResponseDate": "2026-10-14T10:20:53",
"productRating": 4.4,
"productReviewCount": 4682
}
Platform usage (compute and residential proxy traffic) is billed on top and is small: a list page of 24 tours is about 0.1 MB of traffic, and a tour page about 0.3 MB. So 1,000 tours from lists ≈ $0.82 in total, 1,000 tours with full details ≈ $1.45, and 1,000 reviews ≈ $2.52.
Is it legal to scrape Viator? The actor only collects publicly visible tour information and reviews. Check Viator's terms and your local laws, and handle reviewer names responsibly (personal data rules such as GDPR may apply).
Do I need a Viator account or my own proxy? No. No login is needed, and the built-in residential proxy is used by default. Datacenter proxies are blocked by Viator.
How many tours can I get? Viator lists thousands of tours for big destinations (Paris shows about 4,000). Add more destinations, categories or search terms to go further. The run stops cleanly when a list ends.
How many reviews per tour? Viator shows the newest 30 reviews of each tour publicly, so reviews mode returns up to 30 per tour, newest first. That is ideal for monitoring new reviews on a schedule.
Why is a field empty? Listing rows don't carry the operator, itinerary or meeting points; turn on Include full tour details for those. Not every tour has every section.
Can I schedule it or use the API? Yes. Schedule runs in the console or start them through the API and fetch the dataset as JSON, CSV or Excel.
price is the "from" price Viator shows.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalViator URLs
Destination pages (e.g. https://www.viator.com/Paris/d479-ttd), category pages (…/Paris-tours/Day-Trips/d479-g5), attraction pages, search pages (/searchResults/all?text=…) or single tour pages (…/tours/Rome/…/d511-47029P2). Lists are paged through until the limit is reached.
searchQueriesarrayOptionalSearch terms
Free-text searches, the same as typing into the Viator search box (e.g. "colosseum", "Bali snorkeling").
modeenumOptionaldefault "tours"What to scrape
Tours: one row per tour or activity. Reviews: one row per review of each tour (tour URLs, or the tours found on list pages and searches).
maxItemsintegerOptionaldefault 20Max results
Maximum number of rows to save across all inputs (tours, or reviews in reviews mode). 0 means no limit.
minPricenumberOptionalMin price
Only tours with a starting price at or above this amount.
maxPricenumberOptionalMax price
Only tours with a starting price at or below this amount.
minRatingnumberOptionalMin rating
Only tours rated at least this many stars (0–5).
minReviewsintegerOptionalMin reviews
Only tours with at least this many reviews.
freeCancellationOnlybooleanOptionaldefault falseFree cancellation only
Only tours that can be cancelled for free.
includeDetailsbooleanOptionaldefault falseInclude full tour details
Open every tour page for the operator, highlights, what's included and excluded, itinerary, meeting points with coordinates, cancellation policy, rating breakdown and the full photo gallery. Slower and uses more proxy traffic; single tour URLs always get full details.
maxReviewsPerTourintegerOptionaldefault 30Max reviews per tour
Reviews mode: how many reviews to save for each tour, newest first. Viator shows the newest 30 reviews of a tour publicly, so 30 is the most per tour.
currencystringOptionaldefault "USD"Currency
Price currency as a 3-letter code (USD, EUR, GBP, CAD, AUD, ...). Viator picks the currency from the visitor's country, so this sets the residential proxy country (USD by default) unless you pick a country yourself.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Viator is protected by bot detection; residential proxies are the reliable choice.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| image | any | Photo |
| title | any | Title |
| url | any | URL |
| price | any | From price |
| currency | any | Currency |
| rating | any | Rating |
| reviewCount | any | Reviews |
| durationText | any | Duration |
| location | any | Location |
| operator | any | Operator |
| freeCancellation | any | Free cancellation |
| productCode | any | Product code |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Review | One saved Viator review (reviews mode). | $0.0025 |
| Tour | One saved Viator tour or activity with price, rating and (when enabled) full details. | $0.0008 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/viator-scraper').call({
"startUrls": [
{
"url": "https://www.viator.com/Paris/d479-ttd"
}
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/viator-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/viator-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Reviews of tours from a Viator destination page.
Tours under 100 EUR with free cancellation.
Tours with full details and reviews.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.