# Oyorooms Reviews Scraper (`stealth_mode/oyorooms-reviews-scraper`) Actor

Scrape guest reviews from OYOrooms.com by hotel ID. Collect review text, ratings, usernames, images, and dates — up to 200 reviews per run. Perfect for hospitality analysts, reputation managers, and market researchers.

- **URL**: https://apify.com/stealth\_mode/oyorooms-reviews-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## OYO Rooms Reviews Scraper: Extract Hotel Reviews & Ratings

---

### What Is OYO Rooms?

OYOrooms.com is one of Asia's largest budget hotel chains and booking platforms, operating thousands of properties across India, Southeast Asia, and beyond. Guest reviews on OYO carry significant weight for booking decisions and brand reputation. Manually collecting this feedback at scale is impractical — the **OYO Rooms Reviews Scraper** automates extraction, delivering structured review data ready for analysis.

---

### Overview

The **OYOrooms.com Reviews Scraper** targets a specific hotel's review section by ID, pulling guest feedback with flexible sorting and pagination controls. It suits:

- **Hotel managers** monitoring guest sentiment
- **Reputation management teams** tracking rating trends
- **Market researchers** benchmarking properties
- **Data analysts** building hospitality sentiment datasets

---

### Input Format

The scraper uses a simple JSON configuration — no URLs required, just a hotel ID:

```json
{
  "hotel_id": "20146",
  "sort_by": "rating-low",
  "offset": 30,
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
````

#### Input Fields

| Field | Type | Description |
|---|---|---|
| `hotel_id` | `string` | The numeric ID from the OYO hotel page URL. Example: `https://www.oyorooms.com/20146/` → `"20146"` |
| `sort_by` | `string` | Controls review ordering. Options: `"relevance"` (default), `"date-high"` (newest first), `"rating-high"` (highest rating first), `"rating-low"` (lowest rating first) |
| `offset` | `integer` | Starting position for pagination. Set to `0` to begin from the first review; set to `30` to skip the first 30 entries. Useful for resuming or paginating large datasets |
| `max_items_per_url` | `integer` | Maximum number of reviews to collect per run. Default: `20`, configurable up to `200` or more |
| `ignore_url_failures` | `boolean` | If `true`, the scraper continues running when errors occur rather than stopping entirely. Recommended for bulk runs |

> **Tip:** To collect the most critical feedback first, use `"sort_by": "rating-low"`. For reputation monitoring, use `"date-high"` to surface the newest reviews.

***

### Output Format

#### Sample Output Record

```json
{
  "review_id": 444914740,
  "user_name": "Rabiya",
  "user_image": "usr.image",
  "review_text": "A very nice hotel in banglore.\nThe reception gay is very friendly and helpful. Rooms are neat and clean.. specially washroom was very clean all was very good and nice..\nA very good hotel with a comfortable price...",
  "date": "11 Nov 2025",
  "rating": {
    "bg_color": "#346000",
    "title": "5"
  },
  "user_image_feedback_list": null,
  "from_url": "https://www.oyorooms.com/api/pwa/updateHotelCall?url=https%3A%2F%2Fbff.oyorooms.com%2Fv1%2Fhotels%2Freviews%3Fovh_property%3Dfalse%26ai_generated_tags_flow%3Dfalse%26limit%3D30%26hotel_id%3D20146&offset=30&source=Web+Booking&user_mode%5B%5D=Consumer_Guest&sort_option=relevance_desc"
}
```

Each review returns a record with 7 fields:

| Field | Meaning |
|---|---|
| `Review ID` | Unique identifier for the review on OYO's platform |
| `User Name` | Display name of the guest who submitted the review |
| `User Image` | URL of the reviewer's profile avatar (may be null if not set) |
| `Review Text` | Full text of the guest's written feedback |
| `Date` | Submission date of the review |
| `Rating` | Numeric score given by the guest (typically on a 1–5 scale) |
| `User Image Feedback List` | Array of photo URLs uploaded by the reviewer alongside their feedback |

***

### How to Use

1. **Find the hotel ID** — Open the OYO hotel page (e.g., `https://www.oyorooms.com/20146/`). The number in the URL is the `hotel_id`.
2. **Configure sorting** — Choose `sort_by` based on your goal: sentiment analysis → `rating-low`; recency monitoring → `date-high`.
3. **Set pagination** — Use `offset` to paginate across large review sets. For example, run with `offset: 0`, then `offset: 200`, etc.
4. **Set item limit** — Adjust `max_items_per_url` based on how many reviews you need.
5. **Run and export** — Download results as JSON or CSV for analysis.

**Common issues:**

- If `User Image` or `User Image Feedback List` is empty, the reviewer did not upload a photo — this is expected behavior.
- If the hotel has fewer reviews than your `max_items_per_url`, the scraper returns whatever is available.

***

### Use Cases & Business Value

- **Sentiment analysis:** Feed review text into NLP pipelines to classify guest satisfaction themes
- **Reputation tracking:** Monitor rating distribution over time for a property
- **Competitive benchmarking:** Compare review patterns across multiple OYO properties
- **Training data:** Build labeled datasets for hospitality-focused ML models using ratings + text pairs

***

### Conclusion

The **OYO Rooms Reviews Scraper** makes it straightforward to collect structured guest feedback from any OYO property at scale. With sorting, pagination, and photo URL extraction built in, it delivers everything needed for reputation analysis, sentiment research, and competitive intelligence — in a single, clean dataset.

# Actor input Schema

## `hotel_id` (type: `string`):

Enter Hotel ID. For example, https://www.oyorooms.com/20146/ -> 20146

## `sort_by` (type: `string`):

Select your option to sort reviews

## `offset` (type: `integer`):

The offset to start from

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "hotel_id": "20146",
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "hotel_id": "20146",
    "offset": 0,
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/oyorooms-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "hotel_id": "20146",
    "offset": 0,
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/oyorooms-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "hotel_id": "20146",
  "offset": 0,
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/oyorooms-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/oyorooms-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Oyorooms Reviews Scraper",
        "description": "Scrape guest reviews from OYOrooms.com by hotel ID. Collect review text, ratings, usernames, images, and dates — up to 200 reviews per run. Perfect for hospitality analysts, reputation managers, and market researchers.",
        "version": "0.0",
        "x-build-id": "K6Er6WEr5UnRuQTfY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~oyorooms-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-oyorooms-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~oyorooms-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-oyorooms-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~oyorooms-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-oyorooms-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "hotel_id": {
                        "title": "Hotel ID (Hotel ID on oyorooms.com hotel page url, e.g. https://www.oyorooms.com/20146/ -> 20146)",
                        "type": "string",
                        "description": "Enter Hotel ID. For example, https://www.oyorooms.com/20146/ -> 20146"
                    },
                    "sort_by": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "date-high",
                            "rating-high",
                            "rating-low"
                        ],
                        "type": "string",
                        "description": "Select your option to sort reviews"
                    },
                    "offset": {
                        "title": "Offset",
                        "type": "integer",
                        "description": "The offset to start from"
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
