Daangn Scraper $1💰 Listings, Sellers, Regions & Categories
Pricing
from $1.00 / 1,000 listing scrapeds
Daangn Scraper $1💰 Listings, Sellers, Regions & Categories
From $1/1K. Scrape Daangn (당근) marketplace listings by keyword and region. Returns 35+ fields per item including price, status, condition, full image set, region, category and seller profile (nickname, score, reviews). Search and URL modes, category and on-sale filters, price range and sort.
Pricing
from $1.00 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Daangn Scraper: Local Marketplace Listings, Sellers & Regions
Daangn Scraper turns Daangn (당근), Korea's largest local secondhand marketplace, into a clean listings feed. Get the title, price, link and thumbnail of every listing, plus (with detail enrichment, on by default) sale status, condition, region, category, the description, full image set, view/chat/favorite counts and the complete seller profile. Search by keyword and region, or paste Daangn search and detail URLs directly, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways to run. Search by keyword plus region with server-side category, on-sale, price-range and sort filters, or paste any Daangn search or detail URL.
- Predictable run size. Max items caps the whole run and is shared evenly across your keyword, region and URL searches, so one busy search cannot crowd out the rest. Set it to
0to collect everything. - Detail enrichment on demand. Fetch full details (on by default) adds sale status, region, category, condition, the description, full image set, view/chat/favorite counts and the complete seller profile to every listing.
- Built for monitoring. Incremental mode tracks the same search across scheduled runs and returns only new, updated and reappeared listings, ignoring the counters that tick up on their own between runs.
- Resume without re-paying. Continue one interrupted run from its run or dataset id and already-collected listings are skipped instead of re-scraped and re-billed.
- Honest about site hiccups. A search that comes back empty on every retry is reported as incomplete, not as "nothing matched your filters", and incremental state is never corrupted by a run that could not actually see the listings.
- Optional one-click export into Notion, Linear, Airtable or Apify via MCP connectors, without ever changing what lands in the dataset.
Use Cases
- Resale and deal hunters: track a keyword like a phone model or appliance across one or more neighborhoods for underpriced listings.
- Local market researchers: benchmark asking prices for a category or region and watch how they move over time.
- Community and neighborhood apps: mirror fresh local listings into your own feed, bot or alert channel.
- Second-hand demand analysts: measure how quickly listings move from on sale to reserved or sold across categories.
- Personal shopping agents: get notified only when a genuinely new or changed listing matches a saved search.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
id / nodeId | "0000000000" / "a0b0c0d0e0f0" (id is Daangn's numeric listing id with detail enrichment; without it, both hold the id from the listing URL) |
url | "https://www.daangn.com/kr/buy-sell/sample-a0b0c0d0e0f0/" |
title | "Sample Laptop 14in" |
price | 480000 |
priceText | "480,000원" |
isFree | false |
currency | "KRW" |
status | "Ongoing" |
condition | "used" (also "new", "refurbished", "damaged", detail enrichment only) |
description | "Lightly used, minor wear." |
location | "Sample-dong" |
region.id / region.name | "000" / "Sample-dong" |
category.id / category.name | "1" / "Digital" (detail enrichment only) |
sellerName | "Seller Nickname" |
user.score / user.reviewCount | 39.2 / 23 (detail enrichment only) |
watchesCount / favoriteCount | 12 / 12 (detail enrichment only) |
chatRoomsCount | 6 (detail enrichment only) |
readsCount / viewCount | 733 / 733 (detail enrichment only) |
createdAt | "2026-01-01T00:00:00.000+09:00" (may be empty without detail enrichment) |
images | full-size image URLs (detail enrichment only; otherwise only a thumbnail) |
changeType | "NEW" (also "UPDATED", "UNCHANGED", "REAPPEARED", "EXPIRED"; Incremental mode only) |
Without Fetch full details, expect only the basics Daangn shows on its search results page: title, price, listing URL and a thumbnail. Daangn's current results page does not show region, sale status, seller or posting date, so those fields can come back empty until Fetch full details fills them in from the listing page, along with the description, full image set, category, condition, counts and complete seller profile. Leave Fetch full details on (the default) if you need them.
How to Use
- Pick a mode:
search(keyword plus region) orurl(paste Daangn links). - In search mode, add your keywords and region ids, plus any category, price-range, on-sale or sort filters. In URL mode, paste Daangn search or detail URLs instead; filter fields are ignored.
- Keep Fetch full details on for status, region, category, condition, the description, full image set, counts and seller profile, or turn it off for faster, lighter listings (title, price, link and thumbnail).
- Set Max items to control run size and cost, then click Start.
Search by keyword in one region:
{"mode": "search","searchQueries": ["노트북"],"locations": ["366"],"maxItems": 50,"fetchDetails": true}
Search several keywords across several regions with a price range:
{"mode": "search","searchQueries": ["노트북", "의자"],"locations": ["366", "6187"],"priceMin": 50000,"priceMax": 300000,"sortBy": "price_asc","maxItems": 100}
Paste Daangn URLs directly:
{"mode": "url","urls": ["https://www.daangn.com/kr/buy-sell/s/?search=%EB%85%B8%ED%8A%B8%EB%B6%81®ion_id=366","https://www.daangn.com/kr/buy-sell/sample-a0b0c0d0e0f0/"],"fetchDetails": true,"maxItems": 40}
Track a search over repeated scheduled runs (Incremental mode):
{"mode": "search","searchQueries": ["노트북"],"locations": ["366"],"incrementalMode": true,"emitExpired": true,"maxItems": 0}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/daangn-scraper").call(run_input={"mode": "search", "searchQueries": ["노트북"], "locations": ["366"]})for listing in client.dataset(run["defaultDatasetId"]).iterate_items():print(listing["title"], listing["priceText"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/daangn-scraper').call({ mode: 'search', searchQueries: ['노트북'], locations: ['366'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Max items and Max pages
Max items caps the whole run, and it is shared evenly across your searches: every keyword and region pair (and every pasted URL) gets up to Max items divided by the number of searches, rounded up. A search that finds fewer listings than its share does not hand the unused part to the others, so a multi-search run can finish below Max items. Set it to 0 for no limit, which is also the way to get every matching listing from every search.
A listing that turns up in more than one search in the same run is returned once, by the first search that finds it. One side effect to know about: when a search uses up its share partway through a batch of results, the rest of that batch is counted as already collected without being returned, so if a later search in the same run finds those same listings, it skips them too. With overlapping searches (for example the same keyword in neighboring regions) a capped run can therefore miss a few listings it could have returned. Set Max items to 0, or run overlapping searches separately, when you need full coverage. This never causes a listing to be wrongly reported as EXPIRED.
Max pages is only an optional safety bound on how many 30-listing chunks of one search's already-fetched result set to walk through; leave it empty for unlimited.
Resume and recurring updates
Two separate features cover two separate needs:
resumeFromRunIdcontinues ONE specific interrupted run. Paste the run id or dataset id from a previous run that got cut off and this run skips every listing it already collected, so you don't pay to re-scrape and re-download what you already have. A bad id fails the run before anything new is collected or charged.incrementalModetracks the SAME search across many scheduled runs on its own, no id to paste. Turn it on and schedule the actor; each run compares against a baseline it remembers itself (keyed by your search settings, or your own State key) and returns onlychangeType: "NEW","UPDATED"or"REAPPEARED"listings, pluschangedFields,firstSeenAtandlastSeenAt. Unchanged listings are neither returned nor billed unless you turn on Emit unchanged listings. A listing that disappears is only reported as"EXPIRED"(and only if Emit expired listings is on) once a run completes a full, uncapped scan of every search in it; a run limited by Max items (the default is 20) never reports EXPIRED, since it never proved those listings are actually gone.- The baseline is keyed on your search settings (mode, keywords, regions, category, on-sale, price range, sort, URLs, Fetch full details), never on Max items, Max pages, the residential budget or the connector export cap, so raising a limit keeps your existing baseline instead of starting over and re-billing everything.
- Live engagement counters (chat, favorite, view and read counts) and a re-boost timestamp change from other users' activity, independent of the listing itself. Incremental mode ignores these, along with seller reputation and the search keyword that found the listing, when deciding NEW, UPDATED or UNCHANGED, so a listing is not reported as changed every run just because someone viewed or bumped it. A real change to price, status, condition, title, description or images still always triggers
"UPDATED". - If a search comes back with zero listings on every retry, the run treats that as incomplete rather than a real empty result: it never marks the tracked listings for that search EXPIRED, and it says so in the run's status message. Running it again shortly usually returns the full result set.
Send results into your apps (MCP connectors)
You can optionally pipe each run's results into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector under Apify -> Settings -> API & Integrations, then select it in the mcpConnectors field. Notion receives a rich page per item (set notionParentPageUrl to the parent page); Linear, Airtable and Apify receive a best-effort write or digest. This never changes the dataset output, and any connector error is logged and skipped without affecting the scrape.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search builds Daangn searches from your keywords, regions and filters; url uses the pasted Daangn URLs (filter fields are ignored in URL mode). |
searchQueries | array | ["노트북"] | Keywords to search Daangn for. Each query is scraped independently (search mode). |
locations | array | (none), prefilled ["366"] | Numeric Daangn region ids to center the search on (e.g. 366 for Seocho-4-dong, 6187 for Sincheon-dong). Each query runs for each region. Empty resolves the region from the connection automatically. |
categoryId | integer | (none) | Restrict results to one Daangn category id (e.g. 1 Digital, 8 Furniture, 9 Books). Empty means all categories. |
onlyOnSale | boolean | false | Return only listings that are still on sale, excluding reserved and completed items. |
priceMin | integer | (none) | Only return listings priced at or above this amount, in KRW. |
priceMax | integer | (none) | Only return listings priced at or below this amount, in KRW. |
sortBy | string | recommended | Order results are returned in: recommended, recent, price_asc or price_desc. recent sorts by posting date, which Daangn's current results page does not show, so it can keep Daangn's own order. |
urls | array | sample | Daangn search or detail URLs (URL mode). Filter fields above are ignored. |
fetchDetails | boolean | true | Visit each listing page for the description, full image set, view/chat/favorite counts and the complete seller profile. Turn off for faster, lighter listings. |
maxItems | integer | 20 | Cap on this run across every query, region and URL, shared evenly between searches (see Max items and Max pages above). 0 means unlimited. |
maxPages | integer | (none) | Optional safety bound on how many 30-listing result chunks to walk per query. Empty means unlimited. |
resumeFromRunId | string | (none) | Continue one specific interrupted run: paste a previous run id or dataset id and already-collected listings are skipped. |
incrementalMode | boolean | false | Track this same search over repeated scheduled runs; returns only NEW, UPDATED and REAPPEARED (and, optionally, EXPIRED) listings. |
stateKey | string | (none) | Optional name for the Incremental mode baseline. Empty auto-derives one from your search settings. |
emitUnchanged | boolean | false | Incremental mode: also return, and bill, listings with no change since the last run. |
emitExpired | boolean | false | Incremental mode: also return, and bill, listings no longer found, once a run completes a full scan. |
proxy | object | Apify Proxy | Connection used for requests. |
maxResidentialMB | integer | 0 | Residential traffic budget in MB. After the cap the run continues on the lower-cost datacenter tier, which returns the same Daangn data. 0 means unlimited. |
mcpConnectors | array | (none) | Optional MCP connectors to export results into (Notion, Linear, Airtable, Apify). |
notionParentPageUrl | string | (none) | Notion page under which item pages are created (Notion connector only). |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"id": "0000000000","nodeId": "a0b0c0d0e0f0","url": "https://www.daangn.com/kr/buy-sell/sample-a0b0c0d0e0f0/","title": "Sample Laptop 14in","content": "Lightly used, minor wear.","description": "Lightly used, minor wear.","status": "Ongoing","condition": "used","listingType": "FleamarketArticle","price": 480000,"priceText": "480,000원","isFree": false,"currency": "KRW","countryCode": "KR","createdAt": "2026-01-01T00:00:00.000+09:00","postedAt": "2026-01-01T00:00:00.000+09:00","publishedAt": "2026-01-01T00:00:00.000+09:00","imageUrl": "https://img.example.com/sample_0.webp","images": ["https://img.example.com/sample_0.webp"],"location": "Sample-dong","locationName": null,"regionSlug": "sample-dong-000","searchQuery": "노트북","region": { "id": "000", "name": "Sample-dong", "countryCode": "KR" },"category": { "id": "1", "name": "Digital" },"user": { "nickname": "Seller Nickname", "score": 39.2, "reviewCount": 23, "locationName": null },"tradingLocation": { "name": "Sample-dong", "isUserInput": null, "latitude": null, "longitude": null },"sellerName": "Seller Nickname","sellerScore": 39.2,"sellerReviewCount": 23,"watchesCount": 12,"chatRoomsCount": 6,"readsCount": 733}
Plan Requirement
The default (datacenter) connection works out of the box and is the lowest-cost option, and the actor rotates to a fresh connection automatically when one is refused. For the most reliable results, switch the proxy group to Residential with country KR under Connection, and set a Residential traffic budget to cap spend; once the budget is reached the run continues on the lower-cost tier with identical results.
FAQ
How much does it cost?
You pay per listing returned, plus a per-run start fee and a small surcharge for each returned listing that was enriched from its detail page. In Incremental mode, a listing that is held back as unchanged is not charged, even if its detail page was fetched to check it. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.
Is it legal to scrape Daangn?
This actor collects only publicly available marketplace listings. You are responsible for how you use the data: follow Daangn's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing prices and descriptions are user-submitted content, and seller profile fields and images may carry personal or third-party rights.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared listings, and unchanged ones are not billed unless you turn on Emit unchanged listings.
What is the difference between Resume and Incremental mode?
Resume (resumeFromRunId) continues one specific interrupted run using a pasted run or dataset id; it is a one-off. Incremental mode tracks the same search across many scheduled runs on its own, with no id to paste, and classifies each listing as new, updated, unchanged, reappeared or expired against a baseline it remembers itself. You can combine the two only on the very first Incremental run of a search, where the resumed listings seed the new baseline. Once that search (or your State key) already has a saved Incremental baseline, a run with both turned on fails immediately with a clear message, so you don't silently mix a one-off catch-up with an ongoing monitoring baseline.
Why did my run fail instead of returning an empty dataset?
If the site refuses every connection attempt for every search, the run fails with a clear message instead of quietly returning nothing, so a blocked run is never confused with a real empty search. If instead Daangn answers but keeps returning zero listings for a particular keyword and region, the run says so and asks you to try again shortly. Daangn does this intermittently for some keyword and region pairs, and a re-run usually returns the full result set.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the mcpConnectors field to push results into Notion, Linear or Airtable.
🔗 Want more classifieds data?
Pair this actor with these related scrapers from the same team:
| 🏷️ Marktplaats.nl Scraper From $1/1K. Scrape Marktplaats.nl listings by keyword or URL. Extract title, price... | 🏷️ Vinted.fr Scrape Vinted.fr, France's C2C second-hand fashion marketplace: search with... |
| 🏷️ Gumtree.com Scraper Scrape Gumtree.com classifieds across motors, property, jobs, services, pets and goods... | 🏷️ 2dehands & 2ememain Scrape classifieds from 2dehands.be and 2ememain.be by keyword, filters, or URLs. Returns... |
| 🏷️ bol.com Scraper Scrape bol.com products: title, price, list price and discount, EAN, brand, images... | 🏷️ Vinted Multi-Country Scraper Scrape Vinted across 27 country marketplaces: keyword search with brand, price and... |
💬 Support
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.