OYO Rooms Reviews Scraper
Pricing
from $4.99 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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
| Field | Type | Default | Description |
|---|---|---|---|
hotelUrls | string[] | [] | Direct OYO hotel URLs (bypasses discovery) |
cities | string[] | ["Mumbai"] | City names for hotel discovery |
maxHotels | number | 5 | Max hotels to scrape reviews from |
maxReviewsPerHotel | number | 50 | Max reviews per hotel |
maxReviewPages | number | 5 | Max review pagination pages per hotel |
reviewSortBy | string | "recent" | Sort: recent, helpful, rating_high, rating_low |
headless | boolean | true | Headless browser mode |
proxyConfiguration | object | {} | 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 ciapify run --purge --input-file qa-inputs/local-city.jsonnpm 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 URLsHOTEL_REVIEWS requests (one per hotel) ──→ parallel (maxConcurrency: 5)↓ scrape page 1 reviews + queue paginationREVIEW_PAGE requests (page 2, 3, ...) ──→ parallel (maxConcurrency: 5)↓ scrape remaining review pagesDataset
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.
