Daangn Scraper icon

Daangn Scraper

From $1/1K. Scrape Daangn (당근) marketplace listings by keyword and region. Returns 35+ fields per item including price, status, condition, full image…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Daangn Scraper at a glance

Daangn Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes id, title, price, status and condition, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.70 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce, Developer Tools, Automation
Pricing
$1.70 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
29 options

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.

What Daangn Scraper $1💰 Listings, Sellers, Regions & Categories can do

  • 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 0 to 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.

Choose what to collect

These inputs let you configure Daangn Scraper $1💰 Listings, Sellers, Regions & Categories. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to start the scrape. 'search' builds Daangn searches from your keywords + regions + filters. 'url' uses the Daangn search or detail URLs you paste (the run-level filter fields below are ignored in URL mode; only filters inside each pasted URL apply).

Choices: search, url

searchQueriesarrayOne or more keywords to search Daangn for. Each query is scraped independently.
locationsarrayDaangn region ids (e.g. '366' for Seocho-4-dong) or the site's 'name-id' form ('서초4동-366', as found in the in= part of a Daangn search URL). Plain names without an id are skipped with a warning and the query runs without that region, because the site has no name lookup. Each query is run for each region. Leave empty to use the region resolved from the connection automatically.
categoryIdintegerRestrict results to one Daangn category id. Examples: 1 Digital, 172 Appliances, 8 Furniture, 7 Living/Kitchen, 4 Baby/Kids, 5 Women's clothing, 14 Men's fashion, 6 Beauty, 3 Sports/Leisure, 2 Hobby/Game, 9 Books, 13 Other. Leave empty for all categories.
onlyOnSalebooleanReturn only listings that are still on sale (excludes reserved and completed items).
priceMinintegerOnly return listings priced at or above this amount.
priceMaxintegerOnly return listings priced at or below this amount.
Show 22 more inputs
More input fields
InputWhat it controls
includeKeywordsarrayKeep only listings whose title contains at least one of these words (case-insensitive).
excludeKeywordsarrayDrop listings whose title contains any of these words (case-insensitive).
citiesarrayKeep only listings whose neighbourhood name contains any of these texts (for example 서초). Checked on the listing page, so it needs Fetch full details (with it off no listing can match). Listings that fail it are not returned or charged. Search mode only.
availabilitystringavailable asks the site for on-sale listings only and, with Fetch full details, also drops listings whose page shows them reserved or closed. Search mode only. all keeps everything the site returns.

Choices: all, available

maxListingsPerSearchintegerCap on listings taken from each search or URL. The site serves a few hundred per search. Empty means no per-search cap (Max items still applies).
sortBystringOrder results are returned in.

Choices: recommended, recent, price_asc, price_desc, newest

urlsarrayPaste Daangn search URLs (current https://www.daangn.com/kr/search/buy-sell/?q=..., the older /kr/buy-sell/s/?search=... form, region-only and browse-root links) or item detail URLs (https://www.daangn.com/kr/buy-sell/-/ or /kr/buy-sell//). Facets in a pasted URL (in, category_id, only_on_sale, price=min__max) apply, while the run-level filters do not apply in URL mode; order is not supported by the site and is ignored with a warning. Left untouched, URL mode scrapes one example per URL shape.
fetchDetailsbooleanAdds the description, full image set, category, view/chat/favorite counts and the complete seller profile (score, reviews, profile image) to each listing. Slower; turn off for fast basic listings.
maxItemsintegerTHE cap on this run: stop after collecting this many listings (across all queries/URLs). This is the only finite default cap. Set 0 for unlimited.
maxPagesintegerOptional safety bound on how many result pages to walk per query. Defaults to unlimited (leave empty or 0) and does NOT cap the run: the run stops at Max items, never here. Use only to short-circuit a single query's pagination; it never imposes a separate cap and always defers to Max items.
resumeFromRunIdstringPaste a previous run id or dataset id to continue an interrupted crawl: listings already collected there are skipped so this run returns only what's missing. A one-off continuation, distinct from Incremental mode below, which tracks a search across many scheduled runs on its own.
incrementalModebooleanFor a scheduled/recurring run of the SAME search: remembers what was collected last time and returns only NEW, UPDATED, REAPPEARED and (optionally) EXPIRED listings. A listing is UPDATED when any of its returned fields changed, such as price, status, title, description, photos or location. These are excluded from the comparison (they still appear in the output): engagement counters (favorites, chats, views), the re-boost timestamp, seller score and review count, and the search query that found it; add more with 'Ignore fields when detecting changes'. Off by default (returns everything, like a one-off run). Distinct from 'Resume from run/dataset id' above, which continues one specific interrupted run instead of tracking a recurring search.
stateKeystringOptional name for the saved baseline used by Incremental mode. Leave empty to auto-derive one from your search settings (queries, regions, category, filters, sort, URLs, fetch details), two different filter setups never share a baseline. Set your own to explicitly separate or share monitoring campaigns.
emitUnchangedbooleanWhen on, Incremental mode also returns listings with no change since the last run (changeType UNCHANGED). Off by default: unchanged listings are neither returned nor billed, only NEW/UPDATED/REAPPEARED/EXPIRED are. Turning this on returns, and bills, every listing every run.
emitExpiredbooleanWhen on, Incremental mode also returns listings that were tracked before but are no longer found (changeType EXPIRED), once a run completes a full scan of the search. Off by default. Turning this on returns, and bills, an extra row per listing that disappeared.
changeScopestring'all' (default) reports a listing as UPDATED when any non-ignored field changed. 'priceAndStock' compares ONLY price, price text, free flag and sale status, so edits to the description, photos or location never create a billable row. Switching scope never re-bills the baseline, with an explicit or the automatic state key.

Choices: all, priceAndStock

compactUpdatesbooleanWhen on, UPDATED and EXPIRED rows contain only ids, url, title, current price and status, plus priceChanges with the old and new value of each moved field. NEW rows stay full. The detail-enrichment charge is not applied to a compact row, since it carries no detail fields. Off by default.
expireAfterMissedScansintegerWith 'Emit expired listings', a listing is marked EXPIRED only after it was missing from this many CONSECUTIVE complete scans (default 1). A listing that drops out of the search is not necessarily sold or deleted; check the status field for availability.
ignoreFieldsForChangesarrayOptional. Field names to exclude from UPDATED change detection, in addition to the built-in handling (favorite, chat and view counters, the re-boost timestamp, seller score and review count, and the search query are already ignored). Use this for another field that changes without the listing itself changing, for example imageUrl if image links rotate. Nested fields use a dotted name such as seller.score. Excluded fields stay in the output; they just never make a row UPDATED.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify -> Settings -> API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

idID (text)
titleTitle (text)
priceTextPrice (text)
statusStatus (text)
conditionCondition (text)
locationRegion (text)
urlURL (link)
imageUrlImage (image)
sellerNameSeller (text)
sellerScoreScore (number)
sellerReviewCountReviews (number)
watchesCountFavorites (number)
Show 25 more fields
chatRoomsCountChats (number)
readsCountViews (number)
createdAtCreated (text)
searchQueryQuery (text)
changeTypeChange (text)
changedFieldsChanged fields (array)
firstSeenAtFirst seen (text)
lastSeenAtLast seen (text)
pricePrice (KRW) (number)
descriptionDescription (text)
imagesImages (array)
categoryCategory (object)
regionRegion (object)
userSeller (object)
tradingLocationTrading location (object)
sellerProfileUrlSeller profile (link)
publishedAtPublished (text)
boostedAtBoosted (text)
isNewNew (boolean)
previousPricePrevious price (number)
lastPriceLast price (number)
priceDropPctDrop % (number)
daysListedDays listed (number)
gonePresumedSoldPresumed sold (boolean)
soldConfirmedSold confirmed (boolean)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "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
}

Ways to use this data

  • 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.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Daangn Scraper return?

The documented output for Daangn Scraper includes id, title, price, status, condition, region, url and image. Availability of each field depends on the source page and the selected mode.

How much does Daangn Scraper cost?

It costs $1.70 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

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.

Ready to collect with Daangn Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.