# Fliggy Hotel Reviews Scraper - 飞猪 Hotels (`factden/fliggy-hotel-reviews-scraper`) Actor

Scrape Fliggy (飞猪) hotel reviews - guest ratings, review text, check-in date, room type, reviewer location, sentiment tags and hotel profiles, with LLM-ready markdown. Search by city name or paste hotel URLs. Structured JSON/CSV for analytics, AI and market research. No login.

- **URL**: https://apify.com/factden/fliggy-hotel-reviews-scraper.md
- **Developed by:** [Factden](https://apify.com/factden) (community)
- **Categories:** Travel, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 review scrapeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Fliggy Hotel Reviews Scraper (飞猪)

Extract **Fliggy (飞猪) hotel guest reviews** at scale - by city name or hotel URL - as clean JSON, CSV or
Excel, with an LLM-ready markdown column and a ready-made sentiment layer. **No login, no account, no
official API.**

Fliggy is Alibaba's travel platform, and its hotel review corpus is enormous - popular properties carry
**tens of thousands** of guest reviews (Hong Kong Disneyland Hotel alone has 50,000+). This actor turns that
into structured data for reputation monitoring, competitor analysis, market research, and AI/RAG pipelines.

> ⭐ If this actor saves you time, a quick **review on the Apify Store** genuinely helps - thank you.

### What makes this different

- **Search by city name, in any language** - type `Hong Kong`, `香港`, `Beijing` or `Sanya` and get every
  hotel's reviews. No hotel IDs or city codes to look up.
- **Sentiment layer included** - each hotel ships ranked aspect-tags with mention counts
  (`服务热心: 680`, `交通便利: 572`) - a sentiment summary competitors don't provide.
- **LLM-ready** - every review has a self-contained `markdownContent` chunk for RAG / fine-tuning.
- **Full corpus** - deep pagination pulls thousands of reviews per hotel, not just the first page.

### What does the Fliggy Hotel Reviews Scraper do?

Pick a **mode** and it returns:

- **Reviews mode** - paste Fliggy hotel URLs or just the hotel ID (shid). You get the **Reviews** dataset
  (one row per review): 1-5 rating + rating label, per-dimension **sub-ratings**, review text, check-in date,
  room type booked, reviewer province and level, photo count, reply threads (optional), aspect tags, and
  `markdownContent`. Sort newest-first (default) or by Fliggy's recommended ranking, with an optional from-date
  cutoff for fast incremental syncs.
- **Discovery mode** - type city names. It finds every hotel in the city and returns the **Hotels** dataset
  (one row per hotel): total review count, positive/negative counts, positive-review %, star rating, address,
  city, the aggregate 1-5 score, a ready-made sentiment aspect-tag summary, Fliggy's own **AI review summary** +
  structured pros/cons, phone, opening year and room count. (Discovery returns the hotel summaries; to pull a
  hotel's full reviews, feed its URL/ID into Reviews mode.)

It also covers Fliggy **travel items** (visa / package / ticket / tour) - paste an item URL to get its
reviews too.

### Does Fliggy have a reviews API?

No public one. Fliggy (飞猪) does not offer an official hotel-reviews API, and its own site requires the app
for hotel detail. This actor is the no-code alternative: it returns the same reviews the site shows, as
structured JSON / CSV, without login.

| | Official Fliggy | This scraper |
|---|---|---|
| Public reviews API | ❌ none | ✅ structured JSON / CSV / Excel |
| Login / account required | ✅ (app) | ❌ none |
| Search by city name | — | ✅ any language |
| Sentiment aspect-tags | — | ✅ included |
| LLM-ready markdown | — | ✅ per review |

### Who is it for?

Hotel chains and revenue managers (reputation + competitor benchmarking), OTAs and travel-tech (review
aggregation), market researchers (Chinese-traveler sentiment), and AI teams building travel RAG assistants.

### Use cases

#### Monitor your hotel's reputation on Fliggy

Track ratings, positive/negative counts and fresh reviews on a schedule; alert on new negatives.

#### Benchmark competitors in a city

Search a city, pull every hotel's aggregate rating + sentiment tags, and compare.

#### Build a Chinese-hotel review dataset for AI

Export `markdownContent` straight into a RAG index or fine-tuning set.

#### Complaint / negative-review analysis

Read each hotel's negative-review count and negative aspect-tags from the Hotels dataset, and sort reviews
newest-first to catch fresh complaints as they land.

### How to scrape Fliggy hotel reviews (to CSV)

1. Add the actor and open the input form.
2. Leave **Mode** on **Reviews** and paste **Fliggy hotel URLs or IDs** (e.g.
   `https://www.fliggy.com/jiudian/detail/810100/10023497` or just `10022949`). To search a whole city instead,
   switch **Mode** to **Discovery** and type city names.
3. Set **Max reviews per hotel**, **Sort** (Newest / Recommended), and an optional **From date**.
4. Click **Start**, then open the **Reviews** dataset and **Export → CSV** (or JSON / Excel).

### Input

| Field | Description |
|---|---|
| `mode` | `reviews` (scrape the hotels/IDs you paste) or `discovery` (find hotels in a city). |
| `startUrls` | Reviews mode. Fliggy hotel/item URLs, or a bare hotel ID (shid). Every Fliggy URL form is accepted. |
| `searchCities` | Discovery mode. City names in any language (`Hong Kong`, `Sanya`, `Beijing`) - discovered automatically. |
| `sortBy` | `newest` (date desc, default) or `recommended` (Fliggy's ranking). |
| `maxReviews` | Cap per hotel (default 200). |
| `fromDate` | Only reviews on or after this date. Fastest with `newest` sort (stops early). |
| `includeReplies` | Also fetch reply threads for reviews that have them (makes the run take a bit longer). |
| `maxHotels` | Discovery mode only. Hotels to take per city (default 20, max 100). |

### Output

**Reviews** (one row per review):

```json
{
  "hotelName": "香港丽豪酒店",
  "reviewId": "514066411",
  "reviewer": { "name": null, "tier": 4, "isAnonymous": true, "ipLocation": "江苏" },
  "overallRating": 5,
  "submittedAt": "2026-08-22 00:35:34",
  "roomName": "高级客房-配备特大双人床",
  "reviewText": "酒店房间比较在香港算比较大的，还带泳池可以游泳...",
  "checkInDate": "2026-07-19",
  "imagesCount": 2,
  "ratingLabel": "非常好",
  "subRatings": ["位置便利: 5", "清洁程度: 5", "服务态度: 5", "设施体验: 5"],
  "tags": [],
  "replies": [],
  "markdownContent": "# 香港丽豪酒店 review\n\n**Rating:** 5/5 ...",
  "extractedAt": "2026-08-31 13:56:14"
}
```

**Hotels** (one row per hotel):

```json
{
  "hotelName": "香港丽豪酒店",
  "reviewsCount": 12191,
  "positiveRatePct": 94.2,
  "goodRateCount": 10556,
  "badRateCount": 655,
  "aiSummary": "位置便利，门口公交直达机场（A41），部分房间有河景。早餐多样，自助形式受欢迎……",
  "aiAspects": [{"aspect": "公交站就在门口", "detail": "酒店门口就有公交站，直达机场和市区。", "sentiment": "positive"}],
  "sentimentTags": ["服务热心: 680", "交通便利: 572", "干净卫生: 213"],
  "phone": "+852-26497878",
  "roomCount": "1147间",
  "overallRating": 4.4,
  "hotelStars": 4,
  "cityName": "香港"
}
```

### Pricing

Pay-per-event, three simple parts, with subscription-tier discounts:

| Event | Free tier | Discounted (higher plans) |
|---|---|---|
| Actor start (per run) | $0.01 | down to $0.006 |
| Per review (Reviews mode) | $0.004 ($4 / 1,000) | down to $0.003 |
| Per hotel summary row (Discovery mode) | $0.01 | down to $0.006 |

Reviews mode bills the start fee + reviews. Discovery mode bills the start fee + one hotel summary row per hotel
(it does not scrape or bill per-review). A 100-hotel discovery run is about **$1**; a 5,000-review scrape is
about **$20**. See the **Pricing** tab for current rates; subscription discounts apply.

### Run on a schedule

Use Apify **Schedules** to run daily or weekly. Combine with `fromDate` so each run only pulls reviews since
the last, keeping cost low and data fresh.

### AI agents & RAG

Every review row includes `markdownContent` - a self-contained markdown chunk (hotel, rating, room,
check-in, reviewer location, text). Point your RAG loader at the Reviews dataset and ingest that column
directly; no reshaping needed. The actor is also callable from AI agents via the Apify MCP server.

### Legal & GDPR

This actor collects **publicly displayed** review content. Reviewer names are omitted when the review is
anonymous, and only the coarse province the platform already shows is included. Use the data in compliance
with applicable laws and the platform's terms; you are responsible for your use.

### FAQ

**Does Fliggy have a reviews API?** No public one - this actor is the structured alternative.

**Do I need a Fliggy account or login?** No.

**Do I need a China proxy?** No - any proxy works (verified from non-China exits).

**What languages are the reviews in?** Mostly Chinese, some multilingual; each row keeps the original text.

**Can I sort or filter reviews?** You can sort **newest-first** or by Fliggy's **recommended** ranking, and set a
**From date** cutoff. Fliggy has no server-side rating filter, so for negatives use the Hotels dataset's
negative-review count and negative aspect-tags instead.

**How many reviews can I get per hotel?** Thousands; set `maxReviews` to control volume and cost.

**Can I search without a hotel URL?** Yes - type city names under `searchCities`.

**Does it cover flights or prices?** No - this actor is hotel & travel-item reviews only.

**Can AI agents call it?** Yes, via the Apify MCP server.

**Is the output CSV/Excel-friendly?** Yes - flat rows; export to CSV, Excel, JSON or via API.

### Related Actors

- [Ctrip & Trip.com Reviews Scraper](https://apify.com/factden/ctrip-trip-reviews-scraper)
- [Agoda Hotel Reviews Scraper](https://apify.com/factden/agoda-hotel-reviews-scraper)
- [Google Hotels Scraper](https://apify.com/factden/google-hotels-scraper)
- [Expedia Hotel Reviews Scraper](https://apify.com/factden/expedia-hotel-reviews-scraper)
- [Booking.com Scraper](https://apify.com/factden/booking-com-scraper)
- [All FactDen actors →](https://apify.com/factden)

### Changelog

- **2026-08-31** - v1.0: initial release. Hotel & travel-item reviews, city-name discovery, sentiment
  aspect-tags, hotel profiles, reply threads, LLM-ready markdown.

### Support

- Open the **Issues** tab on this actor's page (preferred).
- Or email support@factden.com for private / billing / partnership questions.

# Actor input Schema

## `mode` (type: `string`):

What to do. "Reviews" scrapes the hotels/items you paste below. "Discovery" finds every hotel in a city and scrapes each one.

## `startUrls` (type: `array`):

Reviews mode. Fliggy hotel/item URLs, or just the bare hotel ID (shid). Accepts every Fliggy URL form: www.fliggy.com/jiudian/detail/{city}/{shid}, hotel.fliggy.com/hotel\_detail2.htm?shid=..., mobile/H5 links, and travel-item URLs (id=...).

## `searchCities` (type: `array`):

Discovery mode. City names to find hotels in, e.g. "Hong Kong", "Sanya", "Beijing". Each city is resolved to its top hotels and every one is scraped. No city codes needed.

## `sortBy` (type: `string`):

Newest first (chronological, recommended) or Fliggy's own "recommended" ranking. Newest also lets the From-date cutoff stop early for fast incremental syncs.

## `maxReviews` (type: `integer`):

Reviews mode. Maximum reviews to scrape per hotel/item (1-5000). Popular hotels have tens of thousands available.

## `fromDate` (type: `string`):

Only include reviews submitted on or after this date (YYYY-MM-DD). Fastest with "Newest first" sort, which stops the crawl as soon as it passes the cutoff.

## `includeReplies` (type: `boolean`):

Also fetch the follow-up reply thread for reviews that have one (a small minority). Turning this on makes the run take a bit longer to finish.

## `maxHotels` (type: `integer`):

Discovery mode only. How many hotels to take from each city before scraping their reviews.

## `proxyConfiguration` (type: `object`):

Apify Proxy by default. Any exit works (a China IP is not required).

## Actor input object example

```json
{
  "mode": "reviews",
  "startUrls": [
    "https://www.fliggy.com/jiudian/detail/810100/10023497",
    "10022949"
  ],
  "searchCities": [],
  "sortBy": "newest",
  "maxReviews": 200,
  "includeReplies": false,
  "maxHotels": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reviews` (type: `string`):

Per-review rows: rating (1-5), text, check-in date, room type, reviewer province, images, reply threads, and an LLM-ready markdown view. One row per review.

## `hotels` (type: `string`):

Per-hotel summary rows: aggregate rating, positive/negative counts, sentiment aspect-tags, star, address, facilities, and completeness. One row per hotel/item.

# 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 = {
    "startUrls": [
        "https://www.fliggy.com/jiudian/detail/810100/10023497",
        "10022949"
    ],
    "searchCities": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("factden/fliggy-hotel-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 = {
    "startUrls": [
        "https://www.fliggy.com/jiudian/detail/810100/10023497",
        "10022949",
    ],
    "searchCities": [],
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.fliggy.com/jiudian/detail/810100/10023497",
    "10022949"
  ],
  "searchCities": []
}' |
apify call factden/fliggy-hotel-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,factden/fliggy-hotel-reviews-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6ldfr2MRvIjd5vBcD/builds/epBxfqCjncvvKcmlv/openapi.json
