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

Scrape Mercari Japan and Mercari US in one run, no login: listings on sale, sold or in trade by keyword, category, search link, seller or brand. Price in yen or dollars, condition, brand, size, photos; details, translation and sold price summaries on request. Change monitor. JSON, CSV, Excel.

- **URL**: https://apify.com/automation_craft/mercari-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.75 / 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 Scraper: Japan & US Listings, Sold Prices

**Scrape Mercari listings** from Mercari Japan (jp.mercari.com) and Mercari US (mercari.com) in one run, in one row shape:
title, price in yen or dollars, status (on sale, sold, in trade), condition, brand, size, category, photos and the search
each listing came from. Search by keyword, category id, pasted search link, seller or shop, brand, or listing link; filter
by status, price, condition, brand, size, colour and shipping payer; get sold comparables from both markets side by side,
with a price summary per search, Mercari US sales within the last days and Mercari Japan's own English translation. On
request each listing's details are added: description, likes, shipping, the US sale time and the seller's public rating.
Give the run a monitor name and schedule it: each run then delivers only the listings that are new, or also the ones whose
price or status changed.

No Mercari account, no cookies, no API key, no browser. The Actor reads only what Mercari shows every visitor, checks on
every page that Mercari applied the search exactly as you sent it, and labels Mercari Japan's conditions, categories and
shipping in Mercari's own English while titles stay as the seller wrote them.

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

#### Who uses it

- **Resellers pricing their stock**: sold listings of a model on Mercari US and Mercari Japan in one run, prices as
  numbers, condition and brand on every row, and one price summary row per search (median, quartiles, share sold, days to
  sell, a suggested buy price at your margin).
- **Import buyers watching Japan**: a monitor on a Japanese keyword (`ポケモンカード`) under a price that delivers each new
  listing once, with an English translation, the price in dollars and whether it can be bought from your country, to a
  spreadsheet, Slack or e-mail through Apify's integrations.
- **Sourcing and deal hunting**: a monitor on a brand, size and price band, with free shipping or deals only, with price
  drops and sales on request.
- **Price research and data teams**: one schema for both markets through the Apify API, with the category trees in English.

### Quick start

1. Pick a **Market**: Mercari Japan, Mercari US or both.
2. Type what you want in **Keywords** (`pokemon card`, `ポケモンカード`, `lululemon`), or paste **Search links** copied from
   jp.mercari.com or www.mercari.com, or give **Sellers and shops**, **Brands** or **Listing links** (sellers and brands:
   one market per run).
3. Optionally set a **Status** (`sold` for sold comparables), a price range, conditions, sizes, a colour, the shipping payer,
   or a sold within days window (US).
4. Turn on **Include details** for descriptions, likes, shipping and the seller's rating, **Price summary per search** for
   the figures of each search, and the Japan add-ons (translation, second currency, country check) if you need them. Turn
   on **Include personal data** only if you also need personal sellers' ids, names and profile links; 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.
5. 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"`), the same fields for both markets (a field one market does not have is `null`).
Measured fill rates from the platform test runs of this code: Mercari Japan from 1,364 distinct listings (2026-10-12 and
13; details from 73 personal listings and 14 Mercari Shops products), Mercari US from 2,699 distinct listings (2026-10-13;
details from 329 listings).

| Field | What it holds | Japan | US |
|---|---|---|---|
| `type`, `market`, `listingId`, `url`, `title`, `price`, `currency`, `status`, `imageUrl`, `photoUrls`, `createdAt`, `updatedAt` | the listing as Mercari shows it: price as a number in `JPY` or `USD`, status `on_sale`, `sold` or `trading` | 100% | 100% |
| `categoryId`, `category`, `categoryPath`, `condition`, `conditionId` | Mercari's own English labels and category path (Japan from Mercari's list of 8,784 categories, US from its 3,233, both carried by the Actor) | 1,344 of 1,364 (similar listings carry none) | 100% |
| `brand`, `brandId` | the brand Mercari shows | 800 of 1,364 (59%) | 2,585 of 2,699 (96%) |
| `size` | the size Mercari shows | 375 of 1,364 (27%) | 1,426 of 2,699 (53%) |
| `listingType` | `personal`, or `shop` for a Mercari Shops product | 100% (177 shop rows) | always `personal` |
| `shippingPayer`, `shippingIncluded` | `seller` (included in the price) or `buyer` | 1,181 of 1,364 (personal listings; shops with details) | with details, 310 of 329 |
| `originalPrice`, `discountPercent` | the price before a reduction, and the discount | discount on 58 rows | 2,699 of 2,699; discount on 217 rows |
| `promoted`, `searchScore`, `color`, `countrySource` | a paid listing Mercari US moved up the order; its relevance score (best match); the colour a seller set | `null` | promoted 145 of 2,699; colour 11 of 2,699 |
| `saleFormat`, `auctionEndsAt`, `auctionBids`, `auctionHighestBid`, `auctionStartPrice` | `fixed` or `auction`, and an auction's figures | 100%; 77 auction rows | `null` |
| `sold`, `soldAtApprox`, `daysToSellApprox` | on sold and in trade rows; Mercari Japan publishes no sale time, so a sold listing's last update stands for it | every sold and in trade row | `sold` on every row |
| `soldAt`, `daysToSell` | the moment of the sale Mercari US keeps, and the days from listing to sale (details) | `null` | 10 of 10 sold or in trade rows with details |
| `searchKind`, `searchKey`, `searchMarket`, `searchKeyword`, `searchCategoryId`, `searchSellerId`, `searchShopId`, `similarTo`, `searchStatuses`, `searchSort`, `page`, `position`, `inputLabel`, `keywordUsed`, `keywordMapped`, `titleMatchesKeyword` | the search, link or seller that found the listing, and your own label for it | search rows | search rows |
| `detailsIncluded` | `true` when the details were read and added (billed as Listing detail) | 100% | 100% |
| `description` | the full description (details; on the US also from the search with Include descriptions) | 73 of 73 personal, 14 of 14 shops | 329 of 329 with details |
| `likes`, `shippingFrom`, `shippingFee` | likes, the prefecture or state it ships from, the fee (details) | 73 of 73 personal | 310 of 329 |
| `comments`, `hashtags`, `attributes`, `colors`, `shippingMethod`, `shippingDays`, `anonymousShipping`, `acceptsOffers`, `cancelable`, `authenticationFee`, `freeAuthentication`, `authenticationKind`, `stockVariants` | Mercari Japan's comment count, the seller's hashtags, Mercari's attributes and colours, shipping method and days, options, authentication, and a shop's stock by variant (details) | 73 of 73 personal (attributes 201, hashtags 28, colours 22 of 265 personal listings); variants 14 of 14 shops | `null` |
| `shippingClass`, `estimatedDelivery`, `buyerProtectionFee`, `totalPrice`, `inCartCount`, `authenticated` | Mercari US's weight class, delivery estimate, Buyer Protection fee and total, people with it in their cart, Mercari Authenticate (details) | `null` | 329 of 329; delivery estimate 12 of 329 |
| `sellerIsShop`, `sellerRating`, `sellerRatingCount`, `sellerListingCount` | whether the seller is a Mercari Shops shop; the seller's rating, its count and number of listings, or a shop's score and review count (details) | 73 of 73 personal; shops 14 of 14 (no listing count) | 329 of 329 |
| `sellerRatingGood`, `sellerRatingNormal`, `sellerRatingBad` | the rating's good, normal and bad counts (details) | 73 of 73 personal | `null` |
| `sellerSalesCount` | the seller's number of sales (details) | `null` (Mercari Japan publishes none) | 329 of 329 |
| `sellerId`, `sellerName`, `sellerUrl` | a shop's id, name and link (details, always); a personal seller's public id and profile link (on search rows too, since Mercari's search names the seller) and display name (details), only with Include personal data, else `null` | shops 14 of 14; personal sellers with the switch on | with the switch on |
| `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 | `null` |
| `translatedTitle`, `translatedDescription`, `translationLanguage` | Mercari Japan's own machine translation (Translate to) | 5 of 5 in the test run | `null` |
| `priceConverted`, `convertedCurrency`, `exchangeRatePerYen` | the price at Mercari Japan's exchange rate (Second currency) | 5 of 5 | `null` |
| `shipsToCountry`, `shipsToCountryAllowed` | whether Mercari Japan lets a buyer in that country buy the listing (Check buyable from country) | 5 of 5 | `null` |
| `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 | monitor runs |
| `scrapedAt` | when the row was made | 100% | 100% |

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 Mercari Japan 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",
  "anonymousShipping": true,
  "sellerRating": 5,
  "sellerRatingCount": 290,
  "sellerRatingGood": 288,
  "sellerRatingBad": 2,
  "sellerListingCount": 36,
  "translatedTitle": "Pokemon TCG Jirachi-GX Collection Unopened",
  "translationLanguage": "en",
  "shipsToCountry": "US",
  "shipsToCountryAllowed": true
}
```

A real Mercari US row with details (shortened, from a run on 2026-10-13):

```json
{
  "type": "listing",
  "market": "us",
  "listingId": "m41971762729",
  "url": "https://www.mercari.com/us/item/m41971762729/",
  "title": "Nintendo Switch Mario Kart Deluxe 8 / Super Smash Bros Ultimate / PGA Tour 2K21",
  "price": 50,
  "originalPrice": 55,
  "currency": "USD",
  "status": "trading",
  "sold": true,
  "condition": "Good",
  "brand": "Nintendo",
  "categoryPath": "Electronics > Video games & consoles > Games",
  "createdAt": "2026-10-13T02:25:13.000Z",
  "soldAt": "2026-10-13T02:36:04.000Z",
  "daysToSell": 0,
  "detailsIncluded": true,
  "likes": 1,
  "shippingPayer": "buyer",
  "shippingFee": 7.97,
  "shippingFrom": "South Carolina",
  "shippingClass": "2 lb",
  "buyerProtectionFee": 2.08,
  "totalPrice": 65.84,
  "sellerRating": 5,
  "sellerRatingCount": 69,
  "sellerSalesCount": 33,
  "sellerListingCount": 48,
  "searchKeyword": "nintendo switch"
}
```

With **Price summary per search** each search adds one row (`type: "priceSummary"`), from the listings it delivered, in that
market's currency. A real one for 60 sold and in trade `nintendo switch` listings on Mercari US with a target margin of 40
percent (2026-10-13):

```json
{
  "type": "priceSummary",
  "searchLabel": "Mercari US \"nintendo switch\"",
  "currency": "USD",
  "listingsWithPrice": 60,
  "lowestPrice": 13,
  "percentile25": 29.7,
  "medianPrice": 40,
  "percentile75": 61.24,
  "highestPrice": 400,
  "averagePrice": 64.31,
  "soldShare": 1,
  "medianSoldPrice": 40,
  "targetMarginPercent": 40,
  "suggestedMaxBuyPrice": 24,
  "quartileRatio": 2.06,
  "wideSpread": false
}
```

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`), the median days to sell (Mercari Japan:
approximate, `medianDaysToSellApprox`; Mercari US: from the listings whose details were read, `medianDaysToSell`), 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). The suggested buy price is the median
price of the sold and in trade listings less your target margin, a rule of thumb that leaves out fees and shipping.

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,
  promoted rows left out, the Mercari US creation time windows read (`creationWindows`), `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 comes with the
  candidates), a seller name Mercari does not know, 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), a market that could not be reached
  (`source_unavailable`), and why a run stopped (`limit_reached`).
- **A run summary** (`type: "summary"`) at the end: every counter, the events charged and the requests per market.

If you load the rows into your own database, the pair `market` plus `listingId` is the key of a listing row: use it as an
idempotency key, so a listing delivered again by a later run (a monitor's changed listing) updates its row instead of adding
one.

#### 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, listing links), in the order the run first delivered them; a
Mercari Shops shop is a business and gets none (its id and name are on its listings).

- **Seller profiles** (`includeSellerProfiles`, `type: "seller"`, Seller profile): one row per seller with `sellerId`,
  `sellerName`, `sellerUrl`, `followers`, `following`, `introduction` (as the seller wrote it), `badges`, `ratingAverage`,
  `ratingCount`, `listingCount`, `joinedAt` and `photoUrl`. Mercari Japan adds `ratingGood`, `ratingNormal`, `ratingBad`,
  `phoneVerified`, `badgeDetails` (Mercari's badge names and what they mean, such as "Highly Rated" or "Seller Level 8"),
  `officialAccount` and `businessAccount`; Mercari US adds `username`, `salesCount`, `emailVerified`, `facebookVerified`,
  `identityVerified`, `proSeller`, `fastShipper`, `fastResponder`, `reliableShipper`, `cancellationRate` and
  `internationalSeller` (its `badges` name the true ones).
- **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` (as Mercari words it: good, normal or
  bad; Mercari US also writes cancel for a sale that was cancelled), `message`, `reviewedAs` (the role the seller had in that sale: `seller` or `buyer`), `createdAt`, the reviewer's
  `reviewerId`, `reviewerName` and `reviewerUrl`, its `position` and a `reviewKey`. Mercari US adds the feedback `tags` the
  reviewer chose and `byMercari` (a review Mercari posted itself when a sale closed without one); Mercari Japan dates a
  review by its day.

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?

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

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Listing (one listing row) | $0.99 / 1,000 | $0.95 / 1,000 | $0.85 / 1,000 | $0.75 / 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 Mercari Japan 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 Mercari Japan 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.60 / 1,000 | $0.60 / 1,000 | $0.54 / 1,000 | $0.48 / 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.006 | $0.006 | $0.006 | $0.006 |

Platinum and Diamond plans pay the Gold price. The Store pricing card shows these same prices per 1,000 events: "$0.75 /
1,000" on the Listing row means one listing costs 0.075 cents at Gold (0.099 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.006 + 100 x $0.00099 = $0.105. 1,000 listings with their details on the
Gold plan cost $0.006 + 1,000 x ($0.00075 + $0.001) = $1.756. 200 sold listings with a price summary on the Free plan cost
$0.006 + 200 x $0.00099 + $0.002 = $0.206. An hourly monitor of one keyword on both markets (2 searches) that reads 1 page
each and finds 10 new listings costs, on the Free plan, $0.006 + 2 x $0.0006 + 10 x $0.00099 = $0.0171 per run. 50
listings from 40 sellers with their profiles and up to 5 reviews each (200 reviews) cost, on the Free plan, $0.006 + 50 x
$0.00099 + 40 x $0.00197 + 200 x $0.00197 = $0.5283.

Free: listings left out by your filters, listings already delivered in the run (or in the dataset you resume from), listing
links that no longer exist, searches Mercari did not apply as sent, sellers Mercari does not know (and seller profiles or
reviews Mercari no longer shows), brand names that name no single brand, invalid input, coverage rows, status rows and the
summary. Descriptions from a Mercari US search (**Include
descriptions**), comments and the second currency cost nothing extra. 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 only after the page was read and Mercari applied the search
as sent. A monitor bills a listing when it is new to the monitor; with **Changes too** also when its price or status
changed, with **Unchanged ones too** also when it is delivered again unchanged, and 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 market you pick, in every category id you give for that market and for every seller 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, similar and every listing searches, and the filters applied by this Actor
apply to every search. A setting that exists on one market only is refused when the run does not read that market, and
sellers, brands, sizes and colours (each market's own) are read one market per run: the run then reads nothing and a free
row says why.

#### What to search

- **Market**: `japan` (jp.mercari.com, prices in yen), `us` (mercari.com, prices in dollars) or `both`. Left empty: `japan`.
- **Keywords**: words as you would type them on Mercari, Japanese or English. Up to 100.
- **Search every listing**: every listing of each market the run reads, without a keyword, with your filters.
- **Mercari Japan category ids**: the number after `category_id=` in a jp.mercari.com search link (`7002` is Nintendo
  Switch); **Mercari US category ids**: the number in a category link (`www.mercari.com/us/category/796/` is video games);
  each checked against the market's own category list, which the Actor carries; an unknown id is a free row.
- **Split by department** (US): each search read once in each of Mercari US's 17 departments (Women, Men, Electronics, Toys
  & Collectibles and the rest), each with its own reach of listings.
- **Search links**: links copied from jp.mercari.com (`https://jp.mercari.com/search?keyword=...`) or www.mercari.com (a
  search, a `/us/category/` page or a `/us/brand/` page), read with every filter on them as the site reads them (keyword,
  excluded word, category, brand, size, seller, price, condition, shipping payer, status, order, colour; on Japan also
  prefecture, shipping method, Mercari Shops or personal and the attribute filters; on US also sold time and deals). A link
  with a filter Mercari does not apply for a visitor (coupons; on US also authenticity and shipping fees) is refused with
  the reason. 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`,
  `https://www.mercari.com/u/123456789/` or `/u/<username>/`), seller ids, or Mercari Shops shop links
  (`https://jp.mercari.com/shops/profile/...`): their listings, filtered by the settings below. A US username is looked up
  at Mercari once; an unknown one is a free row. One market per run.
- **Listing links**: `https://jp.mercari.com/item/m...`, `https://jp.mercari.com/shops/product/...` or
  `https://www.mercari.com/us/item/m.../` (a bare `m...` id when the run reads one market), each read with its details and
  delivered as given. Up to 5,000.
- **Similar listings of** (Japan): 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**.
- **Brands**: names as the market lists them (Japan `NIKE`, `ナイキ`; US `Nike`, `lululemon athletica`) or brand ids. On
  Mercari Japan a name is looked up at Mercari once per run (up to 20 names); on Mercari US it is matched against Mercari
  US's own brand list (28,853 brands, which the Actor carries). A name is used only when exactly one brand carries it,
  otherwise a free row lists the candidates. With no keyword, the brands alone are searched. One market per run.
- **Retry keywords in Japanese** (Japan): 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`). In trade is a listing a buyer paid for whose
  trade is not finished; Mercari US marks it sold after the buyer's rating, a few days later.
- **Order**: newest first (the default, and the only order a monitor reads), best match, price low to high, price high to
  low; most liked first on Mercari Japan only; oldest first and recently sold (sold and in trade listings, by the moment of
  the sale) on Mercari US only. An order one of the run's markets does not serve is refused.
- **Price** in whole yen (Japan) or dollars with cents (US); **Condition** (`new`, `like_new`, `good`, `fair`, `poor` on
  both markets; on Mercari Japan `fair` covers its two middle grades); **Size ids** (each market's own list); **Colour**
  (Mercari Japan's 12 or Mercari US's 14; on the US only listings whose seller set a colour); **Shipping paid by** (`seller`
  is shipping included or free shipping, `buyer`).
- Mercari Japan only: **Personal listings only**; and, in a run of Mercari Japan alone (refused in a run of both markets,
  where the US searches would stay unfiltered): **Shipping method** (`anonymous`, `japan_post`, `no_option`), **Ships from
  prefecture** (ids 1 to 47 or names such as `Tokyo`), **Mercari Shops listings only**.
- Mercari US only, in a run of Mercari US alone (refused in a run of both markets): **Deals only** (below the original
  price), **Sold within days** (by the moment of the sale, with sold or in trade statuses).
- **Posted within days**: only listings created within that many days before the run started. On Mercari US it is sent to
  Mercari and the newest first walk ends at the first page older than that; on Mercari Japan, whose newest first order
  follows the last update, older rows are left out for free and the walk goes on to the page limit.

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

- **Exclude words**: listings whose title holds one of these words (a word of the title that starts with it, as for the
  title match, so `lego` also leaves out "LEGOスターウォーズ" and "Legoland"; any letter case, full width letters read as
  plain ones), for example `junk` or `ジャンク`.
- **Only titles with every keyword word** (Mercari also returns related listings).
- **Include promoted listings** (US): on by default; off leaves out the paid promoted listings Mercari US moves up its order.

#### Details and add-ons

- **Include descriptions** (US): each row's full description, read from the search itself (no detail read, no extra
  charge).
- **Include details** (Listing detail): the detail fields of the table above, on both markets. Every filter is checked
  again on the detail.
- **Include comments** (Japan, with details, no extra charge), **Translate to** (Japan, `en` or `zh-TW`, Translation),
  **Second currency** (Japan: USD, EUR, GBP, AUD, CNY, TWD, HKD, KRW, no extra charge), **Check buyable from country**
  (Japan, a two letter code, Country check). Mercari translates and checks its own listings only: a Mercari Shops product
  gets neither and is not charged for them.
- **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.
- **Price summary per search** (Price summary), with **Target margin for a suggested buy price** (a percent), and **Only
  listings under the sold median** (Japan: reads up to 3 pages of the search's sold listings first, then delivers listings
  on sale under their median, with a Price summary; in a run of Mercari Japan alone).

**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 and profile link (on every row whose search or
detail names the seller), display name (rows with details), a seller id Mercari US looked up from a username you gave
(`searchSellerId` and the search label), 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
Japan'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; with several searches each gets an equal
  share first, then the rest goes to the searches that have more; 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
  on Japan, 100 on the US, up to 100 pages).
- **Seconds between requests**: a slower pace (1 to 5 seconds between two requests to each market, one at a time); empty
  is the normal pace of about 0.7 seconds.
- **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, and only the start fee is charged).
- **Use residential proxy** (Japan): read Mercari Japan through Apify residential exits in Japan instead of the datacenter
  group (no extra charge). Mercari US is always read through Apify residential exits.

When a price range is set, a listing without a price is left out. Sold comparables from both markets with a price summary
each, 40 rows:

```json
{
  "market": "both",
  "keywords": ["nintendo switch"],
  "statuses": ["sold"],
  "priceSummary": true,
  "maxItems": 40
}
```

New Japanese trading cards under 3,000 yen, without junk lots, translated to English with the price in dollars:

```json
{
  "market": "japan",
  "keywords": ["ポケモンカード"],
  "maxPriceJpy": 3000,
  "conditions": ["new", "like_new"],
  "excludeKeywords": ["ジャンク"],
  "translateTo": "en",
  "currency": "USD",
  "maxItems": 100
}
```

Nike listings sold on Mercari US in the last 7 days, most recent sale first:

```json
{
  "market": "us",
  "brands": ["Nike"],
  "statuses": ["sold", "trading"],
  "soldWithinDays": 7,
  "sort": "recently_sold",
  "maxItems": 200
}
```

### 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 **Maximum pages
per search** pages of each search (its window) and delivers the listings this monitor has not delivered before; listings it
delivered are free. Each results page a monitor reads is charged as a Results page, so keep the window small for a frequent
monitor: 1 or 2 pages an hour is enough for most searches. When the last page of the window still held listings new to the
monitor, the coverage row says `newListingsMayLieBeyond: true`: raise the pages or run more often.

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. **Unchanged ones too** delivers the known listings as well
(`unchanged`). **Check listings the searches no longer show** re-reads up to **Maximum listing checks** remembered listings
on sale (or in trade on the US) that no page of the run showed, longest unseen first, and delivers the ones that sold,
changed their price (`changed`) or were removed (`removed`).

A monitor name belongs to one set of settings (markets, searches, filters, the details switch and the change mode; not the
caps, the add-ons or the personal data switch): a run with other settings under that name reads nothing and says why in a
free row, so use a new name for other searches. Schedule runs on one name so they do not overlap: a run that finds the name
in use reads nothing. A monitor remembers up to 100,000 delivered listings; after that it holds new ones back with a free
status row: start a new name. A monitor name is per listing: this Actor keeps its own memories.

```json
{
  "market": "japan",
  "keywords": ["ポケモンカード"],
  "maxPriceJpy": 3000,
  "postedWithinDays": 3,
  "maxPagesPerSearch": 2,
  "monitorName": "pokemon-cards-jp",
  "monitorChanges": true
}
```

### Caps and facts

- **One Mercari Japan search serves about 10,000 listings, one Mercari US search 1,000** (10 pages of 100). In the newest
  and oldest orders this Actor goes on past the US 1,000: it searches again for the listings created before (after) the
  last one it read, a creation time window Mercari confirms on every page, so up to 100 pages reach up to 10,000 listings of
  one US search (`creationWindows`). In the other US orders Mercari can end a walk before 1,000 (800 of a reported 10,000
  in best match on 2026-10-17). Whenever a walk ends at the cap, or Mercari US ends it well short of the count it reports,
  the coverage row says `capReached: true` with both numbers: narrow the search with a price band, a category or a condition, or use **Split by department** (US).
- **Mercari Japan's newest first order follows the last update, not the creation time**: an edited listing comes back to
  the top, where a change monitor sees it, and **Posted within days** leaves older rows out for free. There is no oldest
  first order on Mercari Japan and no most liked order on Mercari US.
- **A Mercari Japan sold search is mostly Mercari Shops products**; **Personal listings only** keeps sales between people.
  Mercari Japan lists the listings on sale first in every order except most liked, so for sold comparables search `sold` on
  its own.
- **Best match on sold listings (US)**: Mercari US orders a search of sold or in trade listings only by the moment of the
  sale when best match is asked, so a Mercari US run asks for recently sold in that case (rows carry `searchSort:
  "recently_sold"`, a pasted link's coverage row notes it); in a run of both markets that combination is refused with the
  reason.
- **Mercari US places promoted listings among the others**; every US row says `promoted`, and **Include promoted listings**
  off leaves them out for free.
- **Every page is checked**: Mercari answers each search with the search it applied, and a page whose keyword, status,
  order, price, category, brand, size, seller, condition, colour, shipping payer, prefecture, method, attribute, listing
  type, deals or time window 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**: Mercari US runs through Apify residential addresses (Cloudflare refuses datacenter addresses) and Mercari
  Japan through Apify datacenter addresses. When Mercari refuses an address the run moves to a fresh one, at most 6 times a
  run for the US and 3 for Japan; after that the market stops with a free row (`source_unavailable`) and the other market
  goes on. 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, per market**: the requests that deliver no billed row are counted at what they
  cost the run (their time, and on residential exits their traffic), and each market a run reads may spend a share of USD
  0.0007 of them (all of it for one market, half each for both) plus USD 0.00009 per listing, 0.00003 per listing detail
  and 0.00003 per Results page billed in it; then that market stops with a free row that says so, and the other market goes
  on. 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.
- The category, size, colour and brand lists are the markets' own, read on 2026-10-12 (Japan) and 2026-10-13 (US); a
  category or size added later is refused as unknown until the lists are refreshed.

### 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, number of listings, the date they joined; on Mercari US also sales and verifications) 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 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 sold prices?

Set **Status** to `sold` (add `trading` for sales not yet completed): each row is a sold listing with its price, condition,
brand and category, from one market or both. **Price summary per search** adds the median, quartiles, share sold and days to
sell of each search. On Mercari Japan switch on **Personal listings only** for sales between people; on Mercari US **Sold
within days** keeps the last days only and, with details on, each row carries the moment of the sale (`soldAt`).

#### 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), until the monitor holds 100,000 listings.

#### How do people see listings on Mercari instantly after they're posted?

Schedule a monitor: give the run a **Monitor name**, run it every hour or more often with 1 or 2 pages per search, and
connect the run to Slack, e-mail or a webhook with Apify's integrations. On Mercari Japan the newest first order also holds
edited older listings, so add **Posted within days** to keep only recent ones.

#### 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 (a business; its name, score and review count are on its
  listings with details), none without **Include personal data**, and none in a monitor run: run them without a monitor name.
- No seller's followers list or the listings they liked: the profile row carries the counts.
- No sales count per seller on Mercari Japan: it publishes none; the seller's number of listings is `sellerListingCount`.
- No sale time on Mercari Japan and no sold within days window there: Mercari Japan publishes no sale time to visitors who
  are not signed in; `soldAtApprox` is a sold listing's last update.
- No oldest first order on Mercari Japan and no most liked order on Mercari US: the markets do not serve them.
- No coupon filter (Mercari applies it only for a signed in buyer), and on Mercari US no authenticity or shipping fee filter.
- No HTML description or pre promotion shipping fee on Mercari US: it serves the description as plain text, and its pre
  promotion fee was 0 on every listing measured.
- No translation, second currency or country check for Mercari US listings: they are Mercari Japan's own services.
- No brands, sizes, colours or sellers of both markets in one run: each market has its own; run one market at a time. The
  same holds for the filters of one market only (Japan's shipping method, prefecture, shops only and sold median; the US
  deals and sold within days): a run of both markets with one of them is refused, so no market's searches go unfiltered.
- No proxy setting for Mercari US: it answers only residential exits, which every run uses at no extra charge.
- No setting for the number of parallel requests: the Actor reads at about 1.5 requests a second, politely.
- No views or the buyer of a sale: Mercari does not show them to a visitor.
- No seller phone or e-mail field: Mercari shows visitors who are not signed in none, so there is nothing to deliver;
  numbers and addresses sellers write into their listings are in the texts as written.
- No connectors of its own (Notion, Airtable, MCP): 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 ready made tasks are published with this listing: start from the input form's example or the API examples below.
- No photo download: photo addresses are in every row.

### API

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

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation_craft/mercari-scraper').call({ market: 'both', keywords: ['nintendo switch'], statuses: ['sold'], maxItems: 20 });
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-scraper").call(run_input={"market": "japan", "keywords": ["ポケモンカード"], "translateTo": "en", "currency": "USD", "maxItems": 20})
rows = [x for x in client.dataset(run["defaultDatasetId"]).iterate_items() if x["type"] == "listing"]
```

#### A prompt for your AI assistant

Paste this into ChatGPT, Claude or another assistant to have it write the input for you:

```text
Write the JSON input for the Apify Actor automation_craft/mercari-scraper. Its settings: market (japan, us, both), keywords
(list), japanCategoryIds, usCategoryIds, searchUrls (jp.mercari.com or www.mercari.com links), sellerUrls (profile links or
ids, one market per run), listingUrls, brands (names or ids, one market per run), statuses (on_sale, sold, trading), sort
(newest, best_match, price_low, price_high, most_liked on Japan, oldest and recently_sold on the US), minPriceJpy,
maxPriceJpy, minPriceUsd, maxPriceUsd, conditions (new, like_new, good, fair, poor), sizeIds, colors, shippingPayer (seller,
buyer), soldWithinDays (US), postedWithinDays, excludeKeywords, includeDescriptions (US), includeDetails, translateTo (en,
zh-TW, Japan), currency (Japan), shipsToCountry (Japan), priceSummary, targetMarginPercent, maxItems, monitorName,
monitorChanges, includePersonalData, includeSellerProfiles and includeSellerReviews (both need includePersonalData),
maxReviewsPerSeller. I want: <describe what you want>.
```

### Changelog

- 0.2 (2026-10-20): faster recovery when a Mercari US address goes silent (15 s instead of up to 50 s before a fresh
  address). Inputs, rows, events and prices unchanged.
- 0.2 (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 Mercari US Buyer Protection fee is read again; a seller id Mercari US looked up from a
  username shows only with the switch on.
- 0.2 (2026-10-17): the features of the one market listings in this one: pasted search links, sellers and shops, brands,
  sizes, shipping payer, Japan's shipping method, prefecture and Mercari Shops filters, US deals and sold within days,
  every listing, similar listings, descriptions from the US search, translation, second currency and country check (Japan),
  price summaries with a suggested buy price, a change monitor with re-checks, resume from a dataset, a slower pace, more
  orders, the US walk past 1,000 listings.
- 0.1 (2026-10-12): first version, Mercari Japan and Mercari US in one row shape, details, new listing monitor;
  `includePersonalData` (2026-10-14).

### More data tools by Automation Craft

- [Mercari US Scraper: Listings, Sold Prices](https://apify.com/automation_craft/mercari-us-scraper)
- [OfferUp Scraper: Local Listings, Prices, Sellers](https://apify.com/automation_craft/offerup-scraper)
- [Kijiji Scraper: Listings, Cars, Rentals & Prices](https://apify.com/automation_craft/kijiji-scraper)
- [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)
- [Airbnb Scraper: Prices, Calendar, Reviews](https://apify.com/automation_craft/airbnb-scraper)

# Changelog

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

# Actor input Schema

## `market` (type: `string`):

japan reads jp.mercari.com (prices in yen), us reads mercari.com (prices in dollars), both reads the two in one run with one row shape. Left empty: japan.

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

Search words as you would type them on Mercari, for example pokemon card, ポケモンカード, lululemon or nintendo switch. Each keyword is searched in every market the run reads. Up to 100 keywords of up to 100 characters each.

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

Search every listing of each market the run reads, without a keyword, with the filters below (for example every listing in a price band, newest first). Not together with keywords, category ids, sellers or brands.

## `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. Mercari Japan only: refused when the run does not search Mercari Japan.

## `usCategoryIds` (type: `array`):

Mercari US category ids (the number in a category link such as www.mercari.com/us/category/796/), for example 796 for video games. Checked against Mercari US's own list of 3,233 categories shipped with this Actor; an id not on it is a free row. Every keyword is searched in every category. Mercari US only: refused when the run does not search Mercari US.

## `splitByDepartment` (type: `boolean`):

Read each search once in each of Mercari US's 17 departments (Women, Men, Electronics, Toys & Collectibles and the rest), each with its own reach of listings. Not together with category ids; at most 100 searches a run, so up to 5 keywords. Mercari US only: refused when the run does not search Mercari US.

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

Search links copied from jp.mercari.com (https://jp.mercari.com/search?keyword=...) or www.mercari.com (a search, a /us/category/ page or a /us/brand/ page). The host names the market. Each link is 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, status, order, colour; on Japan also prefecture, shipping method, Mercari Shops or personal and attribute filters; on US also sold time and deals). A link with a filter Mercari does not apply for a visitor is refused with the reason, free. The filters below apply to keyword searches; the filters applied by this Actor apply to links too. Up to 100 links, each a text or {"url": ..., "label": ...}.

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

Seller profile links (https://jp.mercari.com/user/profile/123456789 or www.mercari.com/u/<id or username>/), Mercari Shops shop links (https://jp.mercari.com/shops/profile/...) or bare seller ids: the listings of each seller or shop, filtered by the settings below (with keywords: each keyword within each seller). One market per run: set Market to Japan or US. A US username is looked up at Mercari once; an unknown one is a free row. Up to 100.

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

Mercari listing links: https://jp.mercari.com/item/m..., https://jp.mercari.com/shops/product/... or https://www.mercari.com/us/item/m.../ (a bare id such as m12345678901 works when the run reads one market). Each link is read with its details and delivered as given; the search filters below do not apply to links. A listing that no longer exists is a free row. Up to 5,000, each a text or {"url": ..., "label": ...}.

## `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. Mercari Japan only: refused when the run does not search Mercari Japan.

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

Brand names as the market lists them (Japan: NIKE, ナイキ, Supreme, ルイ・ヴィトン; US: Nike, lululemon athletica, Coach) or brand ids (the number in a brand link). On Mercari Japan a name is looked up at Mercari once per run (up to 20 names); on Mercari US it is matched against Mercari US's own brand list shipped with this Actor (28,853 brands). A name is used only when exactly one brand carries it; otherwise a free row lists the candidates. With no keyword, the brands alone are searched. One market per run: set Market to Japan or US.

## `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. Mercari Japan only: refused when the run does not search Mercari Japan.

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

on_sale (listed), sold (sold comparables) and trading (sold, the trade not yet finished; Mercari US marks it sold after the buyer rates it). Pick one or more; left empty: on_sale.

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

newest (the default, and the only order a monitor reads; Mercari Japan moves a listing up it when the seller edits it), best_match (Mercari's relevance order), price_low, price_high; most_liked on Mercari Japan only; oldest and recently_sold (sold and in trade listings only, by the moment of the sale) on Mercari US only. An order one of the run's markets does not serve is refused. A Mercari US run of sold or in trade listings only in best match is run as recently sold, the order Mercari applies to it; in a run of both markets that combination is refused.

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

Whole yen. Mercari Japan only: refused when the run does not search Mercari Japan.

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

Whole yen. Mercari Japan only: refused when the run does not search Mercari Japan.

## `minPriceUsd` (type: `number`):

Lowest price in US dollars, up to two decimals. Mercari US only: refused when the run does not search Mercari US.

## `maxPriceUsd` (type: `number`):

Highest price in US dollars, up to two decimals. Mercari US only: refused when the run does not search Mercari US.

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

One vocabulary for both markets: new, like_new, good, fair, poor. On Mercari Japan fair covers its two middle grades (some scratches and scratches or marks); every other value is one grade on each market.

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

Size ids of the market's own size list, the size_id= number in a jp.mercari.com search link (for example 3 for clothing size M) or the sizeIds number in a www.mercari.com link; checked against the list this Actor carries (Mercari US: 384 sizes). One market per run: set Market to Japan or US.

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

The market's own colours. Mercari Japan: white, black, gray, brown, beige, green, blue, purple, yellow, pink, red, orange. Mercari US: black, grey, white, beige, red, pink, purple, blue, green, yellow, orange, brown, gold, silver (Mercari US matches only listings whose seller set a colour). A colour the market does not list is refused. One market per run: set Market to Japan or US.

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

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

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

anonymous: anonymous shipping (Mercari's own delivery services); japan_post: Japan Post; no_option: methods without either. A filter of Mercari Japan alone: refused unless Market is japan (in a run of both markets it would leave the US searches unfiltered).

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

Prefectures the item ships from: ids from 1 (Hokkaido) to 47 (Okinawa), or English names such as Tokyo, Osaka or Hokkaido. A filter of Mercari Japan alone: refused unless Market is japan (in a run of both markets it would leave the US searches unfiltered).

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

Leave out Mercari Shops products, so sold comparables are sales between people (a Japan sold search is otherwise mostly shop products). Mercari Japan only: refused when the run does not search Mercari Japan.

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

Only Mercari Shops products (shops' listings), no personal listings. A filter of Mercari Japan alone: refused unless Market is japan (in a run of both markets it would leave the US searches unfiltered).

## `dealsOnly` (type: `boolean`):

Only listings whose price is below their original price (Mercari's own deals filter; every delivered row is checked for it). A filter of Mercari US alone: refused unless Market is us (in a run of both markets it would leave the Japan searches unfiltered).

## `soldWithinDays` (type: `integer`):

Only listings sold within this many days before the run started, by the moment of the sale Mercari keeps. Needs Status set to sold, in trade or both. A filter of Mercari US alone: refused unless Market is us (in a run of both markets it would leave the Japan searches unfiltered).

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

Only listings created within this many days before the run started. On Mercari US in newest first order the walk ends at the first page older than that; on Mercari Japan, whose newest first order is not by creation time, older rows are left out for free and the walk goes on to the page limit.

## `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 ジャンク.

## `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. A Japanese title often writes a brand in katakana: switch this on with Japanese keywords for Japan.

## `includePromoted` (type: `boolean`):

Mercari US moves paid promoted listings up its order; each US row says promoted true or false. Switch off to leave them out (free). Mercari Japan has no promoted listings, so a Japan run is not changed by it.

## `includeDescriptions` (type: `boolean`):

Each Mercari US listing's full description on its row, read from the search itself (no detail read and no extra charge). Mercari US only: refused when the run does not search Mercari US.

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

Read each delivered listing's detail and add it to the row (billed as Listing detail on top of Listing). Both markets: description, likes, shipping payer and fee, and the seller's rating, its count and the number of listings; a personal seller's public id, display name and profile link only with Include personal data. Mercari Japan adds comment count, hashtags, attributes, colours, shipping method, prefecture and days, auction, offers, anonymous shipping, authentication and the rating's good, normal and bad counts; a Mercari Shops product carries its shop's name, score, review count and stock by variant. Mercari US adds the sales count, shipping class, ships from state and delivery estimate, Buyer Protection fee and total, offers, in carts, Mercari Authenticate, the moment of the sale and days to sell. Every filter is checked again on the detail.

## `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. Mercari Japan only: refused when the run does not search Mercari Japan.

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

Off (the default): a personal seller's public id and profile link (sellerId, sellerUrl, on every row whose search or detail names the seller) and display name (sellerName, rows with details) are empty, and a seller id Mercari US looked up from a username you gave is not shown (searchSellerId and the search label). On: they are delivered as Mercari shows them to visitors who are not signed in. Titles, descriptions, hashtags, comment texts and Mercari Japan'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 on Mercari Japan and Mercari US (type seller): the seller's public id, display name and link, followers and following, introduction as written, badges (Mercari Japan's badge names; on Mercari US fast shipper, fast responder, reliable shipper, pro seller), rating with its count, number of listings and the date they joined. Mercari Japan adds the good, normal and bad rating counts; Mercari US the sales count, verifications and cancellation rate. 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; on Mercari US also cancel), 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 (Mercari US adds the feedback tags and whether Mercari posted it). 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. Mercari translates its own listings only: a Mercari Shops product is not translated or charged for it. Mercari Japan only: refused when the run does not search Mercari Japan.

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

Add each Mercari Japan price in this currency at the exchange rate Mercari Japan shows (read once per run; Mercari updates it daily). No extra charge. Mercari Japan only: refused when the run does not search Mercari Japan.

## `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. A Mercari Shops product is not checked or charged for it (Mercari answers for its own listings only). Mercari Japan only: refused when the run does not search Mercari Japan.

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

One extra row per search with the count, lowest, highest, average and median price, the quartiles and percentiles, the share sold, the median days to sell (Japan approximate, US from the details read), figures per status 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.

## `targetMarginPercent` (type: `integer`):

With a price summary: the suggested highest buy price, the median price of the sold and in trade listings less this percent. A rule of thumb that leaves out fees and shipping.

## `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. A filter of Mercari Japan alone: refused unless Market is japan (in a run of both markets it would leave the US searches unfiltered).

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

Listing rows this run's searches and links deliver (and charge) at most. Left empty: 100. 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 in one market, a link, a seller) delivers at most, within Maximum listings.

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

Results pages read per search (Mercari Japan about 120 listings a page, 30 for similar listings; Mercari US 100). Left empty: 10. One Mercari Japan search serves about 10,000 listings; one Mercari US search serves 1,000, and in the newest and oldest orders this Actor goes on in the next creation time window, so up to 100 pages reach up to 10,000 US listings.

## `minSecondsBetweenRequests` (type: `integer`):

A slower pace: at least this many seconds (1 to 5) between two requests to each market, one at a time. Leave it empty for the normal pace (about 0.7 seconds).

## `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 too: also deliver the remembered listings that did not change (marked unchanged); each one delivered is billed as a Listing (and a Listing detail with details).

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

With Changes too: re-read remembered listings on sale or in trade that this run's pages did not show (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 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 at most per run (default 100), the longest unseen first. 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 (17 letters and digits, from 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 refuses 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. Mercari Japan only: refused when the run does not search Mercari Japan.

## Actor input object example

```json
{
  "market": "japan",
  "keywords": [
    "pokemon card"
  ],
  "searchAllListings": false,
  "splitByDepartment": false,
  "useJapaneseAliases": false,
  "personalListingsOnly": false,
  "shopListingsOnly": false,
  "dealsOnly": false,
  "onlyTitleMatches": false,
  "includePromoted": true,
  "includeDescriptions": 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 = {
    "market": "japan",
    "keywords": [
        "pokemon card"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/mercari-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 = {
    "market": "japan",
    "keywords": ["pokemon card"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/mercari-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 '{
  "market": "japan",
  "keywords": [
    "pokemon card"
  ],
  "maxItems": 20
}' |
apify call automation_craft/mercari-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_craft/mercari-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/rhYI2cizvbrRaGkfI/builds/xtKQYyNMO2hy9vmaO/openapi.json
