# MakeMyTrip Hotels & Reviews Scraper (`memo23/makemytrip-hotels-reviews-scraper`) Actor

Scrape MakeMyTrip hotel listings and reviews by search URL, hotel-details URL, bare hotelId, or a dataset from a prior run. Mobile API extraction with PWA fallback. Prices, ratings, amenities, images, traveller reviews with AI image tags. JSON/CSV.

- **URL**: https://apify.com/memo23/makemytrip-hotels-reviews-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Travel
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## MakeMyTrip Hotels & Reviews Scraper

**Turn MakeMyTrip into structured hotel and review data you can actually use.** Scrape hotel listings and traveller reviews by search URL, hotel-details URL, bare hotel ID, or a dataset from a prior run. Every review is tagged with its `hotelId` — the gap that made competitor users file bugs. Prices, ratings, amenities, geo coordinates, images, and full review text. JSON or CSV out, no browser, no CAPTCHA solver.

<p align="center"><img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/makemytrip-card.png" width="600" alt="MakeMyTrip Hotels & Reviews Scraper"></p>

#### How it works

![How MakeMyTrip Hotels & Reviews Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-makemytrip.png)

#### Why use this scraper?

Trying to build India hotel-price benchmarks? Collecting review sentiment for hospitality research? Need a clean dataset of MakeMyTrip listings instead of copy-pasting from the site?

- **Four starting points.** Paste a hotel-listing search URL, a hotel-details URL, a bare numeric `hotelId`, or a dataset ID from a prior hotels run — all classified automatically.
- **Listings + reviews in one actor.** Run `mode: both` to pull hotels from a search URL and reviews for specific hotels in the same run. No second actor, no manual handoff.
- **Every review tagged with `hotelId`.** The single most-requested feature on the competing reviews actor (their open issue is literally "reviews not tagged with hotelId"). Solved here from day one.
- **Full search results, no browser.** MakeMyTrip sits behind Akamai. The actor opens the listing page with a Chrome TLS fingerprint on a residential proxy, then pages the same search API the website calls as you scroll, 30 hotels at a time, up to `hotelsLimit`. Reviews come from the hotel page's server-rendered `window.__INITIAL_STATE__`. No headless browser, no third-party CAPTCHA service.
- **Rich per-hotel fields.** Discounted and original price, price with tax, tax breakdown, cumulative rating, rating text, total rating/review counts, star rating, property type, geo coordinates, hero image, total image count, SEO URL, deep link, and persuasion tags.
- **Clean exports.** Dataset rows are stable JSON; CSV export is generated automatically at the end of every run.

#### Use cases

| Team | What they build |
|------|-----------------|
| **Hospitality analysts** | India hotel-price benchmarks by city, star rating, and date range |
| **Market researchers** | Competitive intelligence on MakeMyTrip's pricing and discounting patterns |
| **Review-sentiment researchers** | Traveller review corpora tagged by hotel, rating, and traveller type (FAMILY, COUPLE, SOLO, BUSINESS) |
| **Travel aggregators** | Source-of-truth feed of MakeMyTrip hotel metadata and ratings into their own platform |
| **Data journalists** | Datasets on regional hotel pricing, rating distributions, and review trends |
| **Revenue managers** | Track competitor pricing and review sentiment across properties |

#### Supported inputs

You can pass four kinds of input. Each is classified automatically.

| Input | Behaviour |
|---|---|
| `searchUrls` — `https://www.makemytrip.com/hotels/hotel-listing/?...` | **Search** — pages through the search results, with the URL's dates, guests, filters, sort, and any area or landmark you picked, up to `hotelsLimit` |
| `hotelUrls` — `https://www.makemytrip.com/hotels/hotel-details?hotelId=...` | **Detail** — extracts reviews (and the single hotel row if `mode` includes hotels) |
| `hotelIds` — bare numeric IDs like `201805091048109914` | Treated like a hotel-details URL without needing the full link |
| `datasetId` — from a prior hotels run | Reads every hotel in it and collects reviews for each — useful for city-wide review collection |

Easiest workflow: apply your filters on makemytrip.com in the browser, copy the URL out of the address bar, paste into `searchUrls`.

#### How it works

1. **Classify each input** as a search URL, a hotel-details URL, a bare hotel ID, or a dataset reference.
2. **For search URLs** — open the listing page through a residential proxy (IN exit) with a Chrome TLS fingerprint so Akamai sets its cookies, then page the website's own search API (`search-hotels`) on that session, 30 hotels per call, until `hotelsLimit` or the end of the results. A refused session is replaced with a fresh one, up to 6 times. If the API never answers, the actor keeps the hotels the listing page rendered itself.
3. **For hotel targets** — fetch the hotel page once on a fresh session and read the hotel row (cheapest room rate for the stay, rating, address, images) from the server-rendered state, then page the site's own review list (`ugc-reviews`) on the same session, 30 reviews per call, in `reviewSort` order, until `reviewsPerHotel` or the hotel's last written review. If the review list refuses the session, the ~20 reviews the page rendered are kept. A bare hotel ID works without a city. Hotels read from a prior dataset get reviews only, since their hotel rows are already in that dataset.
4. **Deduplicate hotels by id**, map to flat rows, push to the dataset, and export JSON + CSV.

#### Input parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `searchUrls` | array | one of the four | — | MakeMyTrip hotel-listing URLs. Any filters applied on the site (dates, guests, price, star rating, property type, amenities, sort, area or landmark) are reflected in the results. |
| `hotelUrls` | array | one of the four | — | MakeMyTrip hotel-details URLs. Used to scrape a single hotel and/or its reviews. |
| `hotelIds` | array | one of the four | — | Bare MakeMyTrip hotel IDs (numeric). Used to scrape specific hotels without a full URL. |
| `datasetId` | string | one of the four | — | Dataset ID from a prior hotels run. The actor reads every hotel in it and collects reviews for each. |
| `mode` | string | No | `both` | `hotels`, `reviews`, or `both`. |
| `hotelsLimit` | integer | No | `50` | Max hotel listings to extract per search URL (1–200). |
| `reviewsPerHotel` | integer | No | `30` | Max reviews to collect per hotel (1–5000). The actor stops earlier when the hotel has no more written reviews. |
| `reviewSort` | string | No | `Most relevant` | `Most relevant`, `Latest first`, `Helpful first`, `Positive first`, `Negative first`. The same orders as the site's review list. |
| `includeDetails` | boolean | No | `false` | Also open each search result's hotel page for its description, check-in/out times, amenities, house rules and full photo gallery. One extra page per hotel. Hotel URLs and IDs always include these. |
| `removeDuplicates` | boolean | No | `true` | Deduplicate hotels by id across all search URLs. |
| `maxConcurrency` | integer | No | `8` | Max concurrent requests when fetching reviews for multiple hotels. |
| `proxy` | object | No | Apify RESIDENTIAL, IN | Proxy configuration. MakeMyTrip sits behind Akamai — residential proxies with an India exit are required. |

#### Example input

```json
{
    "searchUrls": [
        { "url": "https://www.makemytrip.com/hotels/hotel-listing/?checkin=06092026&city=CTKUU&checkout=06102026&roomStayQualifier=1e0e1e0e1e0e1e0e&locusId=CTKUU&country=IN&locusType=city&searchText=Manali" }
    ],
    "hotelUrls": [
        { "url": "https://www.makemytrip.com/hotels/hotel-details?hotelId=201805091048109914&checkin=06092026&checkout=06102026&country=IN&city=CTKUU&locusId=CTKUU&locusType=city&roomStayQualifier=1e0e1e0e1e0e1e0e" }
    ],
    "mode": "both",
    "hotelsLimit": 50,
    "reviewsPerHotel": 30,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN"
    }
}
```

#### Output overview

Each run produces two row types in the same dataset:

- **Hotel rows** — one per hotel, from search URLs (and from hotel-details URLs when `mode` includes hotels).
- **Review rows** — one per review, from hotel-details URLs / hotel IDs / a prior dataset, always tagged with `hotelId`.

#### Output samples

**Hotel row** (trimmed to the most useful fields):

```json
{
    "name": "Himalayan Riverside Resort - Manali",
    "starRating": 3,
    "propertyType": "Hotel",
    "cumulativeRating": 3.7,
    "ratingText": "Very Good",
    "totalReviewCount": 25,
    "totalRatingCount": 55,
    "discountedPriceWithTax": 2755,
    "discountedPrice": 2463,
    "originalPrice": 4320,
    "priceWithTax": 4612,
    "totalTax": 292,
    "currency": "INR",
    "availability": "Available",
    "soldOut": false,
    "isFreeCancellation": false,
    "isCoupleFriendly": true,
    "primaryPersuasionText": "River views, serene and relaxing atmosphere, spacious and stylishly designed rooms",
    "city": "Manali",
    "country": "India",
    "countryCode": "IN",
    "latitude": 32.20978,
    "longitude": 77.18896,
    "locationId": "CTKUU",
    "displayImage": "https://r1imghtlak.mmtcdn.com/a5842422-2fde-4da6-8138-1180a1...",
    "seoUrl": "https://www.makemytrip.com/hotels/himalayan_riverside_resort_manali-details-manali.html",
    "detailDeeplinkUrl": "https://www.makemytrip.com/hotels/hotel-details?hotelId=201805091048109914&...",
    "id": "201805091048109914",
    "source": "pwa",
    "scrapedAt": "2026-10-21T12:55:35.761Z"
}
```

**Review row** (every review carries its `hotelId`):

```json
{
    "source": "pwa",
    "hotelId": "201805091048109914",
    "id": "01M4ZG1VE3D2BJD9RYJDX5ZHKF",
    "title": "Excellent property.",
    "reviewText": "Excellent property with mesmerising view and cooperative staff. The property was well-maintained. The food was tasty.",
    "rating": 5,
    "travellerName": "Divyansh Chandel",
    "travellerType": "FAMILY",
    "publishDate": "2026-10-18 21:57:17",
    "upvoted": false,
    "scrapedAt": "2026-10-21T12:56:59.596Z"
}
```

#### Key output fields

| Group | Fields |
|---|---|
| **Hotel — identifiers** | `id`, `source`, `hotelType`, `propertyType`, `stayType`, `scrapedAt` |
| **Hotel — location** | `city`, `country`, `countryCode`, `locationId`, `latitude`, `longitude`, `address`, `locality` |
| **Hotel — pricing** | `originalPrice`, `discountedPrice`, `priceWithTax`, `discountedPriceWithTax`, `discountedPriceWithTaxAndFees`, `totalTax`, `totalAdditionalFees`, `currency` |
| **Hotel — ratings** | `cumulativeRating`, `totalRatingCount`, `totalReviewCount`, `ratingText`, `reviewSummary` (with `hotelRatingSummary[]` for Location, Cleanliness, Food, Hospitality, Value For Money) |
| **Hotel — attributes** | `starRating`, `availability`, `soldOut`, `totalRoomCount`, `isCoupleFriendly`, `isFreeCancellation`, `primaryPersuasionText`, `secondaryPersuasionTexts` |
| **Hotel — media + links** | `displayImage`, `images[]`, `totalImageCount`, `seoUrl`, `detailDeeplinkUrl`, `appDeeplink`, `sharingUrl` |
| **Hotel — details** (hotel URLs and IDs, or `includeDetails`) | `description`, `checkinTime`, `checkoutTime`, `highlightedAmenities[]`, `amenities[]`, `houseRules[]`; `images[]` becomes the full gallery |
| **Review** | `hotelId`, `id`, `title`, `reviewText`, `rating`, `travellerName`, `travellerType`, `badgeUrl`, `publishDate`, `roomType`, `stayDetails`, `cohortDetails`, `upvote`, `upvoted`, `crawledData`, `checkInDate`, `checkOutDate`, `images[]`, `responseToReview[]`, `scrapedAt` |

#### What makes this richer than the competition

| Capability | Competitor actors | This actor |
|---|---|---|
| Reviews tagged with `hotelId` | Missing (their open issue) | Every review carries `hotelId` |
| Hotel-details URL support | Buggy (valid URLs skipped) | Accepted and parsed |
| Bare `hotelId` input | Not supported | Supported |
| Combined hotels + reviews run | Two separate actors | One actor, `mode: both` |
| Pricing fields | Base price only | Original, discounted, with-tax, tax breakdown |
| Rating breakdown | Aggregate only | Per-dimension (Location, Cleanliness, Food, Hospitality, Value) |

#### Notes & limitations

- **Up to 200 hotels per search URL.** `hotelsLimit` caps each URL at 200. Use several search URLs with different filters or areas to go wider.
- **Written reviews only.** After a hotel's last written review, MakeMyTrip lists star-only ratings with no title or text. The actor stops there, so a hotel with 820 written reviews and 511 star-only ratings gives 820 review rows.
- **Akamai flakiness.** Akamai sometimes answers with a 6-byte `200-OK` placeholder instead of a page. The actor treats that as a block and retries on a fresh proxy session.
- **Public data only.** No logged-in content, no booking flows, no user accounts.
- **India-primary.** An India residential proxy exit is the default. Other exits get blocked more often.

#### FAQ

**Which MakeMyTrip URLs are supported?**
Hotel-listing URLs (`/hotels/hotel-listing/?...`), hotel-details URLs (`/hotels/hotel-details?hotelId=...`), bare numeric hotel IDs, and dataset IDs from a prior hotels run.

**Why are reviews always tagged with `hotelId` here but not on the competitor?**
The competing reviews actor emits reviews without a `hotelId` link — their users filed an issue about it. This actor passes the `hotelId` into every review row at extraction time, so you can always join reviews back to hotels.

**Can I scrape the full review list for a hotel?**
Yes. Set `reviewsPerHotel` up to 5000 and the actor pages the site's review list, 30 per call, until it has that many or reaches the hotel's last written review. A hotel with 820 written reviews takes about 30 seconds.

**How do I collect reviews for many hotels at once?**
Run `mode: hotels` first with your search URLs, then run `mode: reviews` passing the `datasetId` from that run. The actor reads every hotel ID from it and fetches reviews for each.

**Can I scrape private pages, booking flows, or user accounts?**
No. The actor accesses only publicly available listing and detail pages.

#### Support

- For issues or feature requests, please use the [**Issues**](https://console.apify.com/actors/7BcaL3gb0nx0YzGj4/issues) tab on the actor's Apify Console page.
- Author's website: <https://muhamed-didovic.github.io/>
- Email: <muhamed.didovic@gmail.com>

#### Additional services

- Custom output shape, additional fields, or one-off datasets: <muhamed.didovic@gmail.com>
- Need this scraper customised, or want a similar scraper for another travel site? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): <muhamed.didovic@gmail.com>

#### Explore more scrapers

If this MakeMyTrip scraper was useful, see other scrapers and actors at [memo23's Apify profile](https://apify.com/memo23) — covering travel, real estate, job boards, social media, and more.

***

### For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/makemytrip-hotels-reviews-scraper`).

**Purpose:** Scrapes MakeMyTrip hotel listings and traveller reviews from search URLs, hotel-details URLs, bare hotel IDs, or a prior-run dataset into flat rows — hotels and reviews, every review tagged with `hotelId`.

**Minimal input:**

```json
{
    "searchUrls": [
        { "url": "https://www.makemytrip.com/hotels/hotel-listing/?checkin=06092026&city=CTKUU&checkout=06102026&roomStayQualifier=1e0e1e0e1e0e1e0e&locusId=CTKUU&country=IN&locusType=city&searchText=Manali" }
    ],
    "mode": "hotels",
    "hotelsLimit": 25,
    "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "IN" }
}
```

Reviews for specific hotels: pass `hotelUrls` or `hotelIds` with `mode: "reviews"`. City-wide reviews: run `mode: "hotels"` first, then `mode: "reviews"` with the first run's `datasetId`.

**Output:** two row types in one dataset — hotel rows (`id`, `name`, `starRating`, `city`, `country`, `latitude`, `longitude`, `originalPrice`, `discountedPrice`, `priceWithTax`, `discountedPriceWithTax`, `totalTax`, `currency`, `cumulativeRating`, `totalRatingCount`, `totalReviewCount`, `ratingText`, `reviewSummary`, `isCoupleFriendly`, `isFreeCancellation`, `primaryPersuasionText`, `displayImage`, `seoUrl`, `detailDeeplinkUrl`, `scrapedAt`) and review rows (`hotelId`, `id`, `title`, `reviewText`, `rating`, `travellerName`, `travellerType`, `publishDate`, `images[]`, `scrapedAt`).

**Behaviors an agent should know:**

- `mode: both` pulls hotels from `searchUrls` and reviews from `hotelUrls`/`hotelIds` in one run.
- Every review row carries `hotelId` — joinable to hotel rows without extra work.
- Search URLs page through the results up to `hotelsLimit` (max 200); hotel targets return up to `reviewsPerHotel` written reviews (max 5000) in `reviewSort` order.
- Residential proxy with an India exit is required (Akamai). The default proxy config is already set.
- Billing: priced per result. See the Pricing tab on the actor page for current rates.
- Public data only: no logged-in content, booking flows, or user accounts.

***

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by MakeMyTrip (MMT Limited) or any of its operators, subsidiaries, or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available hotel-listing and hotel-detail pages — no authenticated endpoints, booking flows, user accounts, or content behind the makemytrip.com login wall. Users are responsible for ensuring their use complies with makemytrip.com's Terms of Service, applicable data-protection law, and any contractual obligations of their own organisation.

***

### SEO Keywords

makemytrip scraper, scrape makemytrip, makemytrip api, makemytrip hotels scraper, makemytrip reviews scraper, makemytrip hotel listings, india hotels scraper, makemytrip hotel data, makemytrip hotel prices, makemytrip hotel ratings, makemytrip traveller reviews, hotel review scraper india, makemytrip dataset, apify makemytrip, makemytrip json export, makemytrip csv export, hotel price benchmark india, hospitality data scraper, travel scraper india, hotel sentiment analysis, makemytrip hotel id, manali hotels scraper, india travel data api

# Actor input Schema

## `searchUrls` (type: `array`):

One or more MakeMyTrip hotel search result URLs (https://www.makemytrip.com/hotels/hotel-listing/?...). Any filters applied on MakeMyTrip (dates, guests, price, star rating, property type, amenities) are reflected in the results.

## `hotelUrls` (type: `array`):

MakeMyTrip hotel-details URLs (https://www.makemytrip.com/hotels/hotel-details/?hotelId=...). Used to scrape a single hotel and/or its reviews.

## `hotelIds` (type: `array`):

Bare MakeMyTrip hotel IDs (numeric, e.g. 201107121143323974). Used to scrape specific hotels and/or their reviews without a full URL.

## `datasetId` (type: `string`):

Dataset ID from a prior hotels run. The actor reads every hotel in it and collects reviews for each — useful for city-wide or destination-wide review collection.

## `mode` (type: `string`):

What to scrape.

## `hotelsLimit` (type: `integer`):

Maximum number of hotel listings to extract from each search URL (1-200).

## `reviewsPerHotel` (type: `integer`):

Maximum number of reviews to collect for each hotel.

## `reviewSort` (type: `string`):

How to sort reviews before scraping.

## `includeDetails` (type: `boolean`):

Also open each search result's hotel page for its description, check-in and check-out times, amenities, house rules and full photo gallery. One extra page per hotel, so slower. Hotel URLs and hotel IDs always include these.

## `removeDuplicates` (type: `boolean`):

Deduplicate hotels by id across all search URLs.

## `maxConcurrency` (type: `integer`):

Maximum hotel pages fetched at once (hotel URLs, hotel IDs, dataset reviews, and details for search results).

## `proxy` (type: `object`):

Proxy servers for the actor. MakeMyTrip sits behind Akamai — residential proxies (Apify RESIDENTIAL, IN exit) are recommended.

## Actor input object example

```json
{
  "searchUrls": [
    {
      "url": "https://www.makemytrip.com/hotels/hotel-listing/?checkin=12202026&city=CTKUU&checkout=12212026&roomStayQualifier=1e0e1e0e1e0e1e0e&locusId=CTKUU&country=IN&locusType=city&searchText=Manali&regionNearByExp=3&rsc=4e4e0e"
    }
  ],
  "mode": "both",
  "hotelsLimit": 50,
  "reviewsPerHotel": 30,
  "reviewSort": "Most relevant",
  "includeDetails": false,
  "removeDuplicates": true,
  "maxConcurrency": 8,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `hotels` (type: `string`):

Hotel listing rows (one per hotel).

## `reviews` (type: `string`):

Hotel review rows (one per review, tagged with hotelId).

## `overview` (type: `string`):

Compact hotel overview (name, city, price, rating).

# 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 = {
    "searchUrls": [
        {
            "url": "https://www.makemytrip.com/hotels/hotel-listing/?checkin=12202026&city=CTKUU&checkout=12212026&roomStayQualifier=1e0e1e0e1e0e1e0e&locusId=CTKUU&country=IN&locusType=city&searchText=Manali&regionNearByExp=3&rsc=4e4e0e"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/makemytrip-hotels-reviews-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 = {
    "searchUrls": [{ "url": "https://www.makemytrip.com/hotels/hotel-listing/?checkin=12202026&city=CTKUU&checkout=12212026&roomStayQualifier=1e0e1e0e1e0e1e0e&locusId=CTKUU&country=IN&locusType=city&searchText=Manali&regionNearByExp=3&rsc=4e4e0e" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/makemytrip-hotels-reviews-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchUrls": [
    {
      "url": "https://www.makemytrip.com/hotels/hotel-listing/?checkin=12202026&city=CTKUU&checkout=12212026&roomStayQualifier=1e0e1e0e1e0e1e0e&locusId=CTKUU&country=IN&locusType=city&searchText=Manali&regionNearByExp=3&rsc=4e4e0e"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call memo23/makemytrip-hotels-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/makemytrip-hotels-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7BcaL3gb0nx0YzGj4/builds/OvBD3u6AzwDQkE7h6/openapi.json
