# Kakao Gift Ranking Scraper — Korea Gifting Trend Board (`kdatafactory/kakaogift-scraper`) Actor

Scrape Kakao Gift (카카오톡 선물하기) realtime ranking board — Korea's biggest social gifting store: rank, product, brand, KRW price, discount, wish count and image as clean JSON. Covers the 전체 board plus 내돈내산, 신상, 위시TOP, 단독, 할인·혜택 and NEW. Built on Kakao's own ranking API.

- **URL**: https://apify.com/kdatafactory/kakaogift-scraper.md
- **Developed by:** [Seok June Park](https://apify.com/kdatafactory) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 5 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.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.

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

## Kakao Gift Ranking Scraper — Korea Gifting Trend Board 🎁

Scrape the live **best-seller gift rankings** from [Kakao Gift (카카오톡 선물하기)](https://gift.kakao.com) — Korea's dominant **social gifting store**, built into KakaoTalk — as clean, structured JSON. Get rank, product name, brand, price (KRW), discount, wish count, and image for every product in the realtime ranking, in one run.

Because "선물하기" is where a huge share of Koreans send gifts (birthdays, holidays, thank-yous), its realtime ranking is a fast, high-signal read on **what's actually selling in Korea right now** — perfect as the daily feed behind a **Korean e-commerce shopping-trend dashboard**.

> **Try it free.** Apify's free plan includes $5 of monthly platform credit — at **$4.00 / 1,000 results** that's roughly **1,250 products** from this actor, no credit card required. Set your input, click Start, and export JSON/CSV/Excel.

***

### What it does

This actor reads ranking data straight from Kakao Gift's own public ranking API (the same endpoint the site calls as you browse the 랭킹 page), so results are fast and complete — no fragile full-page scraping, no headless browser, no login. You can scrape:

- **The main daily best-seller ranking** (전체 / all realtime trending — the default), or
- **A specific realtime tab** — most-wished (위시TOP), new arrivals (신상), exclusives (단독), on-sale (할인·혜택), and more — by setting `navId`.

Every run captures the ranking **in order** (`rank` = the product's position on the board) with its live price, discount, and popularity (wish count).

> **Why Kakao Gift?** KakaoTalk is used by nearly everyone in Korea, and its "선물하기" gift store is the default way people send gifts through the app. That makes its realtime best-seller board one of the cleanest live indicators of Korean consumer demand — across food, beauty, health, living, and vouchers. This actor turns that board into a structured dataset you can trend, chart, and pipe into your own tools.

***

### Input

| Field | Type | Description |
|-------|------|-------------|
| `navId` | integer | Which realtime ranking tab to scrape. `10000` = 전체 / **All** (the main daily best-seller ranking, default). Other live tabs: `10001` 내돈내산 (self-purchase), `12` 신상 (new arrivals), `10002` 위시TOP (most-wished), `10003` 단독 (exclusive), `10005` 할인·혜택 (on-sale), `10004` NEW. |
| `maxItems` | integer | Max products to collect. Default `100`, max `2000`. The feed paginates 100 per request. |
| `proxyConfiguration` | object | Proxy settings (see below). Defaults to a direct connection. |

The actor fetches Kakao's live tab list at run time and falls back to `10000` if the `navId` you pass isn't a valid trending tab — so an empty/default input always produces the main best-seller ranking.

#### Input example

```json
{
  "navId": 10000,
  "maxItems": 100
}
```

```json
{
  "navId": 10002,
  "maxItems": 200
}
```

***

### Output

Each ranked product is one dataset record. `rank` is the product's 1-based position in the ranking (page 0 → ranks 1-100, page 1 → 101-200, …). `price_krw` is the current selling price in Korean won; `basic_price_krw` is the list price before discount, and `discount_rate` is the percentage off. `wish_count` is how many people have wish-listed the product (the ranking's core popularity signal).

```json
{
  "source": "kakao_gift",
  "rank": 1,
  "product_id": "2306784",
  "name": "[경복궁] 영양 삼계탕 (1kg*2팩)",
  "brand": "경복궁",
  "price_krw": 23500,
  "basic_price_krw": 30400,
  "discount_rate": 22,
  "review_count": 0,
  "wish_count": 3730,
  "product_type": "Shipping",
  "url": "https://gift.kakao.com/product/2306784",
  "image_url": "https://st.kakaocdn.net/product/gift/product/20230724154945_d9334184970e45599666441b31b55fb4.jpg",
  "updated_at": "07.15 09:00",
  "scraped_at": "2026-07-15T09:54:09+09:00"
}
```

A full 30-item sample from a real run is in [`samples/sample-output.json`](samples/sample-output.json).

| Field | Meaning |
|-------|---------|
| `source` | Always `"kakao_gift"`. |
| `rank` | 1-based position in the ranking. |
| `product_id` | Kakao Gift product id. |
| `name` | Product name (Korean, as listed). |
| `brand` | Brand / seller name, else `null`. |
| `price_krw` | Current selling price in KRW. |
| `basic_price_krw` | List price before discount, in KRW. |
| `discount_rate` | Discount percentage off the list price. |
| `review_count` | Review count when the ranking feed exposes it (usually `0` — see limitations). |
| `wish_count` | Number of wish-list adds (popularity signal). |
| `product_type` | Fulfilment type, e.g. `Shipping` (배송 gift) or `Coupon` (교환권). |
| `url` | Product page URL. |
| `image_url` | Main product photo URL. |
| `updated_at` | When Kakao last refreshed the ranking (`MM.DD HH:mm`, KST). |
| `scraped_at` | ISO-8601 timestamp (KST, UTC+9). |

The core fields — `rank`, `name`, `brand`, `price_krw`, `basic_price_krw`, `discount_rate`, `wish_count`, `product_type`, `url`, `image_url` — were populated on **40/40** records in the live test. `review_count` is present but is `0` in the ranking feed (see Known limitations).

***

### Use cases

- **Daily Korean e-commerce trend dashboard** — snapshot the best-seller board every day and chart what's rising and falling across Korea's biggest social-gifting store. `rank` + `wish_count` + `discount_rate` give you a clean movers/shakers feed.
- **Consumer demand & category research** — see which products, brands, and price points dominate Korean gifting week to week; pair the All tab with 위시TOP and 신상 for demand vs. novelty signals.
- **Price & promotion monitoring** — track `price_krw` vs `basic_price_krw` and `discount_rate` to watch how discounting moves products up the board.
- **AI agents & datasets** — feed a structured, ranked best-seller list into trend models, dashboards, or LLM agents.

***

### ❓ FAQ

**Is it legal to scrape this data?**
This actor collects only public, non-personal ranking data — the same best-seller board any visitor sees on gift.kakao.com without logging in. No personal or account data is collected. You are responsible for how you use the data; see the legality note below.

**What does it cost in practice?**
$4.00 per 1,000 results + a few cents of platform usage. Example: a 100-result daily pull costs about **$0.40/day**. Apify's free $5 monthly credit covers **~1,250 results** (5 ÷ 4.00 × 1,000).

**Do I need to configure proxies?**
No — the default settings work out of the box. Kakao Gift's ranking API serves the board without a bot wall, so the actor runs fine on a **direct connection**. For very heavy pulls you can optionally enable Apify Proxy — see the proxy note below.

**How fresh is the data?**
Every run scrapes the live ranking at run time, and each record carries Kakao's own `updated_at` timestamp. Kakao refreshes the board through the day; schedule the actor for recurring snapshots (e.g. a daily trend feed).

**What is NOT included?**
Per-product detail (full description, option-level pricing, individual reviews) isn't fetched — this actor is a **ranking** scraper, not a product-detail scraper. `review_count` comes through as `0` because the ranking feed doesn't populate it. Product names and brands are Korean strings and are not translated.

***

### 🤖 Use with AI agents (MCP)

Call this Actor as a tool from Claude or any MCP-compatible AI agent — no glue code. Point your MCP client at Apify's server, scoped to this Actor:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=kdatafactory/kakaogift-scraper",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Your agent can then pull Korea's live gifting best-sellers on demand — no scraping code in your app. Grab a free token from [Apify → Integrations](https://console.apify.com/settings/integrations).

### 🇰🇷 More Korean data actors

This actor is part of a suite of Korean-platform scrapers by the same maintainer. Combine them to cover Korea's shopping trends across every major vertical:

- [oliveyoung-scraper](https://apify.com/kdatafactory/oliveyoung-scraper) — K-beauty bestsellers from Korea's #1 beauty retailer
- [musinsa-scraper](https://apify.com/kdatafactory/musinsa-scraper) — fashion rankings from Korea's #1 fashion marketplace
- [zigzag-scraper](https://apify.com/kdatafactory/zigzag-scraper) — trending women's fashion from Korea's Zigzag app
- [kurly-scraper](https://apify.com/kdatafactory/kurly-scraper) — best-selling grocery & food from Market Kurly
- [danawa-scraper](https://apify.com/kdatafactory/danawa-scraper) — price-comparison and electronics data from Danawa

Browse all: [apify.com/kdatafactory](https://apify.com/kdatafactory)

***

### Rate limiting & legality

- The actor collects **only public, non-authenticated data**. It never logs in and never touches private endpoints.
- **No personal data** is collected — only product, brand, price, and popularity attributes from the public ranking board.
- Requests are rate-limited: one page at a time with a ≥ 500 ms delay between requests, to stay gentle on Kakao's servers.
- You are responsible for using the data in line with Kakao Gift's terms of service and applicable law.

#### Known limitations (honesty note)

- This is a **ranking** scraper. It returns the best-seller board (rank, product, brand, price, discount, wish count, image), not full product-detail pages.
- **`review_count`** comes through as `0`: the ranking feed doesn't expose review counts, so the field is present for schema stability but not a guaranteed signal. **`wish_count`** is the ranking's real popularity metric.
- **Names and brands are Korean strings** and are not translated.
- **The board is realtime and re-ranks through the day.** Two runs minutes apart can differ; each record's `updated_at` tells you which ranking edition it came from.

***

*If this actor saves you time, a rating on the [Store page](https://apify.com/kdatafactory/kakaogift-scraper) helps a solo maintainer a lot. Found an issue? Open it in the Issues tab — I respond fast.*

### What this ranking actually is (corrected 2026-08-21)

Kakao publishes this as a **realtime trending board**, not a units-sold best-seller chart — its own
API groups the tabs under `trendingTabs`, and the tabs themselves (신상 new arrivals, 위시TOP
most-wished, 단독 exclusive, 할인·혜택 on sale) are curation surfaces rather than sales cuts.

Earlier builds described it as "best-seller rankings", which overstated what the number means. The
listing now says trend board. Kakao does not publish the weighting behind the board, so this actor
does not claim to know it either — `rank` is the position Kakao shows on the 전체 board.

***

### ⭐ Found it useful?

If this Actor saves you time, a short review on its Apify Store page helps other buyers find it. Missing a field or hit a bug? Open an issue on the **Issues** tab; reports are answered and fixed.

# Actor input Schema

## `category` (type: `string`):

Scrape a PRODUCT-category best-seller ranking instead of the occasion/all ranking. Korean name (or English alias): 뷰티(beauty), 식품(food), 건강(health), 리빙(living), 패션(fashion), 가전·디지털(digital), 유아동(baby), 레저·스포츠, 명품패션, 책·음반티켓, 주류, 반려동물, 교환권, 전체. Leave blank to use the occasion/all ranking (navId) below.

## `navId` (type: `integer`):

Which board of Kakao's realtime gift ranking to scrape. 10000 = 전체 (the overall board, default). Other tabs: 10001 = 내돈내산 (bought for oneself), 12 = 신상 (new arrivals), 10002 = 위시TOP (most-wished), 10003 = 단독 (exclusive), 10005 = 할인·혜택 (on sale), 10004 = NEW. NOTE: Kakao publishes these as a TRENDING board (its own API groups them under `trendingTabs`), not as a units-sold best-seller chart — earlier builds described it as a best-seller ranking, which overstated it. The actor fetches Kakao's tab list at run time and falls back to 10000 if the id isn't a valid board.

## `maxItems` (type: `integer`):

Maximum number of ranked products to collect. The feed is paginated 100 per request; rank = position in the ranking. Default 100, max 2000.

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

Proxy settings. Kakao Gift's ranking API serves data without a bot wall, so the actor runs fine on a direct connection (default). If you ever see blocks at high volume, enable Apify Proxy here.

## Actor input object example

```json
{
  "category": "",
  "navId": 10000,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Every record collected in this run.

# 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 = {
    "navId": 10000,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("kdatafactory/kakaogift-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 = {
    "navId": 10000,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("kdatafactory/kakaogift-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 '{
  "navId": 10000,
  "maxItems": 100
}' |
apify call kdatafactory/kakaogift-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kdatafactory/kakaogift-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/9s7haxHnpgwjQn9PU/builds/d7JW0R13Xo3Lj30BG/openapi.json
