# Mercari Japan Scraper (`scrapewise/mercari-scraper`) Actor

Scrape Mercari Japan (メルカリ) listings without login: search by keyword or link with price, status (on sale or sold), condition, category and brand filters, or read full item pages. Price in JPY, condition, photos, shipping and description. Error rows are free.

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

## Pricing

from $1.39 / 1,000 item delivereds

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, sold prices and full item pages

Scrape [Mercari Japan](https://jp.mercari.com) (メルカリ) **without an account, cookies or a
browser**: search by keyword or by a Mercari search link, keep on-sale or sold listings, filter by
price, condition, category, brand and shipping, or read full item pages with the description,
category path and shipping details. Prices come in JPY straight from Mercari.

Built for resale and sourcing research, sold-price comps, price tracking, proxy-shopping catalogs
and market datasets for Japanese second-hand goods (games, trading cards, fashion, electronics).

### At a glance

- **Price per 1,000 listings, Free plan:** US$ 1.99
- **Fee per run start:** None
- **Search by keyword or Mercari link:** Yes
- **On sale and sold listings:** Yes
- **Price, condition, category, brand, shipping filters:** Yes, plus exclude keyword
- **Full item page (description, category path, shipping):** Yes, same price
- **Seller data:** Never (see below)
- **Error rows (bad link, deleted item, no results):** Free, with an `errorCode`

### One real row

From a test run on 2026-09-28 (search "nintendo switch"):

```json
{
  "type": "item",
  "id": "m95905940143",
  "url": "https://jp.mercari.com/item/m95905940143",
  "title": "Nintendo Switch 本体",
  "priceJpy": 17000,
  "status": "on_sale",
  "conditionId": 3,
  "condition": "No noticeable scratches or stains",
  "categoryId": 701,
  "brand": "Nintendo",
  "brandJa": "任天堂",
  "size": null,
  "shippingPaidBy": "seller",
  "photos": ["https://static.mercdn.net/item/detail/webp/photos/m95905940143_1.jpg?1790505599"],
  "thumbnail": "https://static.mercdn.net/thumb/item/webp/m95905940143_1.jpg?1790505599",
  "createdAt": "2026-09-27T10:39:59Z",
  "updatedAt": "2026-09-28T07:08:34Z",
  "isShopItem": false,
  "searchTerm": "nintendo switch",
  "scrapedAt": "2026-09-28T11:26:13Z",
  "errorCode": null,
  "error": null
}
```

With **Full item pages** on (or in `item` mode) the same row also gets `description`,
`category` ("本体(Nintendo Switch)"), `categoryPath` (ゲーム・おもちゃ・グッズ > テレビゲーム >
Nintendo Switch > 本体(Nintendo Switch)), `conditionJa`, `shippingMethod` (ゆうゆうメルカリ便),
`shipsWithinDays` (\[1, 2]), `likes` (84), `commentCount`, `colors`, `hashtags` and every photo in
full size.

### Input

| Field | Type | What it does |
|---|---|---|
| `mode` | `search` or `item` | `search` runs searches; `item` reads the full page of each item link. |
| `searchTerms` (also `keyword`, `keywords`, `queries`) | list | Keywords in Japanese or English, one search each. |
| `startUrls` | list | Mercari search or category links (their filters are kept), item links (`jp.mercari.com/item/m...`) or plain item ids. |
| `maxItemsPerSearch` (also `maxItems`, `limit`) | integer, default 120 | Listings per search. `0` = as many as Mercari shows (about 12,000). |
| `status` | `onSale`, `sold`, `all` | `sold` returns sold and in-transaction listings, for price research. |
| `sortBy` | `bestMatch`, `newest`, `priceLowToHigh`, `priceHighToLow`, `mostLiked` | Mercari's own orders. |
| `minPrice`, `maxPrice` | yen | Price range. |
| `itemCondition` | list | `new`, `likeNew`, `noNoticeableWear`, `someWear`, `visibleWear`, `poor`. |
| `categoryIds`, `brandIds` | list of numbers | Ids as they appear in Mercari links (`category_id=701`, `brand_id=15487`). |
| `excludeKeyword` | text | Mercari drops listings that match it. |
| `shippingPaidBy` | `any`, `seller`, `buyer` | Shipping included or paid on delivery. |
| `includeDetails` | boolean, default false | Full item page for each search result, same price. |
| `includeShopItems` | boolean, default true | Keep Mercari Shops listings that appear in the search. |
| `proxyConfiguration` | proxy | Apify datacenter proxy by default. |

### Price

**US$ 1.99 per 1,000 listings** on the Free plan, no start fee, with or without full item pages.
Rows with an `errorCode` are free, and a listing is never charged twice in a run (the same item
found by two searches is delivered once).

### Errors you may see

| `errorCode` | Meaning | Charged |
|---|---|---|
| `INVALID_URL` | not a Mercari Japan item, search or category link, nor an item id | no |
| `UNSUPPORTED_URL` | a Mercari Shops product page in `item` mode; shop listings come through search | no |
| `ITEM_NOT_FOUND` | the item was deleted or the id is wrong | no |
| `NO_RESULTS` | Mercari found nothing for this search and filters | no |
| `BLOCKED` | Mercari did not answer after five attempts on new IPs; run again | no |
| `NOT_REACHED` | the run timeout arrived before this search or item | no |
| `INVALID_INPUT` | a filter value is not valid (for example a minimum price above the maximum) | no |
| `ITEM_UNREADABLE`, `UNEXPECTED` | a listing came in a shape we did not expect; the rest of the run goes on | no |

### Good to know

- **Sold listings are the real price data.** `status: "sold"` with `sortBy: "newest"` gives the
  latest sale prices for a keyword; `updatedAt` is the last change Mercari recorded on the listing.
- **Mercari shows about 12,000 listings per search** (101 pages of 120). Split a broad search by
  price range or category to go further.
- **No seller data, by design.** Mercari sellers are mostly private people, so the Actor never
  returns seller ids, names, avatars, ratings, profile links, the prefecture they ship from, or the
  comments under a listing. You get the item only. The description is the seller's own text, as
  published.
- **Mercari Shops** (business sellers) listings appear in search with `isShopItem: true` and a
  `/shops/product/` link; their full page is not read yet.
- **Condition labels** come in English (`condition`) with Mercari's Japanese label in `conditionJa`
  on full item pages. `brand` is the brand's Latin name when Mercari has one.
- Something broke? Open an issue on the Actor page.

### FAQ

**Do I need a Mercari account or a Japanese IP?** No. Nothing to log in to, no cookies to paste,
and the default datacenter proxy works from outside Japan.

**How fast is it?** One request returns 120 listings; a test read 836 listings in 8 seconds. Full
item pages take one request each, six at a time.

**Can I paste a search link from my browser?** Yes. Keyword, status, price range, category, brand,
condition, shipping and sort in the link are all kept.

**Can I use it from n8n, Make, Zapier or an AI agent?** Yes, through the Apify app or the Apify
MCP server. Error rows are free, so an agent can explore cheaply.

**What if a run is cut by its timeout?** The Actor stops 45 seconds before the limit and ends
successfully with what it delivered, telling you in the status message how to get the rest.

### Changelog

- **0.1 (2026-09-28)**: first version. Keyword and link search, on-sale and sold listings, price,
  condition, category, brand, shipping and exclude filters, full item pages, free error rows.

# Actor input Schema

## `mode` (type: `string`):

search: run Mercari searches from keywords or search links and return every listing. item: read the full page of each item link (description, category path, shipping, likes).

## `searchTerms` (type: `array`):

Keywords to search on Mercari Japan, one per line. Japanese and English both work (for example ポケモンカード, nintendo switch, supreme). Each term is a separate search. Also accepts 'keyword', 'keywords' or 'queries' from other Mercari scrapers.

## `startUrls` (type: `array`):

Mercari Japan links, one per line: search or category pages (jp.mercari.com/search?keyword=...\&status=sold\_out, with their filters) or item pages (jp.mercari.com/item/m12345678901). Plain item ids such as m12345678901 also work. In item mode, put the item links here.

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

Stop each search after this many listings. Mercari serves 120 per page and about 12,000 per search. 0 = as many as Mercari shows.

## `status` (type: `string`):

On sale only, sold only (sold and in-transaction listings, for price research), or both.

## `sortBy` (type: `string`):

Mercari's own orders. With a per-search limit it also decides which listings you get.

## `minPrice` (type: `integer`):

Only listings at or above this price in yen.

## `maxPrice` (type: `integer`):

Only listings at or below this price in yen.

## `itemCondition` (type: `array`):

Only these conditions. Empty = any condition.

## `categoryIds` (type: `array`):

Numeric Mercari category ids, as in category\_id=701 in a Mercari search link. Empty = every category.

## `brandIds` (type: `array`):

Numeric Mercari brand ids, as in brand\_id=15487 in a Mercari search link. Empty = every brand.

## `excludeKeyword` (type: `string`):

Mercari drops listings that match this word (for example ジャンク to skip junk).

## `shippingPaidBy` (type: `string`):

Only listings where shipping is included (seller pays) or paid on delivery (buyer pays).

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

Also read each listing's full page: description, category path, shipping method and days, likes, colors. Same price per item, slower runs.

## `includeShopItems` (type: `boolean`):

Keep listings from Mercari Shops (business sellers) that appear in the search. Off = only regular Mercari listings.

## `proxyConfiguration` (type: `object`):

The default Apify Proxy (datacenter) works; tested with 15 pages in a row from three datacenter IPs without a block.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "nintendo switch"
  ],
  "maxItemsPerSearch": 120,
  "status": "onSale",
  "sortBy": "bestMatch",
  "shippingPaidBy": "any",
  "includeDetails": false,
  "includeShopItems": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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 = {
    "searchTerms": [
        "nintendo switch"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/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 = { "searchTerms": ["nintendo switch"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/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 '{
  "searchTerms": [
    "nintendo switch"
  ]
}' |
apify call scrapewise/mercari-scraper --silent --output-dataset

```

## MCP server setup

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