# Travelstride Tours Search Scraper (`stealth_mode/travelstride-tours-search-scraper`) Actor

Scrape tour listings from Travelstride.com including prices, ratings, travel styles, themes, operator info, and deal data. Perfect for travel aggregators, analysts, and tour operators benchmarking the market.

- **URL**: https://apify.com/stealth\_mode/travelstride-tours-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Travelstride.com Tours Scraper: Extract Tour Listings & Pricing Data

---

### What Is Travelstride.com?

Travelstride.com is a major tour discovery platform aggregating thousands of trips from hundreds of operators worldwide. It covers everything from budget backpacking tours to luxury guided experiences across every continent. Collecting this data manually is impractical at scale — the **Travelstride Tours Scraper** automates extraction from search and trip-list pages, delivering clean, structured records ready for analysis or integration.

---

### Overview

The **Travelstride Tours Scraper** is built for anyone who needs structured tour data at volume:

- **Travel aggregators** building comparison platforms
- **Tour operators** benchmarking competitors on pricing and positioning
- **Market researchers** analyzing travel trends by destination, style, or theme
- **Developers** feeding tour data into recommendation engines or booking tools

It supports paginated trip-list URLs, configurable result limits, and fault-tolerant runs via `ignore_url_failures`.

---

### Input Format

```json
{
  "urls": [
    "https://www.travelstride.com/trip-list/paris?p=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Field | Type | Default | Description |
|---|---|---|---|
| `urls` | `array` | — | One or more Travelstride trip-list or search URLs to scrape. Add URLs one by one or use bulk edit. Example: `https://www.travelstride.com/trip-list/paris?p=2` |
| `ignore_url_failures` | `boolean` | `true` | If `true`, the scraper continues running when a URL fails instead of stopping the entire run. Recommended for bulk jobs. |
| `max_items_per_url` | `integer` | `20` | Maximum number of tour records to collect per URL. Set up to `200` for large list pages. |

> **Tip:** Use the `?p=` query parameter to paginate through results (e.g., `?p=1`, `?p=2`). Submit multiple paginated URLs in one run to collect a full destination dataset.

***

### Output Format

**Sample output**

```json
{
  "typename": "Trip",
  "id": 4904,
  "discount_tag": null,
  "last_price_refreshed_at": "2026-05-20T23:08:20-07:00",
  "lodging_level": {
    "typename": "PropertyValue",
    "key": "value",
    "name": "Standard - 3 star",
    "property_key": "Lodging Level",
    "property_name": "Lodging Level"
  },
  "physical_level": {
    "typename": "PropertyValue",
    "key": "moderate",
    "name": "Moderate",
    "property_key": "Physical Level",
    "property_name": "Physical Level"
  },
  "travel_style": {
    "typename": "PropertyValue",
    "key": "mixed",
    "name": "Balanced schedule",
    "property_key": "Travel Style",
    "property_name": "Travel Style"
  },
  "city_attractions": [
    {
      "typename": "POI",
      "name": "Chamonix "
    }
  ],
  "themes": [
    {
      "typename": "PropertyValue",
      "name": "Cultural"
    },
    {
      "typename": "PropertyValue",
      "name": "Hiking & Walking"
    }
  ],
  "operator": {
    "typename": "Operator",
    "rating": {
      "value_score": 4.7,
      "guide_score": 4.7,
      "activities_score": 4.7,
      "lodging_score": 4.7,
      "transport_score": 4.7,
      "meals_score": 4.7,
      "overall_score": 4.7
    },
    "revenue_tier": 5,
    "loved_for": "With a wide range of trip styles, Exodus caters to every type of traveler out there- even those with specific interests from cycling to winter hiking.",
    "what_traveller_says": {
      "typename": "ReviewCollection",
      "collection": [
        {
          "typename": "Review",
          "content": "Driving through Hungary Romania Bulgaria and Turkey off the beaten track"
        }
      ]
    },
    "id": 181,
    "name": "Exodus Adventure Travels",
    "cancellation_policy": "<p dir=\"ltr\"><span>The cancellation policies of this trip when booked through Travelstride are determined by the stated policies of the tour operator - Exodus Adventure Travels.</span></p>\r\n<p dir=\"ltr\"><span>If you or any other member of your party decides to cancel a confirmed booking you must notify Travelstride in writing. Your notice of cancellation will only take effect when it is received in writing by Travelstride and will be effective from the date on which we receive it.</span></p>\r\n<p><strong>Period before departure in which you notify us</strong></p>\r\n<p>From the date your Booking Confirmation is issued up to, and including, 90 days prior to the departure date specified on the Booking Confirmation.</p>\r\n<ul>\r\n<li>89 to 52 days (inclusive) prior to the departure date specified on the Booking Confirmation.</li>\r\n<li>51 to 31 days (inclusive) prior to the departure date specified on the Booking Confirmation.</li>\r\n<li>30 days or less prior to the departure date specified on the Booking Confirmation, or after the booking has started</li>\r\n</ul>\r\n<p><strong>Cancellation charge</strong></p>\r\n<p>Deposit can be transferred to a new booking which must be made within 3 months of the date the original booking was cancelled, and depart within 12 months of the new booking date. If a new booking is not made within this period then the deposit will be forfeited. Any remaining balance will be refunded excluding any non-refundable costs.</p>\r\n<ul>\r\n<li>50% of the total holiday cost. Any remaining balance will be refunded excluding any non-refundable costs.</li>\r\n<li>75% of the total holiday cost. Any remaining balance will be refunded excluding any non-refundable costs.</li>\r\n<li>100% of the total holiday cost.</li>\r\n</ul>\r\n<p><strong>For Polar holidays, the following cancellation charges will be made:</strong></p>\r\n<p><strong>Cancellation period (before departure) - </strong><strong>Cancellation Fee (per person)</strong></p>\r\n<p>Outside of 180 days - No fee if cancelled within 15 days of booking date. US $1,250 cancellation fee if cancelled 16 days or more of booking date.</p>\r\n<p>179 to 120 days - Loss of deposit.</p>\r\n<p>119 to 90 days prior to departure - 50% of the holiday cost.</p>\r\n<p>89 to 60 days prior to departure - 75% of the holiday cost. </p>\r\n<p>59 to 0 days prior to departure - 100% of the holiday cost.</p>\r\n<p dir=\"ltr\"><span>For more additional details, see the booking conditions of Exodus Adventure Travels at the following web address: <a href=\"https://www.exodustravels.com/us/about-exodus/exodus-booking-conditions\" target=\"_blank\" rel=\"nofollow noopener\">https://www.exodustravels.com/us/about-exodus/exodus-booking-conditions</a></span></p>",
    "compare_to_operators": [
      {
        "typename": "Operator",
        "logo_image": {
          "attachment_derivatives": {
            "small": {
              "url": "https://static.travelstride.com/store/95/30e8421c9142acbf2dfb97f92340c0/33cf98f081ee82dec34a0fe947f0a366.jpg"
            },
            "medium": {
              "url": "https://static.travelstride.com/store/2c/d91b7391714862a5ae85ffe93fa4df/33cf98f081ee82dec34a0fe947f0a366.jpg"
            }
          },
          "url": "https://static.travelstride.com/store/logo_image/5440624/attachment/6dc4c2a2ed764ec55bd44a071707551f.jpg",
          "alt": "Butterfield & Robinson",
          "position": null,
          "attribution": null,
          "label": null
        },
        "name": "Butterfield & Robinson",
        "rating": {
          "value_score": 4.9,
          "guide_score": 5,
          "activities_score": 5,
          "lodging_score": 5,
          "transport_score": 5,
          "meals_score": 5,
          "overall_score": 5
        },
        "reviews_count": 74,
        "reviews_details": {
          "excellent_reviews_count": 72,
          "great_reviews_count": 1,
          "average_reviews_count": 0,
          "disappointing_reviews_count": 1,
          "terrible_reviews_count": 0,
          "recommendation_percentage": 95.95
        },
        "slug": "butterfield-robinson"
      },
      {
        "typename": "Operator",
        "logo_image": {
          "attachment_derivatives": {
            "small": {
              "url": "https://static.travelstride.com/store/e1/f1422d23364395a9257a38d62ed171/1aff522c2b8a0064833400a24b9ce4f2.jpg"
            },
            "medium": {
              "url": "https://static.travelstride.com/store/0d/eb5c91115145bb95402ce8dae9632d/1aff522c2b8a0064833400a24b9ce4f2.jpg"
            }
          },
          "url": "https://static.travelstride.com/store/logo_image/5441056/attachment/9b54c74601b8326e751c7acc13212fa5.jpg",
          "alt": "Tourissimo",
          "position": null,
          "attribution": null,
          "label": null
        },
        "name": "Tourissimo",
        "rating": {
          "value_score": 4.9,
          "guide_score": 5,
          "activities_score": 4.9,
          "lodging_score": 4.7,
          "transport_score": 4.8,
          "meals_score": 4.9,
          "overall_score": 4.9
        },
        "reviews_count": 75,
        "reviews_details": {
          "excellent_reviews_count": 64,
          "great_reviews_count": 11,
          "average_reviews_count": 0,
          "disappointing_reviews_count": 0,
          "terrible_reviews_count": 0,
          "recommendation_percentage": 98.67
        },
        "slug": "tourissimo"
      },
      {
        "typename": "Operator",
        "logo_image": {
          "attachment_derivatives": {
            "small": {
              "url": "https://static.travelstride.com/store/9a/b988cbfbf24ab4b54aa3831c05b29e/515581e79e59a564c216acda44cfc4b3.png"
            },
            "medium": {
              "url": "https://static.travelstride.com/store/b6/3a2938c9f14a49ab1f75cb4e543f91/515581e79e59a564c216acda44cfc4b3.png"
            }
          },
          "url": "https://static.travelstride.com/store/logo_image/5440617/attachment/e34637000ff6bb5a6f062611f94a4cac.png",
          "alt": "Intrepid Travel",
          "position": null,
          "attribution": null,
          "label": null
        },
        "name": "Intrepid Travel",
        "rating": {
          "value_score": 4.5,
          "guide_score": 4.5,
          "activities_score": 4.5,
          "lodging_score": 4.5,
          "transport_score": 4.5,
          "meals_score": 4.5,
          "overall_score": 4.5
        },
        "reviews_count": 5034,
        "reviews_details": {
          "excellent_reviews_count": 3782,
          "great_reviews_count": 731,
          "average_reviews_count": 161,
          "disappointing_reviews_count": 93,
          "terrible_reviews_count": 267,
          "recommendation_percentage": 92.67
        },
        "slug": "intrepid-travel"
      }
    ],
    "contracted": true,
    "covid_safety": "plus",
    "description": "<p dir=\"ltr\"><span>For 50 years Exodus has been a pioneer of active small group adventure tourism that gives back to the communities they visit through sustainable guided tours ranging from Responsible Wildlife to Walking and Trekking, Cycling, and Cultural. Their award-winning local guides have hosted travellers on adventures across the globe. Whether it is solo travellers, couples, groups, or families, Exodus offers an incredible choice of trips for all ages and activity levels.</span></p>\r\n<p dir=\"ltr\"><span>At Exodus, we know what makes you tick when it comes to holidays. It’s a desire shared by so many others. A yearning to visit new places and come home with a real sense of what they’re all about. This means delving into local traditions, cultures, cuisine, lifestyles — anything that contributes to its unique identity. At the same time, we always remember that we are only guests. So we travel courteously and respectfully, in smaller groups to minimize our impact, to ensure that every Exodus holiday is a beneficial experience for everyone involved.</span></p>\r\n<p dir=\"ltr\"><span>This is a philosophy we take with us around the world, helping you reach some incredible destinations on 500 itineraries across over 90 separate countries. We also strive to provide as much flexibility and choice as we possibly can, making it simple for you to experience a very different holiday.</span></p>\r\n<script charset=\"utf-8\" type=\"text/javascript\" src=\"https://platform.twitter.com/widgets.js\"></script>",
    "flexipass": false,
    "featured_status": "premier",
    "is_followed": false,
    "headquarter": "London, United Kingdom; United States",
    "kind": "global",
    "languages": [
      "English"
    ],
    "logo_image": {
      "attachment_derivatives": {
        "small": {
          "url": "https://static.travelstride.com/store/8b/8e3f648e9649d6a70d17b35b4a62ef/e70fe04aa6a5f33e3a0066441632a4c0.png"
        },
        "medium": {
          "url": "https://static.travelstride.com/store/dc/7e6d9f97824af68739d0f4ae217a09/e70fe04aa6a5f33e3a0066441632a4c0.png"
        }
      },
      "url": "https://static.travelstride.com/store/logo_image/5440797/attachment/766387ef672bcd8c1388f0f12c6c0824.png",
      "alt": "Exodus Adventure Travels",
      "position": null,
      "attribution": null,
      "label": null
    },
    "max_age": 65,
    "max_price": {
      "cents": 3693000,
      "currency_code": "USD"
    },
    "member_savings": true,
    "min_age": 50,
    "min_price": {
      "cents": 20000,
      "currency_code": "USD"
    },
    "planet_friendly": false,
    "service_level": "standard",
    "short_stride_take": "",
    "trips_count": 497,
    "reviews_details": {
      "excellent_reviews_count": 15469,
      "great_reviews_count": 3712,
      "average_reviews_count": 689,
      "disappointing_reviews_count": 177,
      "terrible_reviews_count": 222,
      "recommendation_percentage": 97.98
    },
    "reviews_count": 20369,
    "slug": "exodus-travels",
    "url": "http://www.exodustravels.com/",
    "ustoa_status": "active_member",
    "trustpilot_review_page_url": null,
    "feefo_review_page_url": null
  },
  "duration": 15,
  "flags": {
    "popular": false,
    "charity_pledge": false,
    "member_savings": false,
    "climate": false,
    "solo_friendly": false,
    "covid_safety": 0,
    "ai_trip": false
  },
  "cover_image": {
    "attachment_derivatives": {
      "mobile": {
        "url": "https://static.travelstride.com/store/b1/58918f365442709f148c936a229918/688ecd8e404afae22bccf4d2b37925e5.jpg"
      },
      "tablet": {
        "url": "https://static.travelstride.com/store/15/3e908f1ade492b8ba385b35263145b/688ecd8e404afae22bccf4d2b37925e5.jpg"
      },
      "desktop": {
        "url": "https://static.travelstride.com/store/ea/06f5308ebb482fb0ee036e448bc891/688ecd8e404afae22bccf4d2b37925e5.jpg"
      }
    },
    "url": "https://static.travelstride.com/store/main_image/6211000/attachment/8eaadcab9a49179945630fb93f6e4829.jpg",
    "alt": "Tour du Mont Blanc Hotel Trek",
    "position": 15,
    "attribution": null,
    "label": null
  },
  "highlights": "[\"Complete the Tour du Mont Blanc, ending each day in hiker-friendly hotels and auberges\", \"Join a small group guided by an International Mountain Leader with expert knowledge of the area\", \"Marvel at the snow-capped peak of Mont Blanc, the highest mountain in the Alps\", \"Spend three rest days in Alpine towns, including Chamonix\"]",
  "details": "<div class=\"trix-content\">\n  If you enjoy the comfort of a bed every night, we offer the Mont Blanc Circuit as a fully accommodated walking holiday, with all nights spent in a variety of lodgings from family-run two- and three-star hotels to basic inns or pensions. We include 10 walking days and three rest days, in which we cross the borders of Switzerland, Italy and France and enjoy unrivalled views of the Alps and Mont Blanc itself. Overall the trekking will feel tough with long walking days but the three rest days are incorporated to give you time to rest the legs whilst enjoying three fascinating alpine towns. Courmayeur is an old worldly Italian gem with windy pedestrian streets lined with chic shops and delightful cafes, bars and restaurants. A short, free, bus ride away is the luxurious QC Therm Spa and wellness centre, a lovely treat. Les Contamines and St Gervais are charming alpine towns with interesting local markets, electric bike hire and gondoliers taking you up to stunning view points. The last free day is in Chamonix, the vibrant heart of the Mont Blanc massif, with a wide choice of activities to try, including paragliding and taking the Aiguille du Midi cable car up to 12,605ft (3,842m) for spectacular, close-up views of Mont Blanc. The itinerary follows the same route as our camping version (trip code TWB). With your qualified International Mountain Leader (IML) guiding the way, you will complete the famous circuit, and your baggage is transported for you by our support vehicle. In most places, we use a hotel for just one night, before moving on the next day; occasionally we settle in for a few nights and use local transport to take us to the next point of the circuit.\n</div>\n",
  "name": "Tour du Mont Blanc Hotel Trek",
  "price": {
    "cents": 600000,
    "currency_code": "USD"
  },
  "rating": {
    "value_score": 4.8,
    "guide_score": 4.8,
    "activities_score": 4.8,
    "lodging_score": 4.8,
    "transport_score": 4.8,
    "meals_score": 4.8,
    "overall_score": 4.8
  },
  "slug": "exodus-tour-du-mont-blanc-hotel-trek-15-days",
  "reviews_count": 49,
  "strike_through_price": {
    "cents": 780000,
    "currency_code": "USD"
  },
  "promotion_strike_through_price": null,
  "promotion_expiry": null,
  "is_promotion": false,
  "trip_type": {
    "typename": "PropertyValue",
    "key": "group-tour",
    "name": "Group Tour",
    "property_key": "Trip Type",
    "referencing_category": null
  },
  "deal": null,
  "deal_name": null,
  "from_url": "https://www.travelstride.com/trip-list/paris?p=2"
}
```

Each tour listing returns up to 27 fields:

#### Core Identification

| Field | Meaning |
|---|---|
| `Typename` | GraphQL object type returned by the Travelstride API (e.g., `Trip`) |
| `ID` | Unique internal identifier for the tour listing |
| `Slug` | URL-friendly identifier used in the tour's permalink |
| `Name` | Full tour name as displayed on the listing |

#### Pricing & Promotions

| Field | Meaning |
|---|---|
| `Price` | Current base price for the tour |
| `Strike Through Price` | Original price shown with strikethrough when a discount applies |
| `Promotion Strike Through Price` | Reference price used specifically during a promotional offer |
| `Promotion Expiry` | Expiry date/time of the active promotion |
| `Is Promotion` | Boolean flag indicating whether a promotion is currently active |
| `Discount Tag` | Label shown on discounted listings (e.g., "10% OFF") |
| `Last Price Refreshed At` | Timestamp of the most recent price update |
| `Deal` | Boolean or identifier indicating a special deal |
| `Deal Name` | Label for the deal type (e.g., "Early Bird", "Flash Sale") |

#### Tour Characteristics

| Field | Meaning |
|---|---|
| `Duration` | Length of the tour (e.g., "7 days") |
| `Trip Type` | Classification such as group tour, private tour, self-guided, etc. |
| `Lodging Level` | Accommodation tier (e.g., budget, standard, luxury) |
| `Physical Level` | Activity intensity rating (e.g., easy, moderate, challenging) |
| `Travel Style` | Broad style category (e.g., adventure, cultural, family) |
| `Themes` | Specific themes tagged to the tour (e.g., food & wine, wildlife, history) |
| `City Attractions` | Cities or attractions covered on the itinerary |
| `Highlights` | Key selling points or featured experiences of the tour |
| `Details` | Extended tour description and itinerary information |
| `Flags` | Special markers such as "Sustainable", "Small Group", etc. |

#### Operator & Media

| Field | Meaning |
|---|---|
| `Operator` | Tour operator name and metadata |
| `Cover Image` | URL of the tour's main listing image |

#### Social Proof

| Field | Meaning |
|---|---|
| `Rating` | Average traveler rating (typically out of 5) |
| `Reviews Count` | Total number of reviews submitted for the tour |

***

### How to Use

1. **Find a trip-list URL** — Search for a destination on Travelstride.com (e.g., `/trip-list/japan`) and copy the URL including any filters or page parameters.
2. **Add pagination** — For full coverage, submit multiple pages: `?p=1`, `?p=2`, etc.
3. **Set item limit** — Use `max_items_per_url: 200` for large pages; lower values suit quick sampling.
4. **Enable fault tolerance** — Keep `ignore_url_failures: true` for multi-URL runs.
5. **Export** — Download results as JSON or CSV for spreadsheets, databases, or BI tools.

**Common issues:**

- If results are empty, confirm the URL is a trip-list page, not an individual tour detail page.
- Filters applied in the browser (dates, price range) are usually reflected in the URL — include them to scope your results.

***

### Use Cases & Business Value

- **Competitive pricing analysis:** Track how operators price similar itineraries across destinations
- **Market trend research:** Identify popular travel styles, themes, and durations by region
- **Deal monitoring:** Track promotional pricing and discount patterns over time
- **Aggregator feeds:** Populate comparison sites with up-to-date tour inventory and ratings

***

### Conclusion

The **Travelstride Tours Scraper** turns paginated tour search results into structured, analysis-ready data across pricing, operator, style, and review dimensions. Whether you're building a travel product or running market research, it removes the manual effort and delivers consistent output at scale.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Tours list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.travelstride.com/trip-list/paris?p=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.travelstride.com/trip-list/paris?p=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/travelstride-tours-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.travelstride.com/trip-list/paris?p=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/travelstride-tours-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.travelstride.com/trip-list/paris?p=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/travelstride-tours-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/travelstride-tours-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Travelstride Tours Search Scraper",
        "description": "Scrape tour listings from Travelstride.com including prices, ratings, travel styles, themes, operator info, and deal data. Perfect for travel aggregators, analysts, and tour operators benchmarking the market.",
        "version": "0.0",
        "x-build-id": "Jszxacq6NU6JIj6rS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~travelstride-tours-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-travelstride-tours-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~travelstride-tours-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-travelstride-tours-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~travelstride-tours-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-travelstride-tours-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the Tours list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Tours list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
