Mercari Japan Scraper: New Listings & Sold Prices avatar

Mercari Japan Scraper: New Listings & Sold Prices

Pricing

from $1.00 / 1,000 listing returneds

Go to Apify Store
Mercari Japan Scraper: New Listings & Sold Prices

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

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

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: business and link to their Shops page; ordinary C2C listings are private.
  • 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).

FieldTypeDescription
querytextThe search you submitted, echoed back
foundbooleantrue if Mercari returned a search response
statustextOK, or NOT_FOUND / BLOCKED / BAD_FORMAT on a miss
searchQuerytextThe keyword actually searched (read from a pasted URL if you gave one)
listingTypetextactive, sold or all for this search
listingCountnumberListings returned and billed for this search
totalAvailablenumberMatches Mercari reports (Mercari caps this figure at 15,000)
truncatedbooleantrue if more results existed than were returned
newCount / priceDropCountnumberNew listings and price drops this run (monitoring only)
listingIdtextMercari item ID (m... for C2C, a longer ID for Mercari Shops)
urllinkjp.mercari.com/item/<id>, or jp.mercari.com/shops/product/<id> for Mercari Shops
titletextListing title
pricenumberPrice in JPY (for an auction listing, the current highest bid)
currencytextAlways JPY
listingStatustexton_sale, trading (bought, transaction in progress) or sold_out
conditionIdnumberMercari condition grade, 1 (new) to 6 (poor overall)
conditionName / conditionNameJatextThe grade in English and in Mercari's Japanese wording
categorytextMercari category ID
brandtextBrand, when the seller tagged one
sellerTypetextbusiness for Mercari Shops, otherwise private
shippingPaidBytextseller (送料込み) or buyer (着払い); empty for Mercari Shops
isAuction / auctionEndsAtboolean / dateMercari's auction-format listings and their bid deadline
postedAtdateWhen the listing was created
updatedAtdateLast status or price change; for sold items, roughly when it sold
imageUrllinkFirst listing photo
sellerHashtextAnonymous, stable hash of the seller ID
sellerIdtextOnly with "Include raw seller ID" on
isNew, changeType, previousPrice, priceDropPct, firstSeenAtmixedMonitoring fields
scrapedAtdateWhen 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

  1. In the Apify Console. Open the actor page and click Start — the searches field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. 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":["ポケモンカード"]}'
  3. 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.
  1. 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

queryfoundstatussearchQuerylistingTypelistingCounttotalAvailabletruncatednewCountpriceDropCountlistingslistingIdurltitlepricecurrencylistingStatusconditionIdconditionNameconditionNameJacategorybrandsellerTypeshippingPaidByisAuctionauctionEndsAtpostedAtupdatedAtimageUrlsellerHashsellerIdisNewchangeTypepreviousPricepriceDropPctfirstSeenAtscrapedAt
ポケモンカードtrueOK<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 price over the last few dozen rows is a fair comp.
  • totalAvailable reads 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= and brand_id= in a jp.mercari.com search URL. Easiest path: set the filters on the site, then paste the URL as your search.
  • A BLOCKED status 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 costsWhat you getTrade-off
This actor$2 per 1,000 listings; nothing for a miss or a quiet runSold comps mode, monitoring (new, newly sold, price drop), condition labels, seller type, up to 1,000 listings per searchNo listing descriptions or seller location (Mercari's search doesn't return them)
Mercari app alertsFreePush alerts for your own saved searchesNo export, no sold history in bulk, no automation
Paid alert servicesMonthly subscriptionAlerts across several platformsNot 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.