Mercari US Sold Listings Scraper icon

E-commerce

Mercari US Sold Listings Scraper

Scrape Mercari US sold/completed listings — price, condition, brand, seller rating, sold date — by keyword and category. Real resale-market pricing data.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Mercari US (mercari.com) doesn't publish a clean "sold comps" view — resellers digging for real recent sale prices are stuck scrolling active listings. This Actor reads Mercari's own server-rendered category pages (the same pages Google indexes, not a private reverse-engineered endpoint) with a first-class sold / completed-listing filter and an optional sold-within-days window, so arbitrageurs and flippers get exactly the comps they need without wading through active inventory.

Give it a keyword — optionally a category, a condition, a price band, and a "sold within the last N days" window — and it hands back one clean row per matching item: price, condition, brand, category, seller, photos, and (optionally) exact listing/sold dates and seller rating.

What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox TLS handshakes so Mercari sees a browser, not Python.
  • 🔁 Retries with exponential backoff on rate-limits and transient errors — up to 5 attempts, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🌐 Proxy on standbyproxyConfiguration is available as an escape hatch, ready to flip on if Mercari tightens later, with no code changes on your end.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable item IDs, deduplicated even when a keyword fans out across departments.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge (beyond the small actor-start warm-up fee).

Use cases

  • Reseller-arbitrage comps — check what an item actually sold for recently before buying stock to flip.
  • Liquidation / dropship pricing — price a pallet or lot against real completed Mercari sales, not asking prices.
  • Demand tracking — watch how fast a keyword's listings move from active to sold within a rolling window.
  • Sourcing research — see which condition and price bands are actually selling versus sitting active.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
keyword string yes Free-text search term, e.g. "nintendo".
category string no Restrict the search to one Mercari department. Leave unset to fan out across all 17 departments (uses more requests per run).
conditionIds array no Client-side filter on item condition: 1=New, 2=Like new, 3=Good, 4=Fair, 5=Poor. Leave empty for any condition.
priceMin number no Client-side filter — drop rows priced below this, in USD.
priceMax number no Client-side filter — drop rows priced above this, in USD.
soldOnly boolean no When on, only trading/sold_out listings are returned — Mercari's own "Sold" facet.
soldWithinDays integer no Only include items sold in the last N days (1-365). Requires "Sold listings only".
includeDetails boolean no Fetch each item's detail page for listing date, sold date, and seller username/rating. One extra request per row.
maxResults integer no Cap on total emitted rows per run.
{
  "keyword": "nintendo",
  "category": "men",
  "soldOnly": true,
  "soldWithinDays": 7,
  "includeDetails": true,
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

item_idtitlepricestatussoldconditionbrandseller_usernameseller_rating_avglisting_date

{
  "item_id": "m96557170766",
  "title": "Mario Hanafuda card T-shirt (Size XXL) - Nintendo Japan exclusive (NEW)",
  "price": 59.0,
  "original_price": 58.0,
  "currency": "USD",
  "status": "trading",
  "sold": true,
  "condition": "New",
  "brand": "Nintendo",
  "category": "T-Shirts for Men",
  "category_id": 303,
  "seller_id": 348351597,
  "item_url": "https://www.mercari.com/us/item/m96557170766/",
  "thumbnail_url": "https://u-mercari-images.mercdn.net/photos/m96557170766_1.jpg?1773934282&width=200&height=200",
  "listing_date": null,
  "sold_date": null,
  "scraped_at": "2026-07-21T06:40:00.000Z"
}

Pricing

EventPriceWhen
Actor startOnce per run, covers warm-up and proxy session setup.
Actor Start$0.0050Per result written to the dataset.
result$0.0025Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

FAQ

What counts as "sold" here?
Mercari's own UI groups itemStatuses 2 (trading / in escrow) and 3 (sold_out) under one "Sold" facet — soldOnly=true matches that same definition, not just fully closed-out listings.
Is `sold_date` the exact moment of sale?
It's a proxy — the item detail page's own last-updated timestamp, which moves when status flips to sold/trading. Close, not certified exact-to-the-second.
Do I need a proxy?
No — Mercari's category pages are keyless and server-rendered, so proxyConfiguration defaults off. It stays present as a forward-looking escape hatch.
What happens with old, purged sold items?
Mercari retires sold-item history after roughly a year; those return a purge signal and are skipped, not silently faked.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run