Mercari Japan Scraper: New Listings & Sold Prices
Pricing
from $1.00 / 1,000 listing returneds
Mercari Japan Scraper: New Listings & Sold Prices
Mercari Japan (jp.mercari.com) scraper by keyword or search URL: one row per listing with JPY price, condition, brand, status and seller type, plus a sold-items mode for price comps and optional new-listing and price-drop alerts. No login. Pay per listing.
Pricing
from $1.00 / 1,000 listing returneds
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Watch a search, get only what's new. This actor runs your search on Mercari Japan (jp.mercari.com), Japan's biggest flea-market app, and returns one clean row per listing: title, JPY price, condition, brand, status, seller type and a permanent link. Switch to sold mode and the same search becomes a price-comps feed: what things actually sold for, most recently sold first. Turn on monitoring and it becomes a watchlist: new listings, new sales and price drops since your last run, charged per new row, free on quiet days.
Who it's for
Resellers and importers who price by what sold last week, not by asking prices. Proxy-buying and export shops sourcing trading cards, games, cameras and fashion from Japan. Market researchers who need a bulk export of a Mercari search in a spreadsheet, and n8n, Make or Sheets workflows that act the moment a new listing appears. Paste a list of searches (Japanese or English keywords, or a search URL copied from your browser), get back a flat row per listing, and pay only for listings returned. A search that finds nothing costs nothing.
Mercari already sends its own app alerts to individual buyers. This actor is for the jobs the app doesn't do: sold-price comps in bulk, a structured export, and monitoring many searches at once on your own schedule.
Why this one
- Sold price comps built in. Set "Listing type" to Sold and you get items that already sold (or are mid-transaction), most recently sold first, with the price they went for. Combine with monitoring for a running log of every new sale in a search.
- Monitoring first, not a one-off dump. It remembers every item ID it has shown you and only bills what's new or cheaper since the last run. A quiet run costs only the run fee.
- Mercari's own filters, not an approximation. Condition, category, brand and price are sent to Mercari's search as Mercari's own filters, so a price cap is applied before you pay, not after.
- Readable condition labels. Mercari's six condition grades come back as an ID plus an English and a Japanese label (新品、未使用 through 全体的に状態が悪い), taken from Mercari's own filter UI.
- Private or business seller. Mercari Shops listings (business sellers) are flagged
sellerType: businessand link to their Shops page; ordinary C2C listings areprivate. - Never charged for a miss or a quiet monitoring run.
What you get
One row per listing by default (turn off "Expand rows" in Advanced for one row per search, with the
listings nested under listings).
| Field | Type | Description |
|---|---|---|
query | text | The search you submitted, echoed back |
found | boolean | true if Mercari returned a search response |
status | text | OK, or NOT_FOUND / BLOCKED / BAD_FORMAT on a miss |
searchQuery | text | The keyword actually searched (read from a pasted URL if you gave one) |
listingType | text | active, sold or all for this search |
listingCount | number | Listings returned and billed for this search |
totalAvailable | number | Matches Mercari reports (Mercari caps this figure at 15,000) |
truncated | boolean | true if more results existed than were returned |
newCount / priceDropCount | number | New listings and price drops this run (monitoring only) |
listingId | text | Mercari item ID (m... for C2C, a longer ID for Mercari Shops) |
url | link | jp.mercari.com/item/<id>, or jp.mercari.com/shops/product/<id> for Mercari Shops |
title | text | Listing title |
price | number | Price in JPY (for an auction listing, the current highest bid) |
currency | text | Always JPY |
listingStatus | text | on_sale, trading (bought, transaction in progress) or sold_out |
conditionId | number | Mercari condition grade, 1 (new) to 6 (poor overall) |
conditionName / conditionNameJa | text | The grade in English and in Mercari's Japanese wording |
category | text | Mercari category ID |
brand | text | Brand, when the seller tagged one |
sellerType | text | business for Mercari Shops, otherwise private |
shippingPaidBy | text | seller (送料込み) or buyer (着払い); empty for Mercari Shops |
isAuction / auctionEndsAt | boolean / date | Mercari's auction-format listings and their bid deadline |
postedAt | date | When the listing was created |
updatedAt | date | Last status or price change; for sold items, roughly when it sold |
imageUrl | link | First listing photo |
sellerHash | text | Anonymous, stable hash of the seller ID |
sellerId | text | Only with "Include raw seller ID" on |
isNew, changeType, previousPrice, priceDropPct, firstSeenAt | mixed | Monitoring fields |
scrapedAt | date | When this row was fetched |
Pricing
Pay-per-event. A flat per-run fee covers session/proxy warmup; you're billed
per item only when data is actually found and returned — see
.actor/pay_per_event.json for exact prices. A miss is never charged.
Monitoring / only new results
Turn on "Only return results that are new or dropped in price since the last run" and a search line becomes a watchlist:
- A listing is new the first time this watchlist sees its Mercari item ID. In Sold mode that means newly sold since the last run.
- A price drop fires when a fixed-price, on-sale listing's price falls by at least "Minimum price drop" (5% by default). Auction bids and sold items never fire one.
- Already-seen, unchanged listings are dropped before billing. A quiet run returns one free row.
- The first run has nothing to compare against, so it returns everything as new. Turn on "Skip alerts on the first run" to bank the first run silently and start alerting from run two.
Schedule recipe. Save the actor as an Apify Task with deltaMode: true and your own
deltaName, add an hourly or daily Schedule, and point the task's webhook at Slack,
Discord, Google Sheets or an n8n / Make webhook.
Limitation. Each run reads up to 1,000 listings per search (newest first, 120 per page). A very busy keyword can post more than that between two runs, and a price drop is only seen on a listing that is still inside that window. Narrow busy searches with a category, brand or price cap, or schedule them more often.
How to use
- In the Apify Console. Open the actor page and click Start — the
searchesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~mercari-jp-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["ポケモンカード"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
- For sold comps, set "Listing type" to Sold. For monitoring, turn on the Monitoring section.
Input
{"searches": ["ポケモンカード"]}
One search per line: keywords like "ポケモンカード" or "nintendo switch", or paste a jp.mercari.com search URL (its own filters for status, sort, condition, category, brand and price are kept). Accepted formats: ポケモンカード, nintendo switch, https://jp.mercari.com/search?keyword=iphone&status=sold_out%7Ctrading.
Pasted search URLs keep their own filters: status=on_sale or status=sold_out|trading,
sort/order, item_condition_id, category_id, brand_id, price_min and price_max
override the matching inputs for that one search.
Sample output
| query | found | status | searchQuery | listingType | listingCount | totalAvailable | truncated | newCount | priceDropCount | listings | listingId | url | title | price | currency | listingStatus | conditionId | conditionName | conditionNameJa | category | brand | sellerType | shippingPaidBy | isAuction | auctionEndsAt | postedAt | updatedAt | imageUrl | sellerHash | sellerId | isNew | changeType | previousPrice | priceDropPct | firstSeenAt | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ポケモンカード | true | OK | <listing type (active / sold / all)> | <total matching on mercari (capped at 15,000)> | <all listings found (full list)> | <price (jpy)> | <status (on_sale / trading / sold_out)> | <condition id (1 best to 6 worst)> | <condition (japanese)> | <seller type (private / mercari shops business)> | <last updated (sold time for sold items)> | <seller (anonymous hash)> | <seller id (only with seller info on)> | <is this listing new?> | <previous price (jpy)> | <price drop %> | 1970-01-01T00:00:00.000Z |
A search that finds nothing comes back as a row with "found": false and is never charged.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~mercari-jp-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["ポケモンカード"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~mercari-jp-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["ポケモンカード"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~mercari-jp-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"searches":["{{search}}"]}, mapping the row's search into the searches array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Mercari Japan Scraper: Sold Prices & New Listing Alerts" — the agent will find and run this actor.
Tips
- Price a card, lens or console by running the same keyword in Sold mode with a condition
floor ("Like new or better"). The median of
priceover the last few dozen rows is a fair comp. totalAvailablereads 15,000 on any broad keyword: that is Mercari's own display cap, not a real count. Narrow the search if you need everything.- Category and brand IDs are the numbers after
category_id=andbrand_id=in a jp.mercari.com search URL. Easiest path: set the filters on the site, then paste the URL as your search. - A
BLOCKEDstatus means Mercari returned 401, 403, 429 or 503. Lower "Max concurrency" or retry later. No proxy is needed by default.
vs. other Mercari scrapers
The busiest Mercari Japan actor on the Apify Store (fatihtahta's) has about 30 monthly users and is a one-off search export. Japan Alerts is a paid external alert service across several Japanese platforms, and Mercari's own app alerts cover one buyer's saved searches.
| What it costs | What you get | Trade-off | |
|---|---|---|---|
| This actor | $2 per 1,000 listings; nothing for a miss or a quiet run | Sold comps mode, monitoring (new, newly sold, price drop), condition labels, seller type, up to 1,000 listings per search | No listing descriptions or seller location (Mercari's search doesn't return them) |
| Mercari app alerts | Free | Push alerts for your own saved searches | No export, no sold history in bulk, no automation |
| Paid alert services | Monthly subscription | Alerts across several platforms | Not your data pipeline |
Data & privacy
This actor reads public search results that anyone can see without logging in. It doesn't log in, solve CAPTCHAs or reveal hidden contact details. Seller identity is off by default: you get a private/business flag and an anonymous seller hash so you can group listings by seller without names. Turning on seller info makes you responsible for having a lawful reason to process it. Not affiliated with Mercari.
Seller phone numbers and emails are never collected.
FAQ
Is this allowed? It collects the same public listing data your browser shows, for the searches you choose. It's built for monitoring a search, not for copying the marketplace. Check that your use fits Mercari's terms and your local law.
Does it need a Mercari account or login? No. Mercari's web client signs each search request with a key pair it generates itself (a "DPoP" proof). This actor does the same with a fresh key pair per run. No account, login or token is involved. If Mercari ever requires a login for search, the actor reports it instead of working around it.
What does trading mean in Sold mode?
The item was bought and the transaction is still in progress. Mercari's own "sold" filter includes
these, so this actor does too; filter them out on listingStatus if you only want completed sales.
Why is shippingPaidBy empty on some rows?
Mercari Shops listings don't report who pays shipping in search results.
Am I charged for a quiet monitoring run?
No. When nothing is new you get one row with listingCount: 0 and no listing charge.
Can an AI agent call this directly? Yes. It's available through the Apify MCP server and the REST endpoint above.