# Daangn 당근 Marketplace Search (`solutionssmart/daangn-market-search`) Actor

Search Daangn (당근/Karrot) marketplace listings by keyword or URL. Export title, KRW price, location, seller, timestamps, images, and detail URLs for Korean resale research.

- **URL**: https://apify.com/solutionssmart/daangn-market-search.md
- **Developed by:** [Solutions Smart](https://apify.com/solutionssmart) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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?

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

Daangn Marketplace Search extracts public listings from Daangn, 당근, also known as Karrot marketplace. Use it to search Korean secondhand listings by keyword or by an exact Daangn search URL, then export clean fields such as title, KRW price, location, seller name when available, posted time, image URL, and detail URL.

This Actor is built for Korean market researchers, resale analysts, K-beauty and K-fashion sellers, agencies, and AI agents that need fresh Daangn marketplace data without maintaining a crawler.

Language: English | [한국어](#한국어-readme)

### What data can you extract from Daangn 당근 Karrot marketplace?

The Actor returns one dataset item per listing. Field names are in English for stable API use, while values may be Korean.

| Field | Description |
| --- | --- |
| `stableId` | Stable hash based on the listing URL |
| `title` | Listing title |
| `description` | Listing description when available |
| `priceKrw` | Price as a number in Korean won |
| `currency` | Usually `KRW` |
| `availability` | Schema availability such as `InStock` |
| `condition` | Schema condition such as `UsedCondition` |
| `location` | Neighborhood or locality signal |
| `sellerName` | Seller name when exposed publicly |
| `imageUrl` | Main listing image |
| `postedAt` | Listing timestamp when available |
| `detailUrl` | Public listing URL |
| `sourceUrl` | Search URL that produced the result |
| `scrapedAt` | Collection timestamp |

### How to scrape Daangn listings

1. Open the Actor on Apify.
2. Enter a Korean or English keyword in `query`, for example `아이폰`, `자전거`, or `computer`.
3. Set `maxItems` to the number of listings you want.
4. Leave `enrichDetails` off for the fastest run.
5. Keep `searchProxyMode` as `auto` unless you need to force proxy-only or direct-only behavior.
6. Run the Actor and export the dataset as JSON, CSV, Excel, XML, or through the Apify API.

`maxItems` is an upper limit, not a guaranteed count. If Daangn exposes fewer listings for the provided search URL, the Actor returns the listings it can see and writes a `SUMMARY` record to the key-value store with the requested count, pushed count, and per-source counts. To collect more than one Daangn search page exposes, provide more exact search URLs in `startUrls`.

Basic input:

```json
{
  "query": "아이폰",
  "maxItems": 100
}
```

Use `startUrls` when you already have an exact Daangn search URL:

```json
{
  "startUrls": [
    {
      "url": "https://www.daangn.com/kr/search/buy-sell/?q=%EC%BB%B4%ED%93%A8%ED%84%B0"
    }
  ],
  "maxItems": 25
}
```

### Example tasks to publish

Use these task-ready inputs as public Apify task examples. Each one targets a concrete use case people may search for, while showing a different way to configure the Actor.

| Task | Use case | Input file |
| --- | --- | --- |
| Monitor iPhone 아이폰 resale prices | Recurring secondhand iPhone price monitoring in Korea | [`examples/monitor-iphone-resale-prices.json`](examples/monitor-iphone-resale-prices.json) |
| Track 자전거 supply in one neighborhood | Neighborhood-level bike supply checks with an exact `startUrls` search URL | [`examples/track-bike-supply-neighborhood.json`](examples/track-bike-supply-neighborhood.json) |
| K-beauty deal scan | Scan Daangn for Olive Young and cosmetics resale deals | [`examples/k-beauty-deal-scan.json`](examples/k-beauty-deal-scan.json) |
| 갤럭시 deal scan | Monitor Samsung Galaxy resale listings and deal flow | [`examples/galaxy-deal-scan.json`](examples/galaxy-deal-scan.json) |
| AI training / agent feed | Larger enriched feed for RAG, agents, and marketplace intelligence workflows | [`examples/ai-training-agent-feed.json`](examples/ai-training-agent-feed.json) |
| K-pop 포카 photocard scan | Source K-pop photocards and fan-made merch for resale research | [`examples/kpop-photocard-scan.json`](examples/kpop-photocard-scan.json) |
| Monitor 닌텐도 스위치 game resale | Track Nintendo Switch console and game resale listings | [`examples/monitor-nintendo-switch-games.json`](examples/monitor-nintendo-switch-games.json) |
| K-fashion 패딩 puffer scan | Seasonal Korean winter jacket resale and price research | [`examples/k-fashion-puffer-scan.json`](examples/k-fashion-puffer-scan.json) |
| Stroller 유모차 & baby gear scan | Compare baby stroller and infant gear prices and availability | [`examples/stroller-baby-gear-scan.json`](examples/stroller-baby-gear-scan.json) |

For regional filtering, use the exact Daangn `in` slug from a real search URL, such as `도룡동-5820`. Generic values such as `gangnam-gu` are ignored because Daangn may not treat them as valid region filters. If you need a specific region, the safest input is a full Daangn search URL in `startUrls`.

### Connect Daangn results to Google Sheets

A successful run's dataset can be handed to the sibling [Google Sheets Integration](https://apify.com/solutionssmart/google-sheets-integration) actor, which appends the listings to a spreadsheet tab. This is an Apify actor-to-actor integration backed by a webhook, so no glue code is needed.

1. Create a Google service account, enable the Google Sheets API, and share the target spreadsheet with the account's `client_email` (Editor access).
2. Keep the service account JSON only inside the Google Sheets Integration actor's `serviceAccountKey` secret input. Never commit it to a repository.
3. Copy [`examples/google-sheets-integration/daangn-to-sheets-webhook.json`](examples/google-sheets-integration/daangn-to-sheets-webhook.json), replace `YOUR_SPREADSHEET_ID`, and create the webhook:
   ```
   apify api POST webhooks -d - < examples/google-sheets-integration/daangn-to-sheets-webhook.json
   ```
4. Every subsequent successful Daangn run triggers an `APPEND` that writes the run's dataset (injected as `sourceDatasetId` from `{{resource.defaultDatasetId}}`) into the `Daangn listings` tab.

The webhook is scoped to this Actor, so it fires for every successful run, including the example tasks above. If you only want specific runs exported, attach the webhook to an Actor task instead of the Actor and use `taskId` in the `condition`. A saved-task template for the Google Sheets actor is available at [`examples/google-sheets-integration/daangn-sheets-append-task.json`](examples/google-sheets-integration/daangn-sheets-append-task.json).

### Fast mode, proxy fallback, and detail enrichment

By default, `searchProxyMode` is `auto`. The Actor first tries a direct Daangn search with a short timeout. If that fast path is blocked, empty, or unusable, it retries the search with the configured proxy, defaulting to KR residential proxy. This keeps normal runs faster while preserving reliability when Daangn limits datacenter traffic.

Set `searchProxyMode` to `proxy` if you always want proxy traffic. Set it to `direct` if you want the cheapest and fastest attempt only, with no proxy fallback.

By default, `enrichDetails` is `false`. This keeps runs fast and avoids one extra detail-page request per listing.

Turn `enrichDetails` on only when you need extra seller or detail-page signals. Detail enrichment is best effort: if a detail page times out or a proxy returns a transient upstream error, the Actor keeps the search result instead of failing the whole run.

### Example output

```json
{
  "stableId": "a8c3f01b4f7f7b8e5c08c9d2",
  "title": "아이폰 13 128GB",
  "description": "상태 좋아요",
  "priceKrw": 350000,
  "currency": "KRW",
  "availability": "InStock",
  "condition": "UsedCondition",
  "location": "도룡동",
  "sellerName": "쭐룹배",
  "imageUrl": "https://img.kr.gcp-karroter.net/example.webp",
  "postedAt": "2026-09-14T19:11:14.631Z",
  "detailUrl": "https://www.daangn.com/kr/buy-sell/iphone-13-abc/",
  "sourceUrl": "https://www.daangn.com/kr/search/buy-sell/?q=%EC%95%84%EC%9D%B4%ED%8F%B0",
  "scrapedAt": "2026-09-14T21:27:42.135Z"
}
```

### How much does it cost to scrape Daangn?

This Actor uses pay per event pricing. The dataset item event is priced at `$0.0008` per listing, or about `$0.80` per 1,000 listings. There is also a small Actor start event of `$0.00005`.

In practice, keep the expected price per 1,000 rows around the `$0.50` to `$2` range depending on run settings, proxy behavior, and whether detail enrichment is enabled. Fast mode is the cheapest path because it avoids detail-page requests and only uses proxy fallback when needed.

### Reliability and empty results

This Actor is designed to fail loud instead of quietly returning an empty dataset.

If no listings are pushed, it writes one diagnostic row with `emptyReason`:

| Reason | Meaning |
| --- | --- |
| `EMPTY` | The page loaded, but no listings were found |
| `BLOCKED` | Daangn or the proxy returned blocking signals such as 403, 429, or CAPTCHA text |
| `PARSE_ERROR` | The page loaded, but expected listing data was not found |

Daangn can change markup, return region-dependent results, rate-limit datacenter traffic, or show a CAPTCHA. Residential KR proxy is recommended for repeated runs, but it is not a guarantee.

### API, scheduling, and integrations

Because this runs on Apify, you can schedule recurring Daangn searches, call the Actor through the Apify API, monitor runs in Apify Console, and connect datasets to your downstream tools. Common workflows include price monitoring, supply checks, Korean resale research, and feeding fresh marketplace data into internal dashboards or AI agents.

### FAQ

#### Is this a Daangn API or Karrot API?

No. This is an Apify Actor that extracts public Daangn, 당근, and Karrot marketplace pages. It is useful when you need structured data but do not want to maintain your own crawler.

#### Can I scrape a specific Korean neighborhood?

Yes, but use Daangn's exact region slug or a full search URL. A generic English region like `gangnam-gu` is not enough for reliable filtering.

#### Why is `enrichDetails` off by default?

Most users need clean search results quickly. Detail enrichment can add one request per listing, which makes large runs slower and noisier. Turn it on when seller/detail-page signals matter more than speed.

#### What happens when a detail page fails?

The Actor keeps the base search result. Detail pages are treated as enrichment, not as a reason to fail a successful search run.

#### Is it legal to scrape Daangn?

Use this Actor only where you have a lawful basis. Follow Daangn's Terms of Service, robots guidance, privacy obligations, and applicable Korean law. Do not use it to bypass authentication, access private data, or collect sensitive personal information.

### Related Korean data Actors planned

Daangn is the first Actor in this Korean data queue because reliability and clean output matter more than being first forever. The planned order is Kurly, Wadiz, Melon chart, then Bunjang.

### 한국어 README

언어: [English](#what-data-can-you-extract-from-daangn-당근-karrot-marketplace) | 한국어

Daangn Marketplace Search는 Daangn, 당근, Karrot marketplace의 공개 중고거래 게시글을 검색하고 구조화된 데이터로 내보내는 Apify Actor입니다. 키워드나 정확한 Daangn 검색 URL을 입력하면 제목, 원화 가격, 지역, 공개된 판매자명, 등록 시간, 이미지 URL, 상세 페이지 URL 같은 필드를 정리해서 받을 수 있습니다.

한국 중고거래 시장을 조사하는 팀, 리셀 가격을 모니터링하는 분석가, K-beauty와 K-fashion 판매자, 에이전시, AI 에이전트가 직접 크롤러를 관리하지 않고 신선한 Daangn marketplace 데이터를 가져올 때 쓰기 좋습니다.

#### 어떤 데이터를 추출할 수 있나요?

Actor는 게시글 하나를 Dataset item 하나로 저장합니다. API에서 쓰기 쉽도록 필드명은 영어로 고정되어 있고, 값에는 한국어가 포함될 수 있습니다.

| 필드 | 설명 |
| --- | --- |
| `stableId` | 게시글 URL 기반의 안정적인 해시 |
| `title` | 게시글 제목 |
| `description` | 사용 가능한 경우 게시글 설명 |
| `priceKrw` | 숫자로 정리된 원화 가격 |
| `currency` | 보통 `KRW` |
| `availability` | `InStock` 같은 schema availability 값 |
| `condition` | `UsedCondition` 같은 schema condition 값 |
| `location` | 동네 또는 지역 신호 |
| `sellerName` | 공개된 경우 판매자명 |
| `imageUrl` | 대표 이미지 |
| `postedAt` | 확인 가능한 경우 등록 시간 |
| `detailUrl` | 공개 게시글 URL |
| `sourceUrl` | 해당 결과를 만든 검색 URL |
| `scrapedAt` | 수집 시간 |

#### 사용 방법

1. Apify에서 Actor를 엽니다.
2. `query`에 검색어를 입력합니다. 예: `아이폰`, `자전거`, `computer`.
3. `maxItems`에 가져올 게시글 수를 입력합니다.
4. 가장 빠른 실행을 원하면 `enrichDetails`를 꺼둡니다.
5. 특별한 이유가 없다면 `searchProxyMode`는 `auto`로 둡니다.
6. Actor를 실행한 뒤 Dataset을 JSON, CSV, Excel, XML 또는 Apify API로 내보냅니다.

`maxItems`는 최대 개수 제한이며, 보장된 결과 개수가 아닙니다. Daangn이 제공한 검색 URL에서 더 적은 게시글만 노출하면 Actor는 확인 가능한 게시글만 반환하고, key-value store의 `SUMMARY`에 요청 개수, 저장 개수, source별 개수를 기록합니다. 한 검색 페이지가 노출하는 양보다 더 많이 수집하려면 정확한 검색 URL을 `startUrls`에 여러 개 넣으세요.

```json
{
  "query": "아이폰",
  "maxItems": 100
}
```

이미 정확한 Daangn 검색 URL이 있다면 `startUrls`를 사용하세요.

```json
{
  "startUrls": [
    {
      "url": "https://www.daangn.com/kr/search/buy-sell/?q=%EC%BB%B4%ED%93%A8%ED%84%B0"
    }
  ],
  "maxItems": 25
}
```

지역 필터링에는 실제 Daangn 검색 URL에 들어 있는 정확한 `in` slug가 필요합니다. 예를 들어 `도룡동-5820` 같은 값입니다. `gangnam-gu`처럼 일반적인 영문 지역명은 Daangn에서 유효한 지역 필터로 처리되지 않을 수 있어 무시됩니다. 특정 지역이 중요하다면 Daangn에서 만든 전체 검색 URL을 `startUrls`에 넣는 방식이 가장 안전합니다.

#### 빠른 모드와 프록시 fallback

기본값에서 `searchProxyMode`는 `auto`입니다. Actor는 먼저 짧은 타임아웃으로 direct Daangn 검색을 시도합니다. 이 빠른 경로가 차단되거나, 비어 있거나, 사용할 수 없으면 설정된 프록시로 다시 검색합니다. 기본 fallback은 한국 Residential proxy입니다.

항상 프록시를 쓰고 싶다면 `searchProxyMode`를 `proxy`로 설정하세요. 가장 싸고 빠른 direct 시도만 원하고 fallback이 필요 없다면 `direct`로 설정하세요.

기본값에서 `enrichDetails`는 `false`입니다. 상세 페이지 보강은 게시글마다 요청을 하나씩 더 만들 수 있어 대량 실행이 느려지고 로그도 많아질 수 있습니다. 판매자나 상세 페이지 신호가 꼭 필요할 때만 켜는 편이 좋습니다.

#### 비용과 빈 결과 처리

이 Actor는 pay per event 가격 모델을 사용합니다. Dataset item 이벤트는 게시글 1개당 `$0.0008`입니다. 게시글 1,000개 기준으로 약 `$0.80`입니다. 실행 설정, 프록시 상태, 상세 페이지 보강 여부에 따라 게시글 1,000개당 대략 `$0.50`에서 `$2` 범위를 기대하면 됩니다.

게시글이 하나도 저장되지 않으면 `emptyReason`이 포함된 진단 row를 하나 저장합니다.

| Reason | 의미 |
| --- | --- |
| `EMPTY` | 페이지는 열렸지만 게시글을 찾지 못함 |
| `BLOCKED` | Daangn 또는 프록시가 403, 429, CAPTCHA 같은 차단 신호를 반환함 |
| `PARSE_ERROR` | 페이지는 열렸지만 예상한 게시글 데이터를 찾지 못함 |

#### FAQ

##### 이것은 Daangn API 또는 Karrot API인가요?

아니요. 이 Actor는 공개된 Daangn, 당근, Karrot marketplace 페이지에서 데이터를 추출하는 Apify Actor입니다.

##### 특정 동네만 스크랩할 수 있나요?

가능합니다. 단, Daangn의 정확한 지역 slug 또는 전체 검색 URL을 사용해야 합니다.

##### 상세 페이지 요청이 실패하면 어떻게 되나요?

Actor는 기본 검색 결과를 그대로 유지합니다. 상세 페이지는 보강 데이터로 취급하며, 성공한 검색 실행 전체를 실패시키는 이유로 보지 않습니다.

##### Daangn을 스크랩해도 합법인가요?

합법적인 근거가 있는 경우에만 사용하세요. Daangn의 이용약관, robots 지침, 개인정보 관련 의무, 한국 법률을 따라야 합니다. 인증을 우회하거나 비공개 데이터에 접근하거나 민감한 개인정보를 수집하는 용도로 사용하지 마세요.

# Actor input Schema

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

Korean or English keyword, for example 아이폰 or 자전거.

## `region` (type: `string`):

Exact Daangn region slug copied from a search URL, for example 도룡동-5820. Generic values such as gangnam-gu are ignored; use startUrls for a full search URL.

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

Use exact Daangn search URLs instead of query/region.

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

Maximum listings to return.

## `enrichDetails` (type: `boolean`):

Fetch each returned listing detail page to fill extra seller/detail signals. Slower and adds up to one proxy request per listing.

## `searchProxyMode` (type: `string`):

Use auto for the fastest reliable mode: try direct search first, then fall back to proxy only if no listings are returned.

## `proxy` (type: `object`):

Residential proxy is used for proxy mode and auto fallback. KR residential proxy is recommended when Daangn blocks datacenter traffic.

## `locale` (type: `string`):

Optional Accept-Language header.

## Actor input object example

```json
{
  "startUrls": [],
  "maxItems": 100,
  "enrichDetails": false,
  "searchProxyMode": "auto",
  "locale": "ko-KR,ko;q=0.9,en;q=0.7"
}
```

# Actor output Schema

## `listings` (type: `string`):

Structured Daangn marketplace listing records returned by this run.

## `summary` (type: `string`):

Run-level summary with requested item count, pushed item count, source counts, and any limit note.

# 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": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("solutionssmart/daangn-market-search").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": [] }

# Run the Actor and wait for it to finish
run = client.actor("solutionssmart/daangn-market-search").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": []
}' |
apify call solutionssmart/daangn-market-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solutionssmart/daangn-market-search"
        }
    }
}
```

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/L3dvXnqB0L2liiSEQ/builds/ahEIStxMZf3ROOgCY/openapi.json
