# Popply Scraper (Korean Pop-Up Stores: Schedules + Locations) (`kdatafactory/popply-scraper`) Actor

Scrape Korean pop-up store data from Popply (popply.co.kr) — the #1 pop-up aggregator. Returns each pop-up: name, brand, category, location (Seongsu, Hongdae, The Hyundai), start/end dates, status, image and URL. Event-based local retail intelligence. Privacy-safe: no personal data.

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

## Pricing

from $2.50 / 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/platform/actors/running/actors-in-store#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

## Popply Scraper — Korean Pop-Up Stores (Schedules, Brands & Locations)

Scrape **Korean pop-up store** data from [Popply](https://popply.co.kr) (팝플리) — Korea's #1 pop-up-store aggregator. Popply tracks the temporary, time-limited retail experiences that brands run across Seoul and Korea (Seongsu / 성수, Hongdae / 홍대, The Hyundai Seoul / 더현대, Gangnam, and beyond).

This actor turns that live calendar into a clean, structured dataset: for every pop-up it returns the **name, organizing brand, category, location, start/end dates, current status, image and URL**. It is the **event / time-limited complement** to a Naver Place or Google-Maps business scraper — instead of permanent shops, you get what's opening *this week* and *next*.

**Privacy-safe by construction:** only pop-up, venue and public brand data is collected. No personal names, nicknames, ids, profiles, phone numbers or reviewer/commenter identity — ever.

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

### What it does

- Pulls the live pop-up list straight from Popply's public JSON backend (`api.popply.co.kr`) — fast and reliable, no headless browser needed.
- Merges the flat store list with Popply's curated "course" groups and **deduplicates** by pop-up id for maximum coverage.
- Maps each pop-up's numeric category to a human-readable label (Fashion, Beauty/Health, Food/Beverage, Character/IP, Goods, Exhibition, …).
- Normalizes status to `ongoing` (open now) or `upcoming` (scheduled).
- Optional **category / location / status filters** so you only pay for the rows you want.

### Input

All inputs are optional — run with no input to scrape every live pop-up.

| Field | Type | Description |
|-------|------|-------------|
| `category` | string | Keep only this category. English alias (`fashion`, `beauty`, `food`, `character`, `goods`, `exhibition`, …) or the Korean name (`패션`, `뷰티/헬스`, …). |
| `location` | string | Substring match on the pop-up's address / area, e.g. `성동` (Seongsu), `마포` (Hongdae), `강남`, `부산`. |
| `status` | select | `all` (default), `ongoing` (open now), or `upcoming` (scheduled). |
| `maxItems` | integer | Max pop-ups to scrape (default 200). |
| `proxyConfiguration` | proxy | Optional. The API is served to most IPs; a failed proxy tunnel auto-falls-back to a direct connection. |

#### Input example

```json
{
  "category": "fashion",
  "location": "성동",
  "status": "ongoing",
  "maxItems": 100
}
```

### Output

One record per pop-up store (real sample from a live run):

```json
{
  "source": "popply",
  "popup_id": "5475",
  "name": "타이니빌 팝업",
  "brand": "타이니빌",
  "category": "캐릭터/IP",
  "location": "경기 성남시",
  "address": "경기 성남시 분당구 판교역로146번길 20",
  "venue": "현대백화점 판교점 4층 아이코닉스퀘어",
  "latitude": 37.3927946,
  "longitude": 127.1120875,
  "start_date": "2026-07-10",
  "end_date": "2026-07-23",
  "status": "upcoming",
  "view_count": 5,
  "url": "https://popply.co.kr/popup/5475",
  "image_url": "https://d8nffddmkwqeq.cloudfront.net/store/f1786627%2C...",
  "scraped_at": "2026-07-09T13:33:15+09:00"
}
```

| Field | Notes |
|-------|-------|
| `source` | Always `"popply"`. |
| `popup_id` | Stable Popply store id. |
| `name` | Pop-up title. |
| `brand` | Organizing commercial brand (public info, like a shop name). |
| `category` | Human-readable Korean category label. |
| `location` | Coarse public area (e.g. `서울 성동구`). |
| `address` | Full street address of the venue. |
| `venue` | Venue / floor detail (e.g. department-store floor) when Popply provides it. |
| `latitude` / `longitude` | Map coordinates. |
| `start_date` / `end_date` | Run dates (`YYYY-MM-DD`). |
| `status` | `ongoing` or `upcoming`. |
| `view_count` | Popply page view count (aggregate; not personal). |
| `url` | Public pop-up page. |
| `image_url` | Cover image. |
| `scraped_at` | KST (UTC+9) ISO-8601 timestamp. |

The core fields (name, brand, category, location, dates, coordinates, status, url, image) populate on every record; `venue` is present for most but not all pop-ups (~80%), and the public feed only exposes ongoing/upcoming pop-ups (not `ended`) — see Known Limitations below and `samples/sample-output.json` for 40 real records.

### Use cases

- **Local retail intelligence** — track which brands are running pop-ups, where, and when. The event-based complement to permanent-store data.
- **Trend research** — pop-ups are where brands test drops before wide retail; combine with e-commerce actors (Musinsa, 29CM) for a full "what's launching in Korea" feed.
- **Location scouting / commercial real estate** — see which venues and neighborhoods (Seongsu, The Hyundai, Hongdae) host the most pop-ups.
- **Marketing & PR monitoring** — get alerted to competitor and IP/character (K-pop, gaming, anime) activations as they go live.
- **AI agents & apps** — a fresh, structured "pop-ups near me / this week" dataset for recommendation and event-discovery products.

### ❓ FAQ

**Is it legal to scrape this data?**
This actor collects only public, non-personal catalog data — the same pop-up listings any visitor sees on Popply without logging in. No personal data is collected. You are responsible for how you use the data; see the legality & privacy note below.

**What does it cost in practice?**
$2.50 per 1,000 results (launch pricing) + a few cents of platform usage. Example: a 500-result daily pull costs about $1.25/day. Apify's free $5 monthly credit covers ~2,000 results.

**Do I need to configure proxies?**
No — the default settings work out of the box. For very large or repeated runs, Apify Proxy (RESIDENTIAL, country KR) is an optional way to avoid rate limits; a failed proxy tunnel automatically falls back to a direct connection.

**How fresh is the data?**
Every run scrapes the live site at run time. Schedule the actor for recurring snapshots — pop-ups change weekly, so a scheduled run makes a great forward-looking calendar.

**What is NOT included?**
Historical / already-ended pop-ups (the public feed only lists ongoing and upcoming ones) and per-pop-up user reviews or comments (never collected, to avoid touching commenter identity). `venue` (floor detail) is present on ~80% of records.

### 🤖 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/popply-scraper",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Your agent can then pull currently-open Korean pop-up stores 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:

- [naver-place-scraper](https://apify.com/kdatafactory/naver-place-scraper) — Korean local businesses from Naver Place/Maps
- [tumblbug-scraper](https://apify.com/kdatafactory/tumblbug-scraper) — Korean crowdfunding projects, pledges and categories from Tumblbug

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

### Rate, legality & privacy

- **Public data only.** The actor reads the same public JSON endpoints Popply's own website calls to render its listing pages — no login, no private API.
- **Polite by default.** Requests are spaced ≥ 500 ms; a lite-test mode caps volume for validation.
- **No personal data.** Pop-up / venue / brand fields only. Reviewer and commenter identity is never touched. `brand` is a public commercial name, comparable to a shop name.
- **Proxy optional.** Popply's API answers most IPs directly. For very large or repeated runs, Apify Proxy (RESIDENTIAL, country KR) is recommended to avoid rate limits; a failed proxy tunnel automatically falls back to a direct connection.

### Known limitations

- Popply's public listing feed exposes **currently live and upcoming** pop-ups. Historical / already-ended pop-ups are not part of the standard feed, so `status: "ended"` rarely appears — treat this actor as a *forward-looking* calendar.
- `venue` (floor / sub-venue detail) is present for most but not all pop-ups (the rest carry the full street address only).
- Per-pop-up user reviews and comments are intentionally **not** collected (they would require reading commenter identity, which this actor never does).

***

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

# Actor input Schema

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

Optional. Keep only pop-ups in this category. Accepts the English category label or its Korean name — e.g. "fashion" / "패션", "beauty" / "뷰티/헬스", "food" / "푸드/음료", "character" / "캐릭터/IP", "goods" / "소품/굿즈", "exhibition" / "전시". Leave empty to scrape every category.

## `location` (type: `string`):

Optional. Keep only pop-ups whose address contains this text (substring match). Use a Korean area name as it appears in Popply, e.g. "성동" (Seongsu), "마포" (Hongdae/Mapo), "강남", "부산". Leave empty to scrape all locations.

## `status` (type: `string`):

Optional. Keep only pop-ups with this status. "ongoing" = currently open, "upcoming" = scheduled to open. Leave as "all" to include both.

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

Maximum number of pop-up stores to scrape.

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

Popply's public API is served to most IPs. A proxy is optional; if a proxy tunnel fails, the actor automatically falls back to a direct connection. RESIDENTIAL (country KR) is recommended only if you hit rate limits on large runs.

## Actor input object example

```json
{
  "category": "fashion",
  "location": "성동",
  "status": "all",
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("kdatafactory/popply-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 = {}

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/mMf2Qf18dCmaSnSVK/builds/V0qfJHgRffu8V34yJ/openapi.json
