# Bunjang Scraper: Korean Resale & Secondhand Market (번개장터) (`kdatafactory/bunjang-scraper`) Actor

Scrape Bunjang (번개장터), Korea's largest secondhand & resell marketplace: keyword search and category browse — product names, KRW prices, condition, sale status, and images as clean JSON. Built on Bunjang's JSON API. No seller identity. For resale price research & sneaker/luxury resell tracking.

- **URL**: https://apify.com/kdatafactory/bunjang-scraper.md
- **Developed by:** [Seok June Park](https://apify.com/kdatafactory) (community)
- **Categories:** E-commerce, Other, Automation
- **Stats:** 0 total users, 0 monthly users, 100.0% runs succeeded, 0 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.

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

## Bunjang Scraper 🛒

Scrape **secondhand & resell listings** from [Bunjang](https://m.bunjang.co.kr) (번개장터) — Korea's largest peer-to-peer resale marketplace — as clean, structured JSON. Get product names, KRW prices, condition (new/used), sale status, images, favorite counts, and a coarse public region in one call.

Built for **resale price research**, **sneaker & luxury resell tracking**, and **secondhand market analysis**.

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

---

### What it does

This actor pulls listing data directly from Bunjang's public search/browse JSON API (the same one that powers bunjang.co.kr), so results are fast and complete — no fragile HTML scraping in the happy path. Two modes:

- **Search** — every listing matching a keyword (e.g. `nike`, `아이폰`, `jordan 1`). Optionally narrow to a single category.
- **Category** — browse the newest / most-relevant listings in a Bunjang category (e.g. Shoes, Bags, Digital).

Four sort orders are supported: relevance/popularity, newest, price low→high, and price high→low.

> **Privacy first:** this actor collects **item data only**. It never emits seller nicknames, IDs, profiles, or shop handles. Region is coarsened to a public province + city/district label — never a neighborhood or a person.

---

### Input

| Field | Type | Description |
|-------|------|-------------|
| `mode` | string | `"search"` or `"category"`. |
| `query` | string | **Search mode:** the keyword to search for. Required in search mode. |
| `categoryId` | string | **Category mode:** the Bunjang category id (required). Optional in search mode to narrow results. |
| `order` | string | `"score"` (relevance), `"date"` (newest), `"price_asc"`, or `"price_dsc"`. Default `score`. |
| `maxItems` | integer | Max listings to collect. Default `100`. |
| `proxyConfiguration` | object | Proxy settings. Apify RESIDENTIAL recommended for large runs. |

#### Common category IDs

| ID | Category |
|------|----------|
| `310` | Women's clothing |
| `320` | Men's clothing |
| `405` | Shoes |
| `430` | Bags / Wallets |
| `421` | Watches |
| `600` | Digital |
| `700` | Sports / Leisure |
| `910` | Star goods (K-pop) |

#### Input example

```json
{
  "mode": "search",
  "query": "나이키",
  "order": "date",
  "maxItems": 100
}
````

```json
{
  "mode": "category",
  "categoryId": "405",
  "order": "score",
  "maxItems": 200
}
```

***

### Output

Each listing is one dataset record. Prices are in KRW (Korean won). `status` is one of `selling` / `reserved` / `sold`. `condition` is `new` or `used`.

```json
{
  "source": "bunjang",
  "product_id": "416892841",
  "name": "나이키 x 트래비스 스캇 에어맥스 1 캑터스 브라운 275",
  "price_krw": 209000,
  "status": "selling",
  "condition": "new",
  "category": "405100",
  "region": "서울특별시 강남구",
  "free_shipping": false,
  "favorite_count": 12,
  "url": "https://m.bunjang.co.kr/products/416892841",
  "image_url": "https://media.bunjang.co.kr/product/416892841_1_1783126918_w400.jpg",
  "listed_at": "2026-07-09T09:12:55+09:00",
  "scraped_at": "2026-07-09T09:13:00+09:00"
}
```

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

| Field | Meaning |
|-------|---------|
| `source` | Always `"bunjang"`. |
| `product_id` | Bunjang listing id (pid). |
| `name` | Listing title. |
| `price_krw` | Asking price (KRW). |
| `status` | `selling`, `reserved`, or `sold`. |
| `condition` | `new` or `used`. |
| `category` | Bunjang category id. |
| `region` | Coarse public area (province + city/district). `null` when the seller hid it. **No neighborhood-level or personal location.** |
| `free_shipping` | Whether the seller offers free shipping. |
| `favorite_count` | Number of users who favorited the listing. |
| `url` | Mobile listing page URL. |
| `image_url` | First product image (resolved thumbnail). |
| `listed_at` | Last update time of the listing (KST, UTC+9). |
| `scraped_at` | ISO-8601 timestamp (KST, UTC+9). |

***

### Use cases

- **Resale price research** — track asking prices for sneakers, luxury goods, electronics, and K-pop goods across the Korean resale market.
- **Sneaker & luxury resell tracking** — monitor supply and pricing for hyped drops (Jordan, Travis Scott, designer bags) as new listings appear.
- **Secondhand market analysis** — measure listing volume, condition mix (new vs used), and regional distribution of a product category over time.
- **AI agents & datasets** — feed structured resale data into pricing models, arbitrage dashboards, or LLM agents.

***

### ❓ FAQ

**Is it legal to scrape this data?**
This actor collects only public, non-personal listing data — the same listings any visitor sees on Bunjang without logging in. No personal data is collected (no seller nicknames, IDs, or profiles). You are responsible for how you use the data; see the legality note below.

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

**Do I need to configure proxies?**
No — the default settings work out of the box. For large runs or high `maxItems`, enabling Apify Proxy with the `RESIDENTIAL` group is recommended as optional scaling advice (see the proxy note below).

**How fresh is the data?**
Every run scrapes the live site at run time. Schedule the actor for recurring snapshots.

**What is NOT included?**
Seller information of any kind — nicknames, IDs, profiles, shop handles — is never emitted, and `region` is deliberately coarsened to a public province + city/district label (it can be `null` when the seller hid it). Only the first product image is included per listing.

***

### 🇰🇷 More Korean data actors

This actor is part of a suite of Korean-platform scrapers by the same maintainer:

- [joongna-scraper](https://apify.com/kdatafactory/joongna-scraper) — Joongna secondhand marketplace listings as structured JSON.
- [pocamarket-scraper](https://apify.com/kdatafactory/pocamarket-scraper) — K-pop photocard market prices and listings.
- [musinsa-scraper](https://apify.com/kdatafactory/musinsa-scraper) — Musinsa fashion product and pricing data.

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 — no seller nicknames, IDs, profiles, or shop handles. `region` is deliberately coarsened to a public province/district label and never carries a neighborhood or a person.
- Requests are rate-limited: one page at a time with a ≥ 500 ms delay between requests, to stay gentle on Bunjang's servers.
- You are responsible for using the data in line with Bunjang's terms of service and applicable law.

#### ⚠️ Proxy recommendation

Bunjang may block datacenter IPs or high request volumes. For reliable runs — especially at higher `maxItems` — enable **Apify Proxy with the `RESIDENTIAL` group**. The actor automatically uses the proxy configuration you provide (via `proxyConfiguration` in input) and, if a proxy tunnel fails, falls back to a direct connection rather than hanging. If you see repeated `API HTTP 403/429` errors in the log, switch on residential proxy.

***

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

# Actor input Schema

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

What to scrape. 'search' returns listings matching a keyword. 'category' browses the newest/most-relevant listings in a Bunjang category.

## `query` (type: `string`):

For 'search' mode: a keyword to search for (e.g. 'nike', '아이폰', 'jordan 1'). Required in search mode; ignored in category mode.

## `categoryId` (type: `string`):

For 'category' mode: a Bunjang category id (required). Top-level examples: '310' Women's clothing, '320' Men's clothing, '405' Shoes, '430' Bags/Wallets, '421' Watches, '600' Digital, '700' Sports/Leisure, '910' Star goods. Optional in search mode to narrow results to one category.

## `order` (type: `string`):

Result ordering. 'score' = relevance/popularity, 'date' = newest first, 'price\_asc' = cheapest first, 'price\_dsc' = most expensive first.

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

Maximum number of listings to collect.

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

Proxy settings. Apify Proxy with the RESIDENTIAL group is recommended if you hit rate limits. If omitted, the actor runs on a direct connection.

## Actor input object example

```json
{
  "mode": "search",
  "query": "나이키",
  "categoryId": "405",
  "order": "score",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "query": "나이키",
    "categoryId": "405"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kdatafactory/bunjang-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 = {
    "query": "나이키",
    "categoryId": "405",
}

# Run the Actor and wait for it to finish
run = client.actor("kdatafactory/bunjang-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 '{
  "query": "나이키",
  "categoryId": "405"
}' |
apify call kdatafactory/bunjang-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bunjang Scraper: Korean Resale & Secondhand Market (번개장터)",
        "description": "Scrape Bunjang (번개장터), Korea's largest secondhand & resell marketplace: keyword search and category browse — product names, KRW prices, condition, sale status, and images as clean JSON. Built on Bunjang's JSON API. No seller identity. For resale price research & sneaker/luxury resell tracking.",
        "version": "0.1",
        "x-build-id": "cTiiA0jMDZNaRmGVl"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kdatafactory~bunjang-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kdatafactory-bunjang-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/kdatafactory~bunjang-scraper/runs": {
            "post": {
                "operationId": "runs-sync-kdatafactory-bunjang-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/kdatafactory~bunjang-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-kdatafactory-bunjang-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "category"
                        ],
                        "type": "string",
                        "description": "What to scrape. 'search' returns listings matching a keyword. 'category' browses the newest/most-relevant listings in a Bunjang category.",
                        "default": "search"
                    },
                    "query": {
                        "title": "Search keyword",
                        "type": "string",
                        "description": "For 'search' mode: a keyword to search for (e.g. 'nike', '아이폰', 'jordan 1'). Required in search mode; ignored in category mode."
                    },
                    "categoryId": {
                        "title": "Category ID",
                        "type": "string",
                        "description": "For 'category' mode: a Bunjang category id (required). Top-level examples: '310' Women's clothing, '320' Men's clothing, '405' Shoes, '430' Bags/Wallets, '421' Watches, '600' Digital, '700' Sports/Leisure, '910' Star goods. Optional in search mode to narrow results to one category."
                    },
                    "order": {
                        "title": "Sort order",
                        "enum": [
                            "score",
                            "date",
                            "price_asc",
                            "price_dsc"
                        ],
                        "type": "string",
                        "description": "Result ordering. 'score' = relevance/popularity, 'date' = newest first, 'price_asc' = cheapest first, 'price_dsc' = most expensive first.",
                        "default": "score"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of listings to collect.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Apify Proxy with the RESIDENTIAL group is recommended if you hit rate limits. If omitted, the actor runs on a direct connection.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
