If you want honest guest sentiment for a hotel in India, one platform is never enough. MakeMyTrip and Goibibo are the country's two largest OTAs, both run by the same group, and the same property usually carries a different pool of reviews on each. A traveller who books on Goibibo often leaves a review Goibibo never shows on MakeMyTrip, and the other way round. To read a hotel's real reputation in the India travel market you need both feeds, side by side.
This guide covers what you can pull from a review, why the DIY route is a two-headed problem, working Python, a no-code shortcut, and a plain comparison. If you want the deeper reference, there is a full guide on how to scrape MakeMyTrip and Goibibo reviews too, plus a step-by-step blog walkthrough.
What you can pull from a review
Per review you can get:
- Overall rating and the review title, plus the hotel's sub-ratings (Location, Cleanliness, Facilities, Food, Room, Value for Money, Child-friendliness) on the free hotel profile
-
The full review text, and the
sourcebrand so you always know whether a row came from MakeMyTrip or Goibibo - Trip context: travel type (couple, family, business, solo), room name, and check-in month
- Reviewer detail: name (or an anonymity flag), and lifetime review count on Goibibo
-
Review photos with AI scene-tags (
imagesas[{ url, aiTags }]), plus owner/management responses with a date -
An LLM-ready markdown block per review (
markdownContent)
The two things that separate a real dataset from a shallow one: the second brand's feed and the free hotel profile (star class, geo, sub-ratings) that ships with every run.
Why scraping MakeMyTrip and Goibibo is hard
- There is no public reviews API. MakeMyTrip Group offers no public reviews or hotel-data API for either brand, so scraping the public pages is the only route.
- It is two systems, not one. MakeMyTrip and Goibibo share one hotel identity but present reviews through different pages and structures. A scraper built for one usually misses the other, and the brand you skip is often where the newer reviews are.
- The hotel profile lives apart from the reviews. Star class, property type, PIN code, geo-coordinates and the clubbed sub-ratings sit on a separate surface you have to fetch and join yourself.
- Bot protection and rate limits apply on both brands.
So the work is not parsing one page. It is handling both brands, joining the hotel profile, and staying unblocked, on repeat.
Three ways to get the data
| DIY Python | MakeMyTrip & Goibibo actor | Official API | |
|---|---|---|---|
| Setup time | Hours to days | ~30 seconds | Not available (no public reviews API) |
| Both MakeMyTrip + Goibibo feeds | Build two scrapers | One run | n/a |
| Free hotel profile (stars, geo, sub-ratings) | Fetch and join yourself | Included free | n/a |
| Review photos + owner responses | Parse nested markup | Yes | n/a |
| Cost | Proxies + eng time | Pay-per-result | n/a |
| Best for | One-off | Scheduled, at scale | Not an option |
Option A: DIY in Python
A plain request to a hotel page tends to come back blocked or JavaScript-only:
import httpx
url = "https://www.makemytrip.com/hotels/hotel-details/?hotelId=200703241029455940&city=CTGOI&country=IN"
r = httpx.get(url, headers={"User-Agent": "Mozilla/5.0"})
print(r.status_code) # challenge / JS-rendered shell, reviews not in the HTML
The reviews load through internal endpoints, so you end up reverse-engineering those (per brand), normalizing two different response shapes, and separately fetching the hotel profile to join on. Doable for one hotel, painful for a portfolio on a schedule.
Option B: the no-code / API shortcut
When you want clean rows, the MakeMyTrip & Goibibo Reviews Scraper on Apify reads both brands in a single run and hands back structured JSON, with the full hotel profile included free. No login, no proxy setup.
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("factden/makemytrip-scraper").call(run_input={
"startUrls": [
"https://www.makemytrip.com/hotels/hotel-details/?hotelId=200703241029455940&city=CTGOI&country=IN",
"https://www.goibibo.com/hotels/hard-rock-goa-hotel-in-goa-6204281054243107966/"
],
"reviewSource": "auto",
"maxReviewsPerHotel": 200,
"sortBy": "mostRecent",
})
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
print(review["source"], review["overallRating"], review["travelType"])
Mix MakeMyTrip and Goibibo URLs freely. reviewSource takes auto (match each link's own brand), makemytrip, goibibo, or both (collect both brands' reviews for the same hotel). sortBy accepts mostRelevant, mostRecent, helpful, positive, or negative, and you can bound results with fromDate / toDate and minRating / maxRating.
Because this is one actor with a lean input, you can schedule it to monitor ratings and new reviews across both OTAs over time: set sortBy: "mostRecent" and slide fromDate to your last run date, and each nightly pass pulls only what is new, for a few cents. That is the difference between a one-off pull and a live reputation feed for a whole portfolio.
What comes back: 19 fields per review
| Group | Fields |
|---|---|
| Core |
reviewId, hotelId, hotelName, hotelUrl, source (makemytrip / goibibo), submittedAt
|
| Rating |
overallRating, title
|
| Text | reviewText |
| Reviewer |
reviewer (name, isAnonymous, reviewsWritten for Goibibo) |
| Trip context |
travelType, roomName, checkInMonth
|
| Signals |
usefulCount, imagesCount, images (url + aiTags), ownerResponse (text, date) |
| AI-ready | markdownContent |
| Meta | extractedAt |
A trimmed sample row (a MakeMyTrip review):
{
"reviewId": "01KXQ014AHMXEWYHEBNBX9ZSCY",
"hotelName": "Caravela Beach Resort",
"source": "makemytrip",
"submittedAt": "2026-07-17",
"checkInMonth": "2026-07",
"reviewer": {"name": "Sumit Khare", "isAnonymous": false, "reviewsWritten": null},
"travelType": "COUPLE",
"roomName": "Deluxe Room Sea View",
"overallRating": 5,
"title": "Wonderful beachside stay",
"reviewText": "Amazing experience. Great service, good food and a beautiful property...",
"imagesCount": 3,
"images": [{"url": "https://.../photo.jpg", "aiTags": ["palm_tree", "grass", "house"]}],
"ownerResponse": null,
"markdownContent": "# Caravela Beach Resort review (MakeMyTrip)\n\n**Rating:** 5/5..."
}
Every run also returns a free Hotels row per property: hotelStars, propertyType, hotelAddress, pinCode, geoLat, geoLong, overallRating, ratingLabel, reviewsCount, and the clubbed subRatings. Full field list and snippets are in the GitHub repo.
Grab a free sample dataset
Want to see the data first? There is a free MakeMyTrip and Goibibo sample (CSV/JSON) here: factden.com/sample-makemytrip. It includes rows from both brands so you can see the shape before you run anything.
FAQ
Is scraping MakeMyTrip or Goibibo legal? The reviews are publicly visible. As with any scraping, check the sites' Terms of Service and your local rules (India's DPDP Act, GDPR, and so on), and use the data responsibly.
Is there an official MakeMyTrip / Goibibo reviews API? No public one. MakeMyTrip Group offers no public reviews or hotel-data API for either brand, so scraping the public pages is the only route for most teams.
Can I get both brands' reviews for the same hotel? Yes. The two platforms share one hotel identity, so set reviewSource: "both" and you get the MakeMyTrip and Goibibo review feeds for the same property, each row tagged by source.
Can I scrape both MakeMyTrip and Goibibo at once? Yes, that is the point. Mix both URL types in one run (or paste raw hotel IDs) and the output uses the same schema, tagged by source.
Can I track a hotel's rating over time? Yes. Schedule the actor with sortBy: "mostRecent" and a sliding fromDate, and each run pulls only new reviews across both OTAs, cheaply, so you build a rating and sentiment trend without re-scraping everything.
How do I stop getting blocked? Plain requests get challenged on both brands. This is the hard part of the job, and the actor handles it for you, no proxy or account setup required.
Related
- Doing hotels across more platforms? See how to scrape Trip.com and Ctrip reviews.
- Other FactDen scrapers: Trip.com & Ctrip Reviews Scraper and Expedia hotel reviews.
Questions, or a field you wish it extracted? Drop a comment.
Top comments (0)