# Mercari Japan Scraper: Listings, Prices, Sold (`automation_craft/mercari-japan-scraper`) Actor

Scrape Mercari Japan listings by keyword, category, search link, seller or brand, no login. Get price in yen, status (on sale, sold), condition, brand, size, photos and shipping in English labels, plus sold price summaries, translation and a monitor of new and changed listings. JSON, CSV.

- **URL**: https://apify.com/automation_craft/mercari-japan-scraper.md
- **Developed by:** [Automation Craft](https://apify.com/automation_craft) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.76 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Mercari Japan Scraper: Listings, Prices, Sold

**Scrape Mercari Japan** (jp.mercari.com) listings by keyword, category, pasted search link, seller, shop or brand: title,
price in yen, status (on sale, sold, in trade), condition, brand, size, category, photos, shipping and auction data, with
Mercari's own English labels. Get sold comparables with a price summary per search, listings on sale priced under the sold
median, Mercari's English translation of each listing, prices in a second currency, and whether a listing can be bought
from your country. Give the run a monitor name and schedule it: each run then delivers the listings that are new, or also
the ones whose price or status changed, the unchanged ones on request and the ones a re-check finds sold or removed (each
billed as a Listing; see the monitor section).

No Mercari account, no cookies, no API key, no browser. The Actor reads only what Mercari Japan shows every visitor and
checks on every page that Mercari applied the search exactly as you sent it.

This Actor is not affiliated with Mercari, Inc. or Mercari Japan.

#### Who uses it

- **Import buyers and proxy shoppers**: a monitor on `ポケモンカード` under a price, in English, with each listing's price in
  dollars and whether it ships abroad, delivered once per listing to a spreadsheet, Slack or e-mail through Apify's
  integrations.
- **Resellers pricing their stock**: sold listings of a model, between people only, with the median, quartiles and days to
  sell in one summary row.
- **Price research and data teams**: one documented schema through the Apify API, with the category tree in English.

### Quick start

1. Type what you want in **Keywords** (`pokemon card`, `ポケモンカード`, `nike`), or paste **Search links** copied from
   jp.mercari.com, or give **Sellers and shops**, **Brands** or **Listing links**.
2. Optionally set a **Status** (`sold` for sold comparables), a price range, conditions, sizes, colours, the shipping payer
   or a prefecture.
3. Turn on **Include details** for descriptions, likes, comments, shipping and the seller's rating; pick **Translate to**
   or **Second currency** if you need them. Turn on **Include personal data** only if you also need personal sellers' ids,
   names and profile links and the commenters' ids and names; with it, **Seller profiles** and **Seller reviews** add a row
   per seller and its reviews. Titles, descriptions and comments always come exactly as the sellers wrote them.
4. Run it, then download the dataset as Excel, CSV or JSON, or read it through the Apify API.

### What you get

One row per listing (`type: "listing"`). Measured fill rates from the rows of this Actor's platform test runs (1,364 distinct
listings, 2026-10-12 and 13; details from 73 personal listings and 14 Mercari Shops products):

| Field | What it holds | Filled |
|---|---|---|
| `listingId`, `url`, `title`, `price`, `currency`, `status`, `imageUrl`, `photoUrls`, `saleFormat` | the listing as Mercari shows it: price as a number in `JPY`, status `on_sale`, `sold` or `trading`, `fixed` or `auction` | 100% |
| `createdAt`, `updatedAt`, `categoryId`, `category`, `categoryPath`, `condition`, `conditionId` | Mercari's own English labels (the category tree from Mercari's list of 8,784 categories, which the Actor carries) | 1,344 of 1,364 (similar listings carry none) |
| `brand`, `brandId` | the brand Mercari shows | 800 of 1,364 (59%) |
| `size` | the size Mercari shows | 375 of 1,364 (27%) |
| `shippingPayer`, `shippingMethod`, `shippingIncluded` | `seller` (included in the price) or `buyer`, the method in English | 1,181 of 1,364 (personal listings; Mercari Shops rows carry them with details) |
| `listingType` | `personal`, or `shop` for a Mercari Shops product | 100% (177 shop rows) |
| `auctionEndsAt`, `auctionBids`, `auctionHighestBid`, `auctionStartPrice` | an auction listing's figures | 77 auction rows |
| `discountPercent` | a discount Mercari shows | 58 rows |
| `sold`, `soldAtApprox`, `daysToSellApprox` | on sold and in trade rows (a buyer paid; in trade means the trade is not finished yet): when it sold (approximately: its last update) and days from listing to sale | every sold and in trade row (90 sold rows in the test runs) |
| `searchKind`, `searchKey`, `searchKeyword`, `searchCategoryId`, `searchSellerId`, `searchShopId`, `similarTo`, `searchStatuses`, `searchSort`, `page`, `position`, `inputLabel`, `keywordUsed`, `keywordMapped` | the search, link or seller that found the listing, and your own label for it | search rows |
| `titleMatchesKeyword` | every word of the keyword starts a word of the title | keyword searches |
| `detailsIncluded` | `true` when the details were read and added (billed as Listing detail) | 100% |
| `description`, `likes`, `comments` | the description, likes and comment count (details) | 73 of 73 personal, description 14 of 14 shops |
| `hashtags`, `attributes`, `colors` | the seller's hashtags, Mercari's attributes (size, card set, rarity ...) and colours (details) | of 265 personal listings read with details by the final build (2026-10-12, its runs without a colour filter): attributes 201, hashtags 28, colours 22 (only when the seller set one) |
| `shippingFrom`, `shippingDays`, `shippingFee`, `anonymousShipping`, `acceptsOffers`, `cancelable` | prefecture, dispatch time, fee and options (details) | 73 of 73 personal; shops: prefecture and days 14 of 14 |
| `authenticationFee`, `freeAuthentication`, `authenticationKind` | Mercari's authentication service for the listing (details) | 56 of 73 |
| `stockVariants` | a Mercari Shops product's variants with their stock (details) | 14 of 14 shops |
| `sellerId`, `sellerName`, `sellerRating`, `sellerRatingCount`, `sellerRatingGood`, `sellerRatingNormal`, `sellerRatingBad`, `sellerListingCount`, `sellerUrl` | the seller's public id, display name, rating with its good, normal and bad counts, number of listings and profile link; for a shop its name, score and review count (details; a personal seller's id, name and link only with Include personal data) | 73 of 73 personal; shops 14 of 14 (no rating counts or listing count) |
| `commentList` | with Include comments: each comment's text, time and whether the seller wrote it; with Include personal data also the commenter's `userId` and `userName` | with details |
| `translatedTitle`, `translatedDescription`, `translationLanguage` | Mercari's own machine translation (Translate to) | 5 of 5 in the test run |
| `priceConverted`, `convertedCurrency`, `exchangeRatePerYen` | the price at Mercari's exchange rate (Second currency) | 5 of 5 |
| `shipsToCountry`, `shipsToCountryAllowed` | whether Mercari lets a buyer in that country buy the listing (Check buyable from country) | 5 of 5 |
| `monitorState`, `changedFields`, `previousPrice`, `previousStatus`, `priceChange`, `priceDirection`, `firstSeenAt`, `lastSeenAt`, `monitorNew` | a monitor's view of the listing: `new`, `changed`, `unchanged`, `reappeared` or `removed`, and what changed | monitor runs |

A Japanese title often writes an English keyword in katakana: search with Japanese keywords when you use **Only titles with
every keyword word**, or turn on **Retry keywords in Japanese** for franchise names written in Chinese or English.

A real row with details, a translation, a second currency and a country check (shortened, from a run on 2026-10-12):

```json
{
  "type": "listing",
  "market": "japan",
  "listingId": "m65127070685",
  "url": "https://jp.mercari.com/item/m65127070685",
  "title": "Pokemon TCG Jirachi-GX Collection 未開封",
  "price": 70000,
  "currency": "JPY",
  "priceConverted": 464.1,
  "convertedCurrency": "USD",
  "status": "on_sale",
  "listingType": "personal",
  "condition": "No noticeable scratches or marks",
  "categoryPath": "Games, Toys & Merchandise > Trading Cards > Pokémon Trading Card Game",
  "createdAt": "2026-08-05T22:32:28.000Z",
  "shippingPayer": "seller",
  "shippingMethod": "RakuRaku Mercari Shipping",
  "saleFormat": "fixed",
  "searchKeyword": "ポケモンカード",
  "detailsIncluded": true,
  "likes": 6,
  "comments": 0,
  "hashtags": ["ポケモンカード", "ポケカ", "ジラーチ", "PokemonCard", "Pokeka", "Jirachi"],
  "attributes": [{ "name": "Series", "value": "Pocket Monsters Card Game" }, { "name": "Rarity", "value": "PROMO" }],
  "shippingDays": "4 - 7 days",
  "shippingFee": 0,
  "anonymousShipping": true,
  "sellerRating": 5,
  "sellerRatingCount": 290,
  "sellerRatingGood": 288,
  "sellerRatingNormal": 0,
  "sellerRatingBad": 2,
  "sellerListingCount": 36,
  "translatedTitle": "Pokemon TCG Jirachi-GX Collection Unopened",
  "translationLanguage": "en",
  "shipsToCountry": "US",
  "shipsToCountryAllowed": true
}
```

With **Price summary per search** each search adds one row (`type: "priceSummary"`), from the listings it delivered. A real
one for 60 sold `nintendo switch` listings (2026-10-12):

```json
{
  "type": "priceSummary",
  "searchLabel": "Mercari Japan \"nintendo switch\"",
  "listingsWithPrice": 60,
  "lowestPrice": 700,
  "percentile25": 1797.5,
  "medianPrice": 3689.5,
  "percentile75": 11035,
  "highestPrice": 110000,
  "averagePrice": 8969.17,
  "soldShare": 1,
  "medianDaysToSellApprox": 0.23,
  "quartileRatio": 6.14,
  "wideSpread": true
}
```

It also carries the 10th and 90th percentiles, ten listings spread across the price range (`sampleListings`), the figures of
each status apart when the search delivered more than one (`byStatus`), and with **Only listings under the sold median**
the sold sample it read first (`soldSample`). `wideSpread` is true when the upper quartile is 3 or more times the lower one
(a search that mixes different products). Days to sell are approximate: Mercari Japan publishes no sale time, so a sold
listing's last update stands for it.

Free rows, never charged:

- **One coverage row per search** (`type: "search"`): the count Mercari reports (`totalReported`), pages read, listings
  seen and delivered, listings already delivered in the run or known to the monitor, listings left out by filters,
  `complete`, `stoppedBy`, `capReached`, a note (for example the Japanese term of a keyword that found nothing) and, for a
  monitor, `newListingsMayLieBeyond`.
- **Status rows** (`type: "status"`): input that cannot be used, a brand name that names no single brand (with the
  candidates), a listing link that no longer exists or a listing deleted between the search and its detail read
  (`not_found`), a detail that could not be read, a search Mercari did not apply as sent (`search_not_applied`, with what
  was sent and what Mercari applied), and why a run stopped (`limit_reached`).
- **A run summary** (`type: "summary"`) at the end: every counter, the events charged and the requests.

#### Seller profile and review rows (with Include personal data)

With **Include personal data** on, two more row kinds can be turned on, each billed per row. They cover every private seller
of the listings the run delivers (from searches, sellers and listing links), in the order the run first delivered them; a
Mercari Shops shop is a business and gets none (its name, score and review count are on its listings with details).

- **Seller profiles** (`includeSellerProfiles`, `type: "seller"`, Seller profile): one row per seller with `sellerId`,
  `sellerName`, `sellerUrl`, `followers`, `following`, `introduction` (as the seller wrote it), `badges` and
  `badgeDetails` (Mercari's badge names in English and what they mean, such as "Highly Rated" or "Seller Level 8"),
  `ratingAverage`, `ratingCount`, `ratingGood`, `ratingNormal`, `ratingBad`, `listingCount`, `phoneVerified`,
  `officialAccount`, `businessAccount`, `joinedAt` and `photoUrl`.
- **Seller reviews** (`includeSellerReviews`, `type: "review"`, Seller review): the seller's reviews newest first, up to
  **Reviews per seller** (`maxReviewsPerSeller`, 20 when left out), each with `rating` (good, normal or bad), `message`,
  `reviewedAs` (the role the seller had in that sale: `seller` or `buyer`), `createdAt` (Mercari dates a review by its
  day), the reviewer's `reviewerId`, `reviewerName` and `reviewerUrl`, its `position` and a `reviewKey`.

They describe private people, so the run refuses them, free, without **Include personal data**; they do not run with a
**Monitor name** (a monitor remembers listings, not sellers). Similar listings (**Similar listings of**) name no seller, so with them the
seller rows need **Include details** (refused free otherwise). The view tabs "Seller profiles" and "Seller reviews" show them.
Reviews delivered before a platform restart of the run count toward **Reviews per seller** and are not billed again.

### How much does it cost to scrape Mercari Japan?

Pay per event, with Apify's Store discounts by plan:

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Listing (one listing row) | $1.06 / 1,000 | $0.97 / 1,000 | $0.88 / 1,000 | $0.76 / 1,000 |
| Listing detail (the details of a delivered listing, only when details are read) | $1.40 / 1,000 | $1.30 / 1,000 | $1.10 / 1,000 | $1.00 / 1,000 |
| Translation (a delivered listing translated by Mercari, only with Translate to) | $0.50 / 1,000 | $0.50 / 1,000 | $0.45 / 1,000 | $0.40 / 1,000 |
| Country check (a delivered listing checked for your country, only with Check buyable from country) | $0.20 / 1,000 | $0.20 / 1,000 | $0.18 / 1,000 | $0.16 / 1,000 |
| Price summary (one summary row per search, only with Price summary) | $2.00 / 1,000 | $2.00 / 1,000 | $1.80 / 1,000 | $1.60 / 1,000 |
| Listing check (a change monitor's re-read of a remembered listing, only with Check listings) | $0.30 / 1,000 | $0.30 / 1,000 | $0.27 / 1,000 | $0.24 / 1,000 |
| Seller profile (one seller profile row, only with Seller profiles) | $1.97 / 1,000 | $1.80 / 1,000 | $1.64 / 1,000 | $1.41 / 1,000 |
| Seller review (one review row, only with Seller reviews) | $1.97 / 1,000 | $1.80 / 1,000 | $1.64 / 1,000 | $1.41 / 1,000 |
| Results page (only in monitor runs: one results page read) | $0.60 / 1,000 | $0.60 / 1,000 | $0.60 / 1,000 | $0.60 / 1,000 |
| Actor start (once per run, flat, no plan discount) | $0.004 | $0.004 | $0.004 | $0.004 |

Platinum and Diamond plans pay the Gold price. The Store pricing card shows these same prices per 1,000 events: "$0.76 /
1,000" on the Listing row means one listing costs 0.076 cents at Gold (0.106 cents on the Free plan), and "$1.60 / 1,000"
on the Price summary row means one summary costs 0.16 cents at Gold.

Examples: 100 listings on the Free plan cost $0.004 + 100 x $0.00106 = $0.110. 1,000 listings with their details on the
Gold plan cost $0.004 + 1,000 x ($0.00076 + $0.001) = $1.764. 200 sold listings with a price summary on the Free plan cost
$0.004 + 200 x $0.00106 + $0.002 = $0.218. An hourly monitor of one keyword that reads 1 page and finds 10 new listings
costs, on the Free plan, $0.004 + $0.0006 + 10 x $0.00106 = $0.0152 per run. 50 listings from 40 sellers with their
profiles and up to 5 reviews each (200 reviews) cost, on the Free plan, $0.004 + 50 x $0.00106 + 40 x $0.00197 + 200 x
$0.00197 = $0.5298.

Free: listings left out by your filters, listings already delivered in the run (or in the dataset you resume from), listings
a monitor delivered before and that did not change (unless you ask for them with **Unchanged ones too**), listing links that
no longer exist, searches Mercari did not apply as sent, seller profiles or reviews Mercari no longer shows, brand names
that name no single brand, invalid input, coverage rows, status rows and the summary. An add-on is
charged only for a delivered row that carries it, when Mercari answered. A listing link is always read with its details, so
each one delivered is billed as Listing plus Listing detail. A monitor's Results page is charged once the page was read and
Mercari applied the search as sent. With **Changes too**, a listing that changed is billed as a Listing again; with
**Unchanged ones too** each unchanged listing delivered is billed as a Listing; with **Check listings the searches no longer
show** each answered re-read is a Listing check, and each listing it finds sold, changed or removed is delivered and billed as
a Listing (plus a Listing detail with details for a changed one). These re-checks are bounded by **Maximum listing checks**,
not by **Maximum listings**.

### Input

Every keyword is searched in every category id you give and for every seller or shop you give (at most 100 searches a run).
A pasted search link is a search of its own with the filters on it; the search filters below apply to keyword, category,
seller, brand and similar searches, and the filters applied by this Actor apply to every search.

#### What to search

- **Keywords**: words as you would type them on Mercari Japan, Japanese or English. Up to 100.
- **Category ids**: the number after `category_id=` in a jp.mercari.com search link (for example `7002` for Nintendo Switch);
  checked against Mercari Japan's own category list.
- **Search links**: links copied from jp.mercari.com (`https://jp.mercari.com/search?keyword=...`), read with every filter on
  them as the site reads them: keyword, excluded word, category, brand, size, seller, price, condition, shipping payer,
  prefecture, shipping method, colour, status, order, Mercari Shops or personal, and the attribute filters. A link with the
  coupon filter (which Mercari applies only for a signed in buyer) is refused. Give a link as `{"url": "...", "label": "my
  search"}` and its rows carry your label.
- **Sellers and shops**: seller profile links (`https://jp.mercari.com/user/profile/123456789`), seller ids, or Mercari Shops
  shop links (`https://jp.mercari.com/shops/profile/...`): their listings, filtered by the settings below.
- **Listing links**: `https://jp.mercari.com/item/m...` or `https://jp.mercari.com/shops/product/...` (or a bare `m...` id),
  each read with its details and delivered as given (their comments need **Include details** on as well). Up to
  5,000.
- **Similar listings of**: listings whose similar listings, as Mercari shows them on the listing page, are delivered (30 a
  page). Their rows carry the title, price, status and type; filters on anything else need **Include details**.
- **Search every listing**: all of Mercari Japan without a keyword, with your filters.
- **Retry keywords in Japanese**: a keyword that finds nothing and is a franchise name written in Chinese or English (for
  example `宝可梦` or `one piece`) is searched once as the Japanese term sellers use (`ポケモン`, `ワンピース`); 30 franchises.

#### Search filters (applied by Mercari and checked on every page)

- **Status**: `on_sale`, `sold`, `trading`, one or more (default `on_sale`).
- **Order**: newest first (the default; Mercari moves a listing up it when the seller edits it), best match, price low to
  high, price high to low, most liked first.
- **Price** in whole yen; **Condition** (`new`, `like_new`, `good`, `fair`, `poor`); **Brands** (names such as `NIKE`,
  `ナイキ` or brand ids; a name is used only when exactly one Mercari brand carries it); **Size ids**; **Colour** (Mercari
  Japan's 12); **Shipping paid by** (`seller`, `buyer`); **Shipping method** (`anonymous`, `japan_post`, `no_option`);
  **Ships from prefecture** (ids 1 to 47 or names such as `Tokyo`); **Personal listings only** or **Mercari Shops listings
  only**.

#### Filters applied by this Actor (a listing they leave out is free)

- **Exclude words**: listings whose title holds one of them are left out (the same word start rule as the title match).
- **Posted within days**: only listings created within that many days before the run started.
- **Only titles with every keyword word**.

#### Details and add-ons

- **Include details** (Listing detail), **Include comments** (with details, no extra charge), **Translate to** (`en` or
  `zh-TW`, Translation), **Second currency** (USD, EUR, GBP, AUD, CNY, TWD, HKD, KRW, no extra charge), **Check buyable from
  country** (a two letter code, Country check), **Price summary per search** (Price summary), **Only listings under the sold
  median** (reads up to 3 pages of the search's sold listings first, then delivers listings on sale under their median, with
  a Price summary).
- **Seller profiles** (Seller profile) and **Seller reviews** (Seller review) with **Reviews per seller**, with **Include
  personal data** on: the rows of the section "Seller profile and review rows" above.

**Personal data.** The fields that name or reach a private seller are delivered only when the run turns on **Include
personal data** (`includePersonalData`): a personal seller's public id, display name and profile link, the commenters'
ids and names, and the seller profile and review rows. With it off (the default) those fields are `null` and those rows are
not made. Titles, descriptions, hashtags, comments and Mercari's translations are delivered exactly as Mercari serves them,
switch on or off: whatever a seller wrote into them, phone numbers and e-mail addresses included, comes as written. A
Mercari Shops shop's id, name and link are business data and always delivered. Mercari shows visitors who are not
signed in no seller phone or e-mail field, so the rows have none. The seller ids you give in **Sellers and shops** are your
own input and come back as you gave them (`searchSellerId`, `searchKey`). You are responsible for a lawful use, GDPR included.

#### Limits and advanced

- **Maximum listings** (default 100: the listings the searches and links deliver; a monitor's re-checks have their own
  bound, **Maximum listing checks**), **Maximum listings per search**, **Maximum pages per search** (default 10, about 120
  listings a page).
- **Resume from dataset**: the id of an earlier run's dataset; its listings are not delivered or charged again (a dataset of
  up to 200,000 rows; a larger one refuses the run, free).
- **Use residential proxy**: read Mercari Japan through Apify residential exits in Japan instead of the datacenter group (no
  extra charge).

### The monitor: new listings, and changes

Give the run a **Monitor name** (for example `pokemon-cards-jp`) and schedule it. Every run reads the newest pages of each
search up to **Maximum pages per search** and delivers the listings this monitor has not delivered before; listings it
delivered are free unless they come back as described below (changed, unchanged on request, or found by a re-check), each
then billed as a Listing. Each results page a monitor reads is charged as a Results page. One monitor name belongs to one set of
settings (searches, filters, the details switch and the change mode); the add-ons and the change options can be switched
without a new name.

With **Changes too**, a listing the monitor delivered before whose price or status changed (a price cut, sold, in trade)
is delivered again with `monitorState: "changed"`, the changed fields, the previous price and status, the price change and
its direction, and when the monitor first and last saw it. Because Mercari Japan's newest first order follows the last
update, an edited listing comes back to the top, where the monitor sees it. **Unchanged ones too** delivers the known
listings as well (`unchanged`, each billed as a Listing). **Check listings the searches no longer show** re-reads up to **Maximum listing checks**
remembered listings on sale that no page of the run showed, longest unseen first, and delivers the ones that sold, changed
their price (`changed`) or were removed (`removed`); each answered re-read is a Listing check, and each row it delivers is a
Listing (these do not count toward **Maximum listings**).

### Caps and facts

- **One Mercari Japan search serves about 10,000 listings**; when a walk ends there and Mercari reports more, the coverage
  row says `capReached: true`: narrow the search with a price band, a category or a condition to reach the rest.
- **There is no oldest first order**: Mercari Japan answers an ascending order on newest, best match and likes with the
  descending one (measured 2026-10-12); a pasted link asking for it is read as the site shows it, with a note.
- **Newest first follows the last update, not the creation time**: `postedWithinDays` leaves older rows out for free and the
  walk goes on to the page limit.
- **A sold search is mostly Mercari Shops products**; **Personal listings only** keeps sales between people.
- **Several statuses in one search**: Mercari lists the ones on sale first in every order except most liked (60 of the first 60
  `nintendo switch` rows in newest, best match and lowest price order, 2026-10-12); for sold comparables search `sold` on its own.
- **Every page is checked**: Mercari answers each search with the search it applied, and a page whose keyword, status,
  sort, price, category, brand, size, seller, condition, colour, payer, prefecture, method, attribute or listing type differs
  from what was sent delivers nothing and ends that search with a free row. Similar listings are Mercari's own choice and
  carry no such answer.
- **A detail is newer than its search row**: with details on, every filter is checked again on the detail, and a brand,
  size or colour the detail no longer carries leaves the listing out for free.
- **Refusals**: when Mercari refuses an address the run moves to a fresh one, at most 3 times a run; after that the run
  stops reading with a free row. A translation, country check, exchange rate or brand lookup that Mercari does not answer
  only leaves that one value out.
- **Work that delivers nothing is bounded**: the requests that deliver no billed row are counted at what they cost the run,
  and a run may spend USD 0.00045 of them plus USD 0.00009 per listing, 0.00003 per listing detail and 0.00003 per Results
  page billed; then it stops with a free row that says so. A filter that almost no listing passes, or a long list of links
  that no longer exist, ends there; narrow the search or split the list.
- The Actor runs at 256 MB, fixed. A run writes at most 30 status rows of one kind about single listings, links or
  searches; the summary counts every one.

### FAQ

#### Is it legal to scrape Mercari?

This Actor reads only public data, without logging in. The fields that name or reach a private seller (a personal
seller's id, name and profile link, commenters' ids and names, seller profiles and reviews) come only when you turn on
**Include personal data**; titles, descriptions and comments come exactly as the sellers wrote them. Whether your use is
lawful depends on where you are, Mercari's terms and what you do with the data, personal data included; that
responsibility is yours.

#### Can I get a Mercari seller's profile and reviews?

Yes, for the sellers of the listings a run delivers: turn on **Include personal data**, then **Seller profiles** (followers,
introduction, badges, rating with its good, normal and bad counts, number of listings, the date they joined) and **Seller
reviews** (newest first, up to **Reviews per seller**, with each reviewer's id and name). To read one seller, give their
profile link in **Sellers and shops** with **Maximum listings** set low: the seller's listings come first, then the profile
and the reviews.

#### Does Mercari have an official API?

Mercari Japan offers no public API for searching its listings. This Actor reads the same listing data Mercari's own web
pages load, with no key or account from Mercari, and gives you the rows through the Apify API (examples below).

#### How do I get Mercari Japan sold prices?

Set **Status** to `sold` (add `trading` for sales not yet completed) and turn on **Personal listings only** for sales between
people; with **Price summary per search** each search adds its median, quartiles, average and approximate days to sell. To
find bargains, **Only listings under the sold median** delivers listings on sale priced under the median of the same
search's sold listings.

#### Can I read Mercari Japan listings in English?

Conditions, categories and shipping are always in Mercari's own English. With **Translate to** `en` each delivered listing
also carries Mercari's own machine translation of its title and description (`translatedTitle`, `translatedDescription`),
and **Second currency** adds its price in dollars, euros or another currency at Mercari's exchange rate.

#### Why did my Mercari Japan alerts stop after a month?

Mercari Japan's saved search notifications are valid for 30 days after you set them up. A monitor of this Actor has no such
limit: schedule a run with a **Monitor name** and every run delivers the listings it has not delivered before (and with
**Changes too** the price cuts and sales, each billed as a Listing again), until the monitor holds 100,000 listings.

#### Why does this Actor run with limited permissions?

It needs no access to your other Apify data. It only writes to its own run's dataset and key-value store and, when you use a
monitor, to one named key-value store it creates itself for that monitor; with **Resume from dataset** it reads the one
dataset you name.

### What this Actor does not do

- No login, buying, offers, likes, messages or anything behind a Mercari account.
- No seller profile or review rows for a Mercari Shops shop, none without **Include personal data**, and none in a monitor
  run: run them without a monitor name. No seller's followers list: the profile row carries the counts.
- No oldest first order and no likes ascending order: Mercari Japan does not serve them.
- No coupon filter: Mercari applies it only for a signed in buyer.
- No connectors of its own (Notion, Airtable, Linear): the dataset is the output, read through the Apify API or Apify's
  integrations (Make, Zapier, n8n, Google Sheets, Slack, webhooks), which use your own accounts there.
- No setting for the number of parallel requests: the Actor reads at about 1.5 requests a second, politely.
- No Mercari US: this listing reads Mercari Japan only.
- No more than about 10,000 rows from one search: split by price band or category.
- No photo download: photo addresses are in every row.
- No sales count per seller: Mercari Japan publishes none; the seller's number of listings is `sellerListingCount`.
- No ready made tasks are published with this listing: start from the input form's example or the API examples below.

### API

```bash
curl -X POST "https://api.apify.com/v2/acts/automation_craft~mercari-japan-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["nintendo switch"], "statuses": ["sold"], "personalListingsOnly": true, "priceSummary": true, "maxItems": 50}'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation_craft/mercari-japan-scraper').call({ searchUrls: ['https://jp.mercari.com/search?keyword=nike&status=sold_out'], maxItems: 50 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((x) => x.type === 'listing'));
```

```python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation_craft/mercari-japan-scraper").call(run_input={"keywords": ["ポケモンカード"], "translateTo": "en", "currency": "USD", "maxItems": 20})
rows = [x for x in client.dataset(run["defaultDatasetId"]).iterate_items() if x["type"] == "listing"]
```

### Changelog

- 0.1 (2026-10-19): titles, descriptions, hashtags, comments and translations come exactly as Mercari serves them, switch
  on or off (no masks); with **Include personal data** on, seller profile rows, seller review rows (two new events) and the
  commenters' ids and names; the shared code of the Mercari listings (a hard deadline per request).
- 0.1 (2026-10-17, later): the monitor's billing stated in every text (unchanged and re-checked rows are Listings); inputs
  carrying credentials in any encoding refused and never echoed.
- 0.1 (2026-10-17): personal data behind one switch, **Include personal data**, off by default (a personal seller's id,
  name and link, and contact details written into texts); Mercari Shops shops always delivered as written.
- 0.1 (2026-10): first version: keyword, category, search link, seller, shop, brand, similar and every listing searches;
  sizes, colours, shipping and prefecture filters; details with comments; translation, second currency and country check;
  price summaries and the sold median filter; a monitor of new and changed listings with re-checks; resume from a dataset.

### More data tools by Automation Craft

- [Kleinanzeigen Scraper & API: Ads, Prices, Places](https://apify.com/automation_craft/kleinanzeigen-scraper)
- [Amazon Product Scraper - Search, Best Sellers](https://apify.com/automation_craft/amazon-data-scraper)
- [Amazon Sponsored Products Scraper - Ads by Keyword](https://apify.com/automation_craft/amazon-sponsored-products-scraper)
- [ShopBack Scraper: Cashback, Gift Cards, Affiliates](https://apify.com/automation_craft/affiliate-network-detector)
- [Airbnb Scraper: Prices, Calendar, Reviews](https://apify.com/automation_craft/airbnb-scraper)
- [Google Trends Scraper - Compare and Trending Now](https://apify.com/automation_craft/google-trends-scraper)

# Changelog

This Actor's version history is a separate document: https://apify.com/automation_craft/mercari-japan-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `array`):

Search words as you would type them on Mercari Japan, for example ポケモンカード, pokemon card, nike or nintendo switch. Up to 100 keywords of up to 100 characters each.

## `japanCategoryIds` (type: `array`):

Mercari Japan category ids, the number after category_id= in a jp.mercari.com search link (for example 7002 for Nintendo Switch). Checked against Mercari Japan's own category list, which this Actor carries; an unknown id is a free row.

## `searchUrls` (type: `array`):

Mercari Japan search links copied from the site (https://jp.mercari.com/search?keyword=...), each read as its own search with every filter on it applied as the site applies it: keyword, excluded word, category, brand, size, seller, price, condition, shipping payer, prefecture, shipping method, colour, status, order, Mercari Shops or personal, attribute filters. The filters below apply to keyword searches; the filters applied by this Actor apply to links too. Up to 100 links.

## `sellerUrls` (type: `array`):

Seller profile links (https://jp.mercari.com/user/profile/123456789), bare seller ids, or Mercari Shops shop links (https://jp.mercari.com/shops/profile/...): the listings of each seller or shop, filtered by the settings below (with keywords: each keyword within each seller). Up to 100.

## `listingUrls` (type: `array`):

Mercari Japan listing links: https://jp.mercari.com/item/m... or https://jp.mercari.com/shops/product/... (a bare id such as m12345678901 works too). Each link is read with its details and delivered as given; the search filters do not apply to links. A listing that no longer exists is a free row. Up to 5,000.

## `similarToListings` (type: `array`):

Mercari Japan listing links (https://jp.mercari.com/item/m...) whose similar listings, as Mercari shows them on the listing page, are delivered (30 a page). Their rows carry title, price, status and type; other filters are checked on each listing's detail when Include details is on, and without it only filters on those fields can pass. Up to 100.

## `searchAllListings` (type: `boolean`):

Search all of Mercari Japan without a keyword, with the filters below (for example every listing of a brand, size or price band, newest first). Not together with keywords, category ids, sellers or brands.

## `useJapaneseAliases` (type: `boolean`):

When a keyword finds no listing at all and it is a franchise name written in Chinese or English that this Actor's table knows (for example 宝可梦 or one piece), search the Japanese term sellers use (ポケモン, ワンピース) once instead. Rows say which term found them (keywordUsed, keywordMapped). Off: the search's coverage row names the term.

## `statuses` (type: `array`):

on_sale (listed), sold (sold comparables) and trading (sold, the trade not yet finished). Pick one or more; left empty: on_sale.

## `sort` (type: `string`):

newest is Mercari's newest first order (the default, and the only order a monitor reads; Mercari moves a listing up it when the seller edits it). best_match is Mercari's relevance order, most_liked the most liked first. Mercari Japan serves no oldest first order.

## `minPriceJpy` (type: `integer`):

Whole yen.

## `maxPriceJpy` (type: `integer`):

Whole yen.

## `conditions` (type: `array`):

new, like_new, good, fair, poor: Mercari Japan's six grades, with fair covering its two middle grades (some scratches, and scratches or marks). The row carries Mercari's own English label and its grade id.

## `brands` (type: `array`):

Brand names as Mercari Japan lists them (NIKE, ナイキ, Supreme, ルイ・ヴィトン) or brand ids (the number after brand_id= in a search link). A name is looked up at Mercari once per run and used only when exactly one brand carries it; otherwise a free row lists the candidates. With no keyword, the brands alone are searched. Up to 20 names.

## `sizeIds` (type: `array`):

Mercari Japan size ids, the number after size_id= in a search link (for example 3 for clothing size M, 10 for men's shoes 26.5 cm). Checked against Mercari Japan's size list, which this Actor carries.

## `colors` (type: `array`):

Mercari Japan's colour filter: white, black, gray, brown, beige, green, blue, purple, yellow, pink, red, orange.

## `shippingPayer` (type: `string`):

seller: shipping included in the price (送料込み); buyer: the buyer pays on delivery (着払い).

## `shippingMethods` (type: `array`):

anonymous: anonymous shipping (Mercari's own delivery services); japan_post: Japan Post; no_option: methods without either.

## `shippingFromPrefectures` (type: `array`):

Prefectures the item ships from: ids from 1 (Hokkaido) to 47 (Okinawa), or English names such as Tokyo, Osaka or Hokkaido.

## `personalListingsOnly` (type: `boolean`):

Leave out Mercari Shops products, so sold comparables are sales between people (a sold search is otherwise mostly shop products).

## `shopListingsOnly` (type: `boolean`):

Only Mercari Shops products (shops' listings), no personal listings.

## `excludeKeywords` (type: `array`):

Listings whose title holds one of these words (a word of the title that starts with one, as for the title match: "lego" also leaves out "LEGOスターウォーズ"; any letter case, full width letters read as plain ones) are left out, free. For example junk, broken or ジャンク.

## `postedWithinDays` (type: `integer`):

Only listings created within this many days before the run started. Mercari Japan's newest first order is by last update, not creation, so older rows are left out for free and the walk goes on to the page limit.

## `onlyTitleMatches` (type: `boolean`):

Leave out listings whose title does not hold every word of the keyword (Mercari also returns related listings). Every row carries titleMatchesKeyword either way. Japanese titles often write a brand in katakana: switch this on with Japanese keywords.

## `includeDetails` (type: `boolean`):

Read each delivered listing's detail and add it to the row: description, likes, comment count, hashtags, attributes, colours, shipping fee, method, prefecture and days, auction, offers, anonymous shipping and authentication, and the seller's rating (with its good, normal and bad counts) and listing count; a personal seller's public id, display name and profile link only with Include personal data. A Mercari Shops product carries its shop's name, score, review count and stock by variant. Billed as Listing detail on top of Listing.

## `includeComments` (type: `boolean`):

With Include details on (also for listing links, which are always read with their details): the listing's comments as texts with their time and whether the seller wrote them, exactly as written; with Include personal data on, also each commenter's public id and display name (userId, userName). No extra charge: they come with the detail.

## `includePersonalData` (type: `boolean`):

Off (the default): a personal seller's public id, display name and profile link (sellerId, sellerName, sellerUrl, rows with details) are empty. On: they are delivered as Mercari shows them to visitors who are not signed in. Titles, descriptions, hashtags, comment texts and Mercari's translations are never masked: they come exactly as Mercari serves them, switch on or off, contact details a seller wrote included. A Mercari Shops shop's id, name and link are always delivered. Nothing behind a Mercari login is read. With it on you can also turn on Seller profiles and Seller reviews, and comments name their commenter (public id and display name). You are responsible for a lawful use of personal data, GDPR included. No extra charge.

## `includeSellerProfiles` (type: `boolean`):

With Include personal data on: one profile row for each private seller of the listings this run delivers (type seller): the seller's public id, display name and link, followers and following, introduction as written, the badges Mercari shows (English names), rating with its count, number of listings and the date they joined. With the good, normal and bad rating counts and whether the phone number is verified. Billed as one Seller profile per row. A Mercari Shops shop gets none (a business; its id and name are on its listings). Not with a monitor name. Refused without Include personal data.

## `includeSellerReviews` (type: `boolean`):

With Include personal data on: the reviews of each private seller of the listings this run delivers (type review), newest first, up to Reviews per seller: the rating as Mercari words it (good, normal or bad), the text as written, the role the seller had in that sale (seller or buyer), the date, and the reviewer's public id, name and link. Billed as one Seller review per row. Not with a monitor name. Refused without Include personal data.

## `maxReviewsPerSeller` (type: `integer`):

With Seller reviews: the most review rows per seller, newest first (20 when left out). A seller with fewer reviews gives what it has.

## `translateTo` (type: `string`):

Mercari Japan's own machine translation of each delivered listing's title and description (Mercari makes it on request; it may contain errors). Billed as Translation per translated row.

## `currency` (type: `string`):

Add each price in this currency at the exchange rate Mercari Japan shows (read once per run; Mercari updates it daily). No extra charge.

## `shipsToCountry` (type: `string`):

A two letter country code (US, GB, TW, KR ...): each delivered listing says whether Mercari Japan lets a buyer in that country buy it (through its cross border partner), as Mercari answers on the listing page. Billed as Country check per answered row.

## `priceSummary` (type: `boolean`):

One extra row per search with the count, lowest, highest, average and median price, the quartiles, the share sold, the median days to sell (approximate) and ten listings across the price range, from the listings the search delivered. Use status sold for sold comparables. Billed as Price summary per search.

## `onlyBelowSoldMedian` (type: `boolean`):

For each search, read up to 3 pages of its SOLD listings first, then deliver only listings on sale priced under their median price (with a Price summary row per search). Status must be on_sale.

## `maxItems` (type: `integer`):

Listing rows this run's searches and links deliver at most. With several searches each gets an equal share first, then the rest goes to the searches that have more. A change monitor's re-checks (Check listings the searches no longer show) are bounded by Maximum listing checks instead.

## `maxItemsPerSearch` (type: `integer`):

Listing rows one search (a keyword, a link, a seller) delivers at most, within Maximum listings.

## `maxPagesPerSearch` (type: `integer`):

Results pages read per search (about 120 listings a page, 30 for similar listings). Left empty: 10. One Mercari Japan search serves about 10,000 listings.

## `monitorName` (type: `string`):

A short name of your own, such as pokemon-cards-jp (letters, digits, spaces and . \_ , - : # ( ), up to 60 characters). Every run reads the newest pages of each search up to the page limit and pays a Results page per page read; listings the monitor delivered before are free unless they changed (with Changes too), you ask for them again (Unchanged ones too) or a re-check finds them sold, changed or removed (Check listings), each then billed as a Listing. One name belongs to one set of settings.

## `monitorChanges` (type: `boolean`):

With a monitor name: also deliver listings the monitor delivered before whose price or status changed since (sold, in trade, price cut or rise), with the previous price and status, the change, and when the monitor first and last saw them. Billed as Listing again for a changed listing.

## `monitorDeliverUnchanged` (type: `boolean`):

With Changes: deliver the unchanged listings the monitor already knows as well (monitorState unchanged); each one delivered is billed as a Listing (and a Listing detail with details).

## `checkRemovedListings` (type: `boolean`):

With Changes: re-read the remembered listings on sale or in trade that no page of this run showed (the longest unseen first; a Listing check per answered read), to learn whether they sold, changed price or were removed. Each one that sold, changed or was removed is delivered as a row (monitorState changed or removed) and billed as a Listing (plus a Listing detail with details for a changed one). Bounded by Maximum listing checks, not by Maximum listings.

## `maxListingChecks` (type: `integer`):

Remembered listings re-read per run at most (with Check listings), the longest unseen first. Left empty: 100. These re-checks and the rows they deliver do not count toward Maximum listings.

## `resumeFromDatasetId` (type: `string`):

The id of a dataset of an earlier run of this Actor (its Storage tab): the listings in it are not delivered or charged again, so an interrupted run can be continued. A dataset that cannot be read stops the run before anything is read. A dataset of up to 200,000 rows; a larger one refuses the run, free.

## `useResidentialProxy` (type: `boolean`):

Read Mercari Japan through Apify residential exits in Japan instead of the datacenter group (the default, which answers every call in our tests). No extra charge.

## Actor input object example

```json
{
  "keywords": [
    "pokemon card"
  ],
  "searchAllListings": false,
  "useJapaneseAliases": false,
  "personalListingsOnly": false,
  "shopListingsOnly": false,
  "onlyTitleMatches": false,
  "includeDetails": false,
  "includeComments": false,
  "includePersonalData": false,
  "includeSellerProfiles": false,
  "includeSellerReviews": false,
  "priceSummary": false,
  "onlyBelowSoldMedian": false,
  "maxItems": 20,
  "monitorChanges": false,
  "monitorDeliverUnchanged": false,
  "checkRemovedListings": false,
  "useResidentialProxy": false
}
```

# Actor output Schema

## `items` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "pokemon card"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/mercari-japan-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["pokemon card"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/mercari-japan-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "pokemon card"
  ],
  "maxItems": 20
}' |
apify call automation_craft/mercari-japan-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_craft/mercari-japan-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Atrkd6DnzSA6cDV0E/builds/KrDTtJzyzcuAFHagV/openapi.json
