Mercari Japan Scraper — Listings & Sold Prices avatar

Mercari Japan Scraper — Listings & Sold Prices

Pricing

from $5.00 / 1,000 listing scrapeds

Go to Apify Store
Mercari Japan Scraper — Listings & Sold Prices

Mercari Japan Scraper — Listings & Sold Prices

Scrape Mercari Japan listings and sold prices by keyword or jp.mercari.com URL. Returns JPY price, status, seller, photos, timestamps, plus optional median sold-comp stats. HTTP-only and MCP-ready. $0.005/listing, $0.02/sold-comp report.

Pricing

from $5.00 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Mercari Japan listings and sold prices

Scrape public Mercari Japan (jp.mercari.com) listings and sold prices into one dataset. Pass a keyword or a search/item URL and get JPY price, status (on_sale / sold_out / trading), condition, seller, photos, timestamps, and optional median sold-comp stats. Built for Japan resale sourcing, brand price tracking, and AI agents that need structured comps without a Mercari login.

Use this Actor when you need Mercari Japan sold prices or live listings as structured JSON. For Mercari US or Buyee, start with a US Mercari or Buyee-specific Actor.

Best fit for this Actor

  • You need sold prices (status sold_out) to set a buy/sell band on Japan C2C.
  • You need live listings for a keyword, category search URL, or a single item URL.
  • You want one MCP-ready tool that returns flat JSON plus a terminal OUTPUT.outcome.
  • For US Mercari, Yahoo Auctions via Buyee, or eBay, use a different Actor in this portfolio.

Use case: Japan resale comps for a Switch accessory

A reseller is about to source nintendo switch stock from Japan. They run this Actor with status: "sold_out", maxItems: 30, and includeSoldStats: true. Each listing row has priceJpy, daysToSell, and itemUrl. The extra marketStats row gives median / IQR JPY and typical days-to-sell. They skip lots priced above the 75th percentile and keep the item URLs in the buying sheet.

Quick start input

{
"keywords": ["nintendo switch"],
"status": "sold_out",
"maxItems": 3,
"includeSoldStats": true
}

maxItems caps listing rows. A sold-comp report is an extra row and does not consume that cap.

Input reference

FieldTypeWhat it controls
keywordsarraySearch phrases, English or Japanese, up to 50. Example: nintendo switch.
startUrlsarrayjp.mercari.com search or item URLs, up to 50.
statusenumall (default), on_sale, sold_out, or trading. Prefill sold_out.
sortenumcreated_time (default), score, price, likes.
orderenumdesc (default) or asc.
priceMin / priceMaxintegerJPY band. Empty = no bound.
maxItemsintegerListing cap, 1–500. Default 50. Prefill 3.
includeSoldStatsbooleanOne marketStats row per keyword. Default false. Prefill true.
soldStatsSampleSizeintegerSold prices sampled for the report, 5–100. Default 30.
fetchItemDetailsbooleanAdds description, seller name, likes. Default false. Item URLs always fetch detail.

Provide at least one keyword or a valid Mercari Japan URL. Empty input returns INVALID_INPUT with zero listing charges.

What data you receive

One dataset item is either a listing or a sold-comp summary.

{
"recordType": "listing",
"itemId": "m30214061125",
"itemUrl": "https://jp.mercari.com/item/m30214061125",
"title": "ドラゴンクエストⅣ",
"priceJpy": 600,
"currency": "JPY",
"status": "sold_out",
"conditionName": "Poor",
"sellerId": "389403353",
"daysToSell": 5,
"query": "nintendo switch",
"scrapedAt": "2026-09-15T07:00:00.000Z"
}

marketStats rows add medianPriceJpy, p25PriceJpy, p75PriceJpy, minPriceJpy, maxPriceJpy, meanPriceJpy, medianDaysToSell, and sampleSize. Days-to-sell is the gap between Mercari created and updated on sold items — an approximation, not an official sold-at clock.

FieldTypeNotes
recordTypestringlisting or marketStats
itemId / itemUrlstringMercari id and jp.mercari.com/item/ page
titlestringPublic listing title
priceJpyintegerListed or sold yen price
statusstringon_sale, sold_out, or trading
conditionNamestringNew through Bad
sellerId / sellerNamestringPublic seller when Mercari exposes it
daysToSellnumberApproximate created→updated gap on sold items
medianPriceJpynumberSold-comp report only

Real-world use cases

1. Sold comps for a keyword

{
"keywords": ["nintendo switch"],
"status": "sold_out",
"maxItems": 30,
"includeSoldStats": true
}

2. Live listings only

{
"keywords": ["ナイキ ダンク"],
"status": "on_sale",
"sort": "created_time",
"maxItems": 50
}

3. Search URL with sold filter

{
"startUrls": ["https://jp.mercari.com/search?keyword=watch&status=sold_out"],
"maxItems": 20
}

4. Single item URL

{
"startUrls": ["https://jp.mercari.com/item/m30214061125"]
}

5. Price band

{
"keywords": ["iPhone 15"],
"status": "sold_out",
"priceMin": 20000,
"priceMax": 80000,
"maxItems": 40
}
{
"keywords": ["ポケモンカード"],
"status": "on_sale",
"sort": "price",
"order": "asc",
"maxItems": 25
}

7. Keyword plus item URL

{
"keywords": ["airpods"],
"startUrls": ["https://jp.mercari.com/item/m30214061125"],
"status": "all",
"maxItems": 15
}

8. Bounded agent call

{
"keywords": ["casio g-shock"],
"status": "sold_out",
"maxItems": 10,
"includeSoldStats": true,
"fetchItemDetails": false
}

Why agents choose this Actor

  • One tool for live listings and sold prices, not two SKUs.
  • Predictable PPE: $0.005 per listing, $0.02 per sold-comp report, $0.00005 start, plus platform usage.
  • maxItems is a hard listing ceiling; empty searches finish VALID_EMPTY so you can change the query.
  • US Mercari URLs finish INVALID_INPUT so the run stays on jp.mercari.com.
  • Flat fields (priceJpy, status, itemUrl, daysToSell) stay inside a small token budget.
  • Terminal OUTPUT.outcome values are COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, or UPSTREAM_FAILED.

Agent checklist

  1. Use jp.mercari.com keywords or URLs only. Mercari US and Buyee are out of scope.
  2. Set status to sold_out when you need comps; on_sale when you need current asking prices.
  3. Cap maxItems to the budget you can spend at $0.005 per listing.
  4. Turn on includeSoldStats only when you need a median/IQR row ($0.02).
  5. After the run, read OUTPUT.outcome, then the dataset. Zero rows with VALID_EMPTY means the query matched nothing public.
  6. Treat daysToSell as approximate. Mercari does not publish an official sold-at timestamp in this public payload.
  7. When OUTPUT.outcome is UPSTREAM_FAILED, retry with Apify Residential in proxyConfiguration.

Use through the API

curl "https://api.apify.com/v2/acts/khadinakbar~mercari-japan-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"keywords": ["nintendo switch"],
"status": "sold_out",
"maxItems": 3,
"includeSoldStats": true
}'

When the Actor completes, read dataset items from the default dataset and the OUTPUT record from the default key-value store.

Use with AI agents through Apify MCP

Scrape Mercari Japan sold prices for "nintendo switch". Return up to 10 rows with JPY price, status, item URL, and a sold-comp median. Keep the source on jp.mercari.com.

Point the MCP client at https://mcp.apify.com, call khadinakbar/mercari-japan-scraper, then read the dataset and OUTPUT.outcome.

Pricing

Pay per event plus platform usage (isPPEPlatformUsagePaidByUser: true):

EventWhenPrice
apify-actor-startEvery run$0.00005
listing-scrapedEach saved listing$0.005
sold-comp-reportEach saved marketStats row$0.02

A 3-listing sold sample with one report is about $0.035 in events plus compute/proxy. Invalid input and valid empty searches leave listing and report events unbilled.

Open the live Pricing tab for current event details. This Actor uses Pay per event plus Apify platform usage.

Best results

  • Japanese keywords usually match Mercari's catalog better than English for JP-only goods.
  • created_time + sold_out is the usual comps window; raise maxItems if the median looks jumpy.
  • fetchItemDetails is slower; leave it off unless you need descriptions.
  • Direct HTTP works from many networks; switch proxyConfiguration to Apify Residential when the public search asks for another route.

Builder's note

I built this as HTTP-only after I found Mercari Japan's search HTML has no usable __NEXT_DATA__. In my testing, POST https://api.mercari.jp/v2/entities:search with a fresh ES256 DPoP proof per request returns items[] and meta.nextPageToken, and GET https://api.mercari.jp/items/get?id= fills description and seller. My goal is a truthful sold-comp row, so a rotated DPoP requirement finishes UPSTREAM_FAILED rather than inventing prices.

Connect the workflow

When you need US auction sold comps instead of Mercari Japan, search eBay All-in-One Scraper then pass those listings into the same pricing sheet.

For US vehicle listings rather than Japan C2C, start with Autotrader Scraper after this Actor when the SKU is a car.

For handmade listing research, feed titles from this Actor into Etsy All-in-One Scraper when the next market is Etsy.

FAQ and responsible use

Is this affiliated with Mercari? No. Mercari is a trademark of its owner. This independent Actor is not endorsed by Mercari, Inc.

Is scraping allowed? You are responsible for complying with Mercari's terms, applicable law, and your own data-use policy. Keep collection to public listing fields.

Why was my run empty? A valid keyword with zero public matches finishes SUCCEEDED / VALID_EMPTY. A US URL or empty input finishes INVALID_INPUT. When every search route is unavailable the outcome is UPSTREAM_FAILED.

Does it return emails or phones? No. Public listing fields only.

Open the Actor Issues tab for bugs. This Actor is independent research tooling, not legal, investment, or sourcing advice.