# Yeogi Reviews Scraper (`knagymate/yeogi-reviews-scraper`) Actor

Scrape hotel and accommodation reviews from Yeogi.com (여기어때 - GoodChoice). Extract guest ratings, feedback text, room names, traveler types, photos, and host replies. Export structured data to JSON, CSV, or Excel with flexible cutoff date and sorting filters.

- **URL**: https://apify.com/knagymate/yeogi-reviews-scraper.md
- **Developed by:** [knagymate](https://apify.com/knagymate) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 reviews

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Yeogi Reviews Scraper

Scrape **Yeogi (여기어때 - GoodChoice)** hotel and accommodation reviews at scale with a fast, reliable, and production-ready Apify Actor.

Extract structured **Korean accommodation review data** from South Korea's leading travel and leisure booking platform, including:

- ⭐ Guest ratings on a 0–10 scale
- 📝 Detailed review text and guest feedback
- 👤 Reviewer nickname and profile picture
- 🛏️ Booked room name and space group
- 👥 Traveler type (couples, families, solo travelers)
- 📸 Guest-uploaded photo URLs
- 💬 Official partner/host responses
- 👍 Review like/upvote counts & best review badges
- 🏨 Accommodation summary with average rating and total review counts

Perfect for:

- 🇰🇷 South Korea travel and hospitality market intelligence
- 🤖 AI/LLM training datasets and sentiment analysis
- 📊 Hotel reputation management and competitive benchmarking
- 📈 Customer experience tracking and brand monitoring
- 🏨 Pricing and amenities research across Korean hotels, resorts, and motels

***

## ✨ Features

- ✅ **Full Yeogi.com Coverage**: Scrape any domestic accommodation listing (hotels, resorts, pensions, motels, guesthouses)
- ✅ **Rich Review Metadata**: Capture ratings, room types, traveler types, photos, and partner responses
- ✅ **Flexible Sorting**: Choose between newest first (`latestFirst`), recommended/ranking (`highRankingScoreFirst`), highest rating (`highRatingFirst`), or lowest rating (`lowRatingFirst`)
- ✅ **Incremental Scraping with Cutoff Date**: Only extract reviews published on or after your chosen cutoff date
- ✅ **Configurable Limits**: Scrape a set number of reviews per accommodation or leave unlimited
- ✅ **Summary Records**: Always get accommodation overview metadata even when no reviews match filters
- ✅ **Apify API Ready**: Output JSON, CSV, Excel, or connect directly to Make, Zapier, Google Sheets, or webhooks

***

## 🔍 Supported Yeogi URLs

The scraper supports standard Yeogi domestic and overseas accommodation detail URLs:

```text
https://www.yeogi.com/domestic-accommodations/69729
https://www.yeogi.com/domestic-accommodations/67416?checkIn=2026-10-24&checkOut=2026-10-25
https://www.yeogi.com/overseas-accommodations/36830?checkIn=2026-11-24&checkOut=2026-11-25&rooms=1&adults=2
```

***

## ⚙️ Input Configuration

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | One or more Yeogi accommodation URLs (e.g., `https://www.yeogi.com/domestic-accommodations/69729`) |
| `maxReviewsPerHotel` | integer | Maximum reviews to scrape per accommodation (default: `100`, leave empty for unlimited) |
| `cutoffDate` | date | Return only reviews published on or after this date (`YYYY-MM-DD`) |
| `sortBy` | select | Sort order: `latestFirst` (default), `highRankingScoreFirst`, `highRatingFirst`, `lowRatingFirst` |
| `alwaysReturnSummary` | boolean | Include accommodation summary record even if no reviews match (default: `true`) |

***

## 📥 Example Input

```json
{
  "startUrls": [
    {
      "url": "https://www.yeogi.com/domestic-accommodations/69729"
    }
  ],
  "maxReviewsPerHotel": 100,
  "cutoffDate": "2026-01-01",
  "sortBy": "latestFirst",
  "alwaysReturnSummary": true
}
```

***

## 📤 Example Output

#### Review Record (`recordType: "review"`)

```json
{
  "recordType": "review",
  "reviewId": "35284922",
  "reviewDate": "2026-10-24T13:26:42+0900",
  "updatedDate": "2026-10-24T13:26:42+0900",
  "reviewerName": "그래그래고리",
  "reviewerProfileImage": "https://image.goodchoice.kr/profile/ico/ico_21.png",
  "reviewText": "가볍게 이용하기 좋아용\n숙소컨디션도 좋아요",
  "roomName": "원룸 패밀리 트윈 [굿초이스]",
  "travelerType": null,
  "ratings": {
    "overall": 10.0
  },
  "images": [
    {
      "id": 9475100,
      "url": "https://image.withstatic.com/irs/2026/10/24/70/7036eb23a8d04ab48b4b2aad5a4d9368.jpg"
    }
  ],
  "partnerComments": [
    {
      "id": 5170000,
      "userNickName": "제휴점 답변",
      "content": "찾아주시는 모든 고객님들의 하루 동안 쌓인 피로를 해소하는 공간인 객실의 청결 부분은 항상 제일 중요시 생각하며...",
      "createdAt": "2026-10-21T09:36:04+0900"
    }
  ],
  "likeCount": 0,
  "isBestReview": false,
  "hotelSummary": {
    "hotelId": "69729",
    "hotelName": "체스터톤스 호텔",
    "startUrl": "https://www.yeogi.com/domestic-accommodations/69729",
    "actualUrl": "https://www.yeogi.com/domestic-accommodations/69729",
    "numberOfReviews": 4468,
    "ratings": {
      "overall": 9.1
    }
  }
}
```

#### Summary Record (`recordType: "summary"`)

```json
{
  "recordType": "summary",
  "hotelSummary": {
    "hotelId": "69729",
    "hotelName": "체스터톤스 호텔",
    "startUrl": "https://www.yeogi.com/domestic-accommodations/69729",
    "actualUrl": "https://www.yeogi.com/domestic-accommodations/69729",
    "numberOfReviews": 4468,
    "ratings": {
      "overall": 9.1
    }
  }
}
```

***

## 🚀 Use Cases

- **Hospitality & Market Research**: Benchmark service quality, ratings, and customer sentiment across Korean hotels and resorts.
- **Competitor Monitoring**: Track new customer feedback and host responses for competitor accommodations in popular destinations like Seoul, Busan, Jeju, and Gangwon-do.
- **NLP & Sentiment Analysis**: Train sentiment classification models on real Korean customer reviews with authentic slang, ratings, and room category correlations.
- **Automated Alerts**: Monitor negative guest feedback via webhooks and alert property managers in real time.

# Actor input Schema

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

One or more Yeogi.com accommodation URLs (e.g., https://www.yeogi.com/domestic-accommodations/69729 or https://www.yeogi.com/overseas-accommodations/36830).

## `maxReviewsPerHotel` (type: `integer`):

Maximum number of reviews to scrape per accommodation. Leave empty or set to 0 for unlimited.

## `cutoffDate` (type: `string`):

Only include reviews published on or after this date. Format: YYYY-MM-DD. Leave empty to scrape all reviews.

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

Ordering of reviews returned by Yeogi. Defaults to newest first.

## `alwaysReturnSummary` (type: `boolean`):

Include a summary record even if no reviews match the criteria.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.yeogi.com/domestic-accommodations/69729"
    }
  ],
  "maxReviewsPerHotel": 100,
  "sortBy": "latestFirst",
  "alwaysReturnSummary": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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": [
        {
            "url": "https://www.yeogi.com/domestic-accommodations/69729"
        }
    ],
    "maxReviewsPerHotel": 100,
    "sortBy": "latestFirst",
    "alwaysReturnSummary": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("knagymate/yeogi-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": [{ "url": "https://www.yeogi.com/domestic-accommodations/69729" }],
    "maxReviewsPerHotel": 100,
    "sortBy": "latestFirst",
    "alwaysReturnSummary": True,
}

# Run the Actor and wait for it to finish
run = client.actor("knagymate/yeogi-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": [
    {
      "url": "https://www.yeogi.com/domestic-accommodations/69729"
    }
  ],
  "maxReviewsPerHotel": 100,
  "sortBy": "latestFirst",
  "alwaysReturnSummary": true
}' |
apify call knagymate/yeogi-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,knagymate/yeogi-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/1p4Cg4NxJAfSeGA47/builds/1YtRsJ2cEcmOQqljR/openapi.json
