1. 2scraper
  2. Classifieds, property & travel
  3. MakeMyTrip
Open source · MITNeeds a residential exit or the Scraping Browser API

MakeMyTrip Scraper

Hotel prices with taxes and fees, ratings, stars and locations from MakeMyTrip, for your city, dates and guests.

  • Playwright
  • Selenium
  • Puppeteer
  • Scraping Browser API
  • JSON
  • CSV
makemytrip-scraper
# City hotel listing
$ python playwright_scraper.py --city Goa --checkin 2026-11-10 --checkout 2026-11-12 --pages 3
✓ 18 sample rows · 41 columns in sample_output.json
41columns per hotel row
30properties per listing page
90 of 90rows priced on a 3-page Goa run (Sep 2026)
4sort orders: popular, price-asc, price-desc, rating
Available MakeMyTrip scrapers

What the MakeMyTrip scraper collects

Scrapes MakeMyTrip's hotel listings into JSON and CSV: one 41-column row per property on a city's listing, for the dates and guests you give it. Rows carry nightly price after discount, with taxes and with property fees, the guest rating and whose reviews it summarises, stars, property type, locality and coordinates.

City hotel listing

Input: A city name or site location code, plus dates and guests

One row per property with nightly price, taxes, fees, discount, coupon, stars, rating, review counts, locality and coordinates.

Sorted and family searches

Input: A city plus --sort, --adults or --child-age

The same rows under a chosen ordering or guest mix; the ordering is recorded on every row.

Listing URL

Input: A MakeMyTrip hotel-listing URL

Reads the query (city, dates, guests) from the site's own listing address.

Quick start

From zero to MakeMyTrip data in 3 steps

  1. Install

    Clone the repository and install one browser engine. Python 3.9+.

    $ git clone https://github.com/2scraper/makemytrip-scraper.git && cd makemytrip-scraper
    $ python3 -m venv venv
    $ ./venv/bin/pip install -r requirements.txt -r requirements-playwright.txt
    $ cp .env.example .env
  2. Run a scraper

    Pick what you need and run it. Every flag is documented in the README.

    $ python playwright_scraper.py --city Goa --checkin 2026-11-10 --checkout 2026-11-12 --pages 3
  3. Get structured data

    Rows land in JSON or CSV (--format), with a .meta.json sidecar recording status, pages fetched and why the run stopped.

Output

MakeMyTrip data fields

41 columns per row in a predictable schema. The most useful ones:

FieldWhat it holds
skuMakeMyTrip hotel id
titleProperty name
pricePer-night price after the site's discount, before taxes
price_with_taxPer-night price including taxes
price_with_feesPer-night price including fees paid at the property
original_priceStruck-through price, where shown
discount_pctDiscount implied by the two prices
coupon_codeCoupon the site applied
property_typeHotel, Resort, Hostel, Apartment, …
star_ratingStar class (null for unstarred properties)
ratingGuest rating
review_countNumber of reviews
review_sourceWhose reviews the rating summarises (MMT, MMT_EXP, MMT_BKG, …)
localityNeighbourhood or area
latitudeLatitude of the property
sectionWhich block of the listing the row came from
[
  {
    "source": "makemytrip.com",
    "scraped_at": "2026-09-24T23:32:04.971786+00:00",
    "url": "https://www.makemytrip.com/hotels/hotel-details?hotelId=202410211734063978&checkin=1120…",
    "sku": "202410211734063978",
    "title": "Ginger Goa, Candolim",
    "price": 6441.0,
    "original_price": 7199.0,
    "currency": "INR",
    "discount_pct": 10.5,
    "price_with_tax": 7449.0,
    "price_with_fees": 7449.0,
    "price_basis": "Per Night",
    "coupon_code": "MMTSMARTSAVING",
    "coupon_discount": 758.0,
    "property_type": "Hotel",
    "star_rating": 4,
    "rating": 4.2,
    "rating_count": 3941,
    "review_count": 1962,
    "rating_text": "Very Good",
    "review_source": "MMT",
    "locality": "Candolim",
    "city": "Goa",
    "city_code": "CTGOI",
    "country_code": "IN",
    "latitude": 15.52459,
    "longitude": 73.76756,
    "image": "https://r1imghtlak.mmtcdn.com/0f00d12b-9701-420b-b944-7cf35bc4d064.jpg?output-quality=7…",
    "categories": [
      "Chain",
      "Couple Friendly",
      "wow_weekend26",
      "… 5 more"
    ],
    "sold_out": false,
    "sponsored": false,
    "section": "RECOMMENDED_HOTELS",
    "check_in": "2026-11-20",
    "check_out": "2026-11-21",
    "adults": 2,
    "rooms": 1,
    "page": 1,
    "position": 1,
    "mode": "hotels",
    "sort": "popular"
  },
  {
    "source": "makemytrip.com",
    "scraped_at": "2026-09-24T23:32:04.971827+00:00",
    "url": "https://www.makemytrip.com/hotels/hotel-details?hotelId=202410121919144277&checkin=1120…",
    "sku": "202410121919144277",
    "title": "Gateway Goa, Palolem (A Taj InnerCircle Hotel)",
    "price": 7500.0,
    "original_price": null,
    "currency": "INR",
    "discount_pct": null,
    "price_with_tax": 7875.0,
    "price_with_fees": 7875.0,
    "price_basis": "Per Night",
    "coupon_code": "MMTTAJA11",
    "coupon_discount": 505.0,
    "property_type": "Resort",
    "star_rating": 5,
    "rating": 4.7,
    "rating_count": 682,
    "review_count": 272,
    "rating_text": "Excellent",
    "review_source": "MMT",
    "locality": "Palolem",
    "city": "Goa",
    "city_code": "CTGOI",
    "country_code": "IN",
    "latitude": 14.99538,
    "longitude": 74.04094,
    "image": "https://r2imghtlak.mmtcdn.com/r2-mmt-htl-image/htl-imgs/202410121919144277-3f4177f6-4b8…",
    "categories": [
      "Chain",
      "DH_Premium",
      "taj_gc",
      "… 6 more"
    ],
    "sold_out": false,
    "sponsored": false,
    "section": "RECOMMENDED_HOTELS",
    "check_in": "2026-11-20",
    "check_out": "2026-11-21",
    "adults": 2,
    "rooms": 1,
    "page": 1,
    "position": 2,
    "mode": "hotels",
    "sort": "popular"
  }
]

First 2 of 18 rows from a real run — sample_output.json. Long values shortened here.

Built for MakeMyTrip

Handles what breaks naive MakeMyTrip scrapers

Substitute hotels flagged

A wrong city code returns another town's hotels under a NEARBY_HOTELS block in an ordinary HTTP 200. Every row carries section, and the run warns and counts substitutes.

Three prices, not one

Each row has the nightly price, the price with taxes and the price with fees collected at the property, so city taxes stated in another currency are not lost.

Cursor overlap de-duplicated

The listing is paged by a cursor and same-price properties can repeat across pages; repeats are dropped and logged rather than double-counted.

Zero means none

Unstarred hostels and unrated properties carry 0 in the site's data; both become null so averages over the columns mean something.

Everything built in

Scraping infrastructure included

The same tested core runs every 2scraper repository, so the hard parts work the same way on every site.

CAPTCHA handling

Detects the challenge a page really serves and, with a 2Captcha key, solves it only when it blocks the data — a capped number of solves per page.

Proxy rotation

Single proxy or a pool from a file, rotated on blocks with a fresh browser per exit. Credentials stay out of argv and logs.

Fingerprints

Optional complete device identity from the 2Captcha Fingerprint API — user agent, client hints, locale and timezone that agree with each other.

Scraping Browser API

Point --cdp-endpoint at a managed Chromium with its own exit country — no browser infrastructure to run yourself.

Honest run metadata

Every run writes a .meta.json sidecar and distinct exit codes: complete, blocked, empty and partial are never confused, and a failed run never overwrites good data.

Diff two runs

diff_runs.py compares two complete MakeMyTrip snapshots by id — new, removed and changed rows for monitoring.

Use cases

What teams do with MakeMyTrip data

Hotel rate monitoring

Track nightly prices, taxes and fees for a city and date range, diffing runs of the same query by sku.

Discount and coupon tracking

Record struck-through prices, discount percentages and the coupons MakeMyTrip applies.

Competitive analysis for hotels

Compare a property's price and guest rating against neighbours in the same locality and star class.

Destination research

Map supply by property type, stars and coordinates across Indian and international cities.

Access & pricing

Free to run. Pay only for what the site requires.

Needs a residential exit or the Scraping Browser API

From a datacentre address MakeMyTrip served nothing to any client in Sep 2026, and there was no captcha on the way in. The one product measured to work is the Scraping Browser API with an Indian (country-in) exit, which returned full listings. Residential proxies and fingerprints are supported but were not measured to help here; captcha solving is wired in but had nothing to solve.

Optional 2Captcha services — captcha solving, the Scraping Browser API, residential proxies and fingerprints — work behind one key.

Good to know

  • Flights are not implemented.
  • --concurrency above 1 is refused because pages chain by cursor.
  • The Scraper API route reads only a listing's first five properties.

2scraper vs. hosted scraper APIs

2scraperTypical hosted API
CodeOpen source, MIT — read and patch itClosed
CostFree; optional services billed only when usedSubscription or per request / per result
Runs onYour machine, server or CIThe vendor's infrastructure
OutputJSON/CSV files + run metadataAPI responses
When the site changesFix it yourself or open an issue / PRWait for the vendor
FAQ

MakeMyTrip scraper FAQ

What do I need to run it?

A Scraping Browser API endpoint with a country-in profile, set in .env. A local browser from a datacentre address is refused; a home connection in India has not been tried.

Which currency are prices in?

INR, whatever the city, because the currency follows the site's region. Prices are per night before taxes, with taxed and fee-inclusive prices in separate columns.

Does it scrape flights?

No. This repo does not implement flights; their results arrive as a server-sent event stream. Hotels only.

How many pages can I fetch?

Pages of up to 30 properties are fetched one after another via the site's cursor; the site states no total, and the run ends as complete when the site says nothing follows.

What output formats are supported?

JSON and CSV with the same 41 columns, plus a <out>.meta.json recording the query, currency and whether the listing ended.

Is scraping MakeMyTrip legal?

It reads the public hotel listing an anonymous visitor sees, books nothing and logs into nothing. It is public data; follow the site's terms and the law.