Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Karrot (당근) API page →
Classifieds & Second-hand

Karrot (당근) API & Scraper

The Karrot API returns 당근 (daangn.com), Korea's neighbourhood second-hand marketplace, as clean JSON in four actions.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

search returns the current listings of one Korean neighbourhood - listing id, title, the seller's full body text, the price in won, whether the item is still on sale, reserved or sold, the listing's own dong, the meeting point the seller pinned, when it was posted and when it was last bumped, and the photo. detail returns one listing in full: the category, the neighbourhood down to province, district and dong, view, favourite, chat and comment counts, every photo, the seller's declared spec rows such as size, the listings Karrot recommends beside it, and the public seller - nickname, profile page, photo and the 매너온도 manner score. regions resolves Korean neighbourhood names and ids, and categories lists the 21 category ids search accepts. Karrot is a neighbourhood market, so region_id is required and there is no nationwide search; one call returns the one page Karrot serves for that neighbourhood, measured at 258 to 286 listings. Prices are plain Korean won and 0 is a real price on Karrot - a 나눔 giveaway. Measured on 2026-10-06: 276 listings in 역삼동 filled listing id, title, URL, description, price, status, instant-buy, dong, posted and bumped times on 276 of 276, the photo on 275 of 276, and the seller's pinned meeting point on 58 of 276. On 15 listings checked against their own listing record the price and the title matched on 15 of 15. No Karrot account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

What one Karrot neighbourhood actually returns

Karrot is not a national catalogue - it is one dong at a time, ranked by distance from it. These are the counts from a single run on 2026-10-06, so you can see the shape of an answer before you spend a credit.

Calllistingswhat it tells you
역삼동 (region_id 6035), no filter276The whole neighbourhood feed. Prices ran from ₩0 (a 나눔 giveaway) to ₩41,000,000; status was 268 on sale, 5 reserved, 3 sold
역삼동, price_max 20,0001050 of 105 rows were above the cap
역삼동, price_min 200,000530 of 53 rows were below the floor
역삼동, category_id 1 (디지털기기)19Category narrows hard: 도서 (id 9) returned 2 in the same minute
역삼동, on_sale_only2680 of 268 rows were reserved or sold
신정3동 (region_id 1197), no filter270A different neighbourhood, a different feed: category_id 1 → 17, price_max 10,000 → 93

Measured 2026-10-06 on the live site. A Karrot feed is distance-ranked, so the rows in a 역삼동 search include neighbouring dong - 11 distinct dong names appeared in those 276 rows, and each row says which one it is in. Classified listings come and go, so the counts above are dated, not a promise.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/karrot/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "region_id": "6035"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "karrot",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1226.4,
    "record_count": 279,
    "bytes": 346996,
    "cache_hit": false,
    "upstream_requests": 1,
    "charged_credits": 1,
    "version": "0.1.0",
    "request_id": "472eecace7e14c5d",
    "queue_ms": 1.2,
    "fetched_at": "2026-10-06T14:47:18.685Z"
  },
  "data": {
    "results": [
      {
        "listing_id": "r3rnrdjv1fhd",
        "title": "시아쥬 블랙 페이크 레더 봄버 자켓",
        "url": "https://www.daangn.com/kr/buy-sell/%EC%8B%9C%EC%95%84%EC%A5%AC-%EB%B8%94%EB%9E%99-%ED%8E%98%EC%9D%B4%ED%81%AC-%EB%A0%88%EB%8D%94-%EB%B4%84%EB%B2%84-%EC%9E%90%EC%BC%93-r3rnrdjv1fhd/",
        "description": "매력적인 블랙 페이크 레더 봄버 자켓이에요. 어떤 옷에도 잘 어울리는 기본 디자인으로 활용도가 높아요. \n\n소매포함 해진부분없이 깨끗합니다\n\n사이즈는 55입니다.",
        "price": 40000,
        "currency": "KRW",
        "status": "on_sale",
        "status_code": "Ongoing",
        "instant_buy": true,
        "region_name": "역삼동",
        "category": null,
        "meeting_point": {
          "lat": 37.496649415185345,
          "lng": 127.03337486833333
        },
        "created_at": "2026-10-06T14:36:50.234000Z",
        "bumped_at": "2026-10-06T14:36:50.233000Z",
        "image": "https://img.kr.gcp-karroter.net/origin/article/202610/37739e788199d998fa23d4fbbc5c8a9c4210e7f6f35797e83de8bad64214b5d6_0.webp?q=95&s=1440x1440&t=inside&service=web-mixer"
      },
      {
        "listing_id": "uhict7dpna89",
        "title": "10월 롯데월드자유이용권 당일가능",
        "url": "https://www.daangn.com/kr/buy-sell/10%EC%9B%94-%EB%A1%AF%EB%8D%B0%EC%9B%94%EB%93%9C%EC%9E%90%EC%9C%A0%EC%9D%B4%EC%9A%A9%EA%B6%8C-%EB%8B%B9%EC%9D%BC%EA%B0%80%EB%8A%A5-uhict7dpna89/",
        "description": "잠실 롯데월드자유이용권 \n 당일 바로 가능\n🔆 하루 일자 지정권 \n\n종일 자유이용권\n- 소인 34000원 \n- 청소년 38000원\n- 대인 39000원\n\n* 소인 만12세까지\n\n롯데월드오후자유이용권\n[After4] \n대인 35000원 \n청소년 34000원 \n소인 29000원\n\n입금 확인 완료 후 티켓 전송드리며\n이후 환불 불가합니다:)\n\n❗️네고 문의 답변하지 않습니다 ❌️",
        "price": 34000,
        "currency": "KRW",
        "status": "on_sale",
        "status_code": "Ongoing",
        "instant_buy": false,
        "region_name": "역삼2동",
        "category": null,
        "meeting_point": null,
        "created_at": "2026-07-24T14:38:43.475000Z",
        "bumped_at": "2026-10-06T14:36:42.463000Z",
        "image": "https://img.kr.gcp-karroter.net/origin/article/202607/dcc54d60f62d3f7738bd414a21a1d2f6ddba7db9df6436565fb9144cc6f7dbd9_0.webp?q=95&s=1440x1440&t=inside&service=web-mixer"
      },
      {
        "listing_id": "637uwvf1wy2q",
        "title": "에르메스 미니 에르백 20 에크루/진브라운",
        "url": "https://www.daangn.com/kr/buy-sell/%EC%97%90%EB%A5%B4%EB%A9%94%EC%8A%A4-%EB%AF%B8%EB%8B%88-%EC%97%90%EB%A5%B4%EB%B0%B1-20-%EC%97%90%ED%81%AC%EB%A3%A8-%EC%A7%84%EB%B8%8C%EB%9D%BC%EC%9A%B4-637uwvf1wy2q/",
        "description": "에르메스 미니 에르백 20 사이즈\n끈 비닐도 안뗀 새상품입니다 현본구매 풀구성 인보이스 있어요 찔러보기 사절입니다 직거래 원해요",
        "price": 4450000,
        "currency": "KRW",
        "status": "on_sale",
        "status_code": "Ongoing",
        "instant_buy": false,
        "region_name": "역삼1동",
        "category": null,
        "meeting_point": null,
        "created_at": "2026-10-06T14:36:42.353000Z",
        "bumped_at": "2026-10-06T14:36:42.351000Z",
        "image": "https://img.kr.gcp-karroter.net/origin/article/202610/1791297304160b1c70d4e096b96f4706f9c2cfb4525a24bd91950d0fb6da5cbaeaf111c57e2690.webp?q=95&s=1440x1440&t=inside&service=web-mixer"
      }
    ],
    "count": 279,
    "total_results": 279,
    "match_scope": "site_filters",
    "site_index_served": null,
    "control_total_results": null,
    "region": {
      "region_id": "6035",
      "name": "역삼동",
      "full_name": "서울특별시 강남구 역삼동"
    },
    "filters_applied": {
      "region_id": "6035"
    },
    "related_keywords": [
      "아이폰",
      "아이폰17",
      "자전거"
    ],
    "unparsable_rows_dropped": 0,
    "sponsored_rail_count": 0,
    "currency": "KRW",
    "has_more": false,
    "next_page": null,
    "keyword_index_attempts": null
  }
}
Actions

What the Karrot (당근) API does

ActionDescriptionConcrete use caseKey params
searchSearch the second-hand listings of one Korean neighbourhood: listing id, title, full body text, price in won, whether it is still on sale, reserved or sold, the listing's own neighbourhood, the meeting point the seller pinned, posting and bump times, and the photo. Filter by keyword, category, price range and on-sale-only; category, price and on-sale are applied by daangn itself. `region_id` is required — daangn is a neighbourhood market and the site itself has no nationwide search, so there is no way to ask the whole country at once. There is also no sort and no pagination: one call returns the one page daangn serves for that neighbourhood (266-290 rows measured, variable by region). Every answer names its own `match_scope`, so you always know whether the keyword was matched by daangn's search index or against the live neighbourhood feed, and `related_keywords` gives daangn's own Korean suggestions for the term you asked for.Price-intelligence teams call search to search the second-hand listings of one Korean neighbourhood.region_id, query, category_id, price_min, price_max, ...
detailOne Karrot listing by id or URL: full description, price in won, sale status, category, the neighbourhood down to province / city / dong, view, favourite, chat and comment counts, posting and bump times, every photo, the public seller (nickname, profile url, photo and 매너온도 manners score), and the listings daangn recommends beside it.Classifieds aggregators call detail to get one Karrot listing by id or URL.listing_id
regionsResolve Korean neighbourhood ids for `search`. Give a known id to get its full name plus every neighbourhood daangn lists as adjacent to it; give nothing to get daangn's own popular-region list to start from. A name filter narrows either list.Resale and arbitrage tools call regions to resolve Korean neighbourhood ids for `search`.region_id, query
categoriesKarrot's own second-hand category list — every id `search`'s `category_id` accepts, with the Korean name daangn shows for it.Lead-generation teams call categories to get karrot's own second-hand category list.none
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/karrot/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"region_id":"6035"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.karrot.search with {"region_id":"6035"}.
Use cases

Who uses this API and why

  • Resale and price-intelligence teams track second-hand prices for phones, laptops and designer bags dong by dong across Seoul.
  • Market-entry and demand researchers size Korea's local resale supply by category before committing to a city.
  • Reverse-logistics and recommerce buyers watch a neighbourhood feed for underpriced inventory and reserved-to-sold turnover.
  • Apps serving Korean users resolve a neighbourhood name to Karrot's own region id and mirror its 21-category taxonomy.
  • Trust-and-safety and research teams study listing wording, bump behaviour and seller manner scores without touching private data.
FAQ

Questions developers ask before integrating

What does the Karrot API cover?

The 중고거래 second-hand section of 당근 (daangn.com) in Korea. search returns one neighbourhood's current listings, detail returns one listing in full, regions turns a Korean neighbourhood name into the id search needs, and categories lists the 21 category ids. Cars (당근 중고차) and property are separate Karrot properties and are not covered. Text is Korean and prices are Korean won.

Why do I have to pass a region_id? Can I search all of Korea?

No, and that is Karrot itself rather than a limit of this API. 당근 is a neighbourhood market: its own search requires a neighbourhood and ranks by distance from it, so there is no nationwide query to make. Call regions first - give it a known id to get that dong's full name plus the 30 neighbourhoods Karrot lists as adjacent to it, or call it with no id for Karrot's own popular-region list - then pass the id to search. 6035 is 서울 강남구 역삼동.

Is there paging or a sort order?

No. Karrot serves one page per neighbourhood with its own ordering, and it publishes no sort and no page parameter, so this API does not invent either. The page size is not fixed: 258, 266, 270, 274, 276, 278, 284 and 286 listings were all measured on different neighbourhoods and runs. has_more is always false and next_page is always null, honestly.

How does the keyword search work, and what is match_scope?

Every answer names where the keyword was matched. match_scope "site_index" means Karrot's own search answered and you are getting its ranking untouched - that is what 7 of 7 keyword searches returned in the acceptance run (아이폰, 에어팟, 의자, 캠핑, 노트북, 컴퓨터, 책장 across five neighbourhoods, 268 to 286 listings each). match_scope "region_feed" means Karrot's keyword index was not answering at that moment, so the API read the live neighbourhood feed instead and matched your keyword against each listing's title and body; the rows are real live listings, there are simply fewer of them because a neighbourhood feed is a narrower pool than Karrot's own keyword search. You are never handed an empty list without a live check behind it: zero results only come back with filtered_empty_confirmed true and control_total_results showing how many listings that neighbourhood was serving at the time.

Are prices reliable, and why is a price sometimes 0 or null?

₩0 is a real Karrot price - a 나눔 giveaway - and it is returned as 0, not as missing. null means the source did not publish a plain number for that listing, and nothing is ever inferred from the title. Prices are plain won, never the 만 (ten-thousand) unit. On 15 listings spread across one feed, including the first four boosted rows, the price in the search row and the price on the listing's own record matched on 15 of 15, and so did the title.

What do I get about the seller?

The public shop-level facts Karrot's own listing page shows: nickname, profile page URL, profile photo and the 매너온도 manner score (36.5 is the neutral starting point; it was present on 15 of 15 listings measured). Nothing else. No phone number, no chat handle, no address beyond the public dong label, and no comment text or commenter identities - only how many comments a listing has.

Which fields are often empty, and why?

The seller's pinned meeting point was present on 58 of 276 listings (21%) - it is optional on Karrot. The seller's declared spec rows (properties, e.g. 사이즈 → L,66) were present on 5 of 15 listings (33%). A search row carries no category because Karrot's search surface publishes none; detail does, and it was filled on 15 of 15. Rather than ship a field that never works, a handle Karrot does not publish is left out of the response entirely.

Do the filters actually narrow the results, or are they ignored?

Each one was checked against the same neighbourhood's unfiltered count in the same run, and then row by row. In 역삼동 (276 unfiltered): price_max 20,000 → 105 rows with 0 above the cap; price_min 200,000 → 53 with 0 below the floor; category_id 1 → 19 and category_id 9 → 2; on_sale_only → 268 with 0 reserved or sold. The same two filters were re-checked in a second neighbourhood (신정3동, 270 unfiltered) so a filter that happens to match everything cannot pass as working.

What is the Karrot (당근) API?

Karrot (당근) API is a ReefAPI endpoint group for korea's neighbourhood second-hand market, one dong at a time: listings, prices in won and full listing records. It returns live JSON through POST requests under /karrot/v1.

Is the Karrot (당근) API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Karrot (당근) calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Karrot (당근) login or account?

No login to Karrot (당근) is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Karrot (당근) data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Karrot (당근) API use?

Karrot (당근) actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Karrot (당근) from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call karrot actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / karrot

Karrot (당근)

Korea's neighbourhood second-hand market, one dong at a time: listings, prices in won and full listing records.

base /karrot/v14 endpoints
post/karrot/v1/detail1 credit

One Karrot listing by id or URL: full description, price in won, sale status, category, the neighbourhood down to province / city / dong, view, favourite, chat and comment counts, posting and bump times, every photo, the public seller (nickname, profile url, photo and 매너온도 manners score), and the listings daangn recommends beside it.

ParameterAllowed / rangeDescription
listing_idrequired—Listing id — the code at the end of a daangn listing url (www.daangn.com/kr/buy-sell/역삼동-월주차-20만원-k3kcgd4v7ump/) — or the full URL.
Try in playground →
post/karrot/v1/regions1 credit

Resolve Korean neighbourhood ids for `search`. Give a known id to get its full name plus every neighbourhood daangn lists as adjacent to it; give nothing to get daangn's own popular-region list to start from. A name filter narrows either list.

ParameterAllowed / rangeDescription
region_idoptional—A known Karrot neighbourhood id to look up. Its own name and the neighbourhoods daangn lists as adjacent to it come back. Leave it out to get daangn's own popular-region list to start from.
queryoptional—Keep only regions whose Korean name (or its province/city part) contains this text.
Try in playground →
post/karrot/v1/categories1 credit

Karrot's own second-hand category list — every id `search`'s `category_id` accepts, with the Korean name daangn shows for it.

Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.