MakeMyTrip Hotels & Reviews Scraper
Pricing
from $5.00 / 1,000 results
MakeMyTrip Hotels & Reviews Scraper
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.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
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.

How it works

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: bothto 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-renderedwindow.__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
- Classify each input as a search URL, a hotel-details URL, a bare hotel ID, or a dataset reference.
- 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, untilhotelsLimitor 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. - 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, inreviewSortorder, untilreviewsPerHotelor 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. - 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
{"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
modeincludes 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):
{"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):
{"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.
hotelsLimitcaps 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-OKplaceholder 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 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 — 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 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:
{"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: bothpulls hotels fromsearchUrlsand reviews fromhotelUrls/hotelIdsin 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 toreviewsPerHotelwritten reviews (max 5000) inreviewSortorder. - 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