OYO Rooms Reviews Scraper avatar

OYO Rooms Reviews Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
OYO Rooms Reviews Scraper

OYO Rooms Reviews Scraper

A robust, high-performance utility designed for developer automation, data integration, and AI training. Features built-in captcha bypass, headful/headless browser execution, and proxy support to scrape OYO Rooms data seamlessly, reliably, and at scale.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Coding Frontned

Coding Frontned

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrapes guest reviews from OYO Rooms hotel pages. Supports direct hotel URLs or automatic city-based hotel discovery. Uses PlaywrightCrawler with request queues and parallel processing (up to 5 concurrent hotel review pages).

Features

  • Scrape reviews from specific hotel URLs directly
  • Auto-discover hotels by city name (city discovery mode)
  • Pagination support for review pages per hotel
  • Extracts rating, review text, reviewer name, date, stay type, category ratings
  • Configurable sort order (most recent, most helpful, by rating)
  • Parallel processing: 5 hotels processed concurrently
  • Strict OYO URL validation, duplicate-input removal, and bounded limits
  • Session retirement on HTTP 403/429 responses and explicit block-page detection

Input

FieldTypeDefaultDescription
hotelUrlsstring[][]Direct OYO hotel URLs (bypasses discovery)
citiesstring[]["Mumbai"]City names for hotel discovery
maxHotelsnumber5Max hotels to scrape reviews from
maxReviewsPerHotelnumber50Max reviews per hotel
maxReviewPagesnumber5Max review pagination pages per hotel
reviewSortBystring"recent"Sort: recent, helpful, rating_high, rating_low
headlessbooleantrueHeadless browser mode
proxyConfigurationobject{}Proxy settings (RESIDENTIAL+IN recommended)

Output

Each dataset record is one review:

{
"hotelName": "OYO 12345 Sunshine Hotel",
"hotelId": "12345",
"hotelRating": 3.8,
"hotelTotalReviews": 412,
"hotelUrl": "https://www.oyorooms.com/hotel-in-mumbai-oyo-12345/",
"reviewerName": "Priya S.",
"rating": 4.0,
"reviewDate": "2 days ago",
"reviewText": "Clean rooms, helpful staff. Checkout was smooth.",
"stayType": "Couple",
"helpfulCount": 3,
"categories": {
"Cleanliness": 4.5,
"Staff": 4.0,
"Value": 3.5
},
"reviewPage": 1,
"scrapedAt": "2026-05-18T10:00:00.000Z"
}

Required fields for accepted records are hotelName, hotelUrl, and reviewText. Optional website-provided fields are omitted when unavailable; the Actor does not insert placeholder values. Additional fields can include position, hotelId, ratingLabel, checkInRating, ratingDistribution, reviewId, reviewPhotos, ownerResponse, sourceUrl, reviewSortBy, and extraction diagnostics. Results are deduplicated by the crawler request queue and duplicate direct input URLs are removed before crawling.

Running locally

npm ci
apify run --purge --input-file qa-inputs/local-city.json
npm test

The bounded cloud validation input is qa-inputs/cloud-validation.json. Direct URLs must use the public oyorooms.com domain. maxHotels, maxReviewsPerHotel, and maxReviewPages are enforced globally/per hotel as documented by their names; pagination stops at either the review or page limit.

Architecture

Uses the queue + parallel processing pattern (same as amazon-product-scraper):

DISCOVERY requests (one per city)
↓ discover hotel URLs
HOTEL_REVIEWS requests (one per hotel) ──→ parallel (maxConcurrency: 5)
↓ scrape page 1 reviews + queue pagination
REVIEW_PAGE requests (page 2, 3, ...) ──→ parallel (maxConcurrency: 5)
↓ scrape remaining review pages
Dataset

Notes

  • OYO uses React with CSS class names that change with deployments; multiple selector fallbacks are used.
  • Start without a proxy. If OYO blocks the run, configure Apify Proxy; an India-routed residential group can help when the account has access, but is not required by the Actor and is never hardcoded.
  • Review pagination may not always be available; the scraper gracefully handles this.