# Mercari Japan Scraper: Search, Items & Sellers in English (`maksim_lazouski/mercari-japan-scraper`) Actor

Scrape Mercari Japan (メルカリ) without login, cookies or your own proxy. Search by keyword or search link, on sale or sold, and read items in full or a seller's shop. Prices in yen and USD, optional English titles, watch lists for new listings, price drops and sold items. Pay per result.

- **URL**: https://apify.com/maksim_lazouski/mercari-japan-scraper.md
- **Developed by:** [Maksim Lazouski](https://apify.com/maksim_lazouski) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.40 / 1,000 listed items

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

### What does Mercari Japan Scraper do?

Mercari Japan Scraper reads **searches**, **items** and **seller shops** from [Mercari Japan](https://jp.mercari.com) (メルカリ), Japan's largest marketplace for second-hand goods. Give it **keywords or search links**, **item links** or **seller links** and it returns clean rows: every item of a search, on sale or sold; the full item with description, condition, shipping and the seller's ratings; a seller's profile and shop.

- **No Mercari account, no cookies, no proxy of your own.** Paste a keyword or a link and press Start.
- **Search like on the site.** By keyword in Japanese or English, or paste the link of a search page with its filters: price range, category, condition, sold items.
- **Sold prices.** Search sold items to see what things really sell for.
- **Prices in yen and US dollars**, at the European Central Bank's rate of the day.
- **English titles** as an add-on, for buyers who do not read Japanese.
- **Watch lists** for runs on a schedule: get only new listings, price drops and items that sold since the last run.
- **You pay per row** that was read and stored, plus $0.005 when a run starts.

![Example output of Mercari Japan Scraper: titles in Japanese and English, prices in yen and USD, status and condition](https://api.apify.com/v2/key-value-stores/TV7hYdY6BhVu4w53W/records/mercari-output.png)

It runs on the Apify platform, so you also get scheduling, an API, webhooks, integrations, and export of the results to JSON, CSV, Excel or HTML.

### What data can you extract from Mercari Japan?

| Group | Fields |
|---|---|
| Listed item (a search or a seller's list) | id, link, title, price in JPY and USD, status (on sale, in trade, sold), condition, who pays shipping, brand, category id, seller id, listing and update time, thumbnail, photos, auction bids; from a seller's list also likes, comments and views |
| Full item | all of the above, plus the description, category path, likes and comments, shipping method, ships from, days to ship, item attributes (card rarity, size, model...), every photo |
| Seller in the item row | id, name, good, normal and bad ratings, star score, number of items, quick shipper, join date |
| Seller profile | id, link, name, ratings, star score, items listed, followers, following, introduction, join date |
| Add-on | `title_en`: the title in English |

### How to scrape Mercari Japan

1. Open the actor and go to the **Input** tab.
2. Type a **search** (a keyword such as `ポケモンカード` or `Nintendo Switch`), or paste the link of a search page from jp.mercari.com. One search per line.
3. Choose **on sale** or **sold**, the order, and a price range if you want one. A pasted link keeps its own filters.
4. Or paste **item links** to get full item rows, or **seller links** to get a seller's profile and items.
5. Turn on **English titles** if you need them, and **Open every listed item** for the full row of every item of a search.
6. Press **Start**, then open the **Output** tab or export the dataset.

A search link is the address of a search page, for example `https://jp.mercari.com/search?keyword=ポケモンカード&status=sold_out&price_min=1000`. Set the filters on the site, copy the address, paste it here.

#### Ready-made tasks

Start from a task that is already set up, then change the keyword to your own:

- [Track Pokemon card sold prices on Mercari Japan](https://apify.com/maksim_lazouski/mercari-japan-scraper/examples/mercari-japan-pokemon-card-sold-prices)
- [Nintendo Switch listings on Mercari Japan in English](https://apify.com/maksim_lazouski/mercari-japan-scraper/examples/mercari-japan-nintendo-switch-in-english)
- [Find anime figure deals on Mercari Japan](https://apify.com/maksim_lazouski/mercari-japan-scraper/examples/mercari-japan-anime-figure-deals)
- [Film camera sold prices on Mercari Japan](https://apify.com/maksim_lazouski/mercari-japan-scraper/examples/mercari-japan-film-camera-sold-prices)
- [Louis Vuitton bag sold prices on Mercari Japan](https://apify.com/maksim_lazouski/mercari-japan-scraper/examples/mercari-japan-louis-vuitton-bag-sold-prices)
- [Get new Mercari Japan listings and price drops](https://apify.com/maksim_lazouski/mercari-japan-scraper/examples/watch-mercari-japan-new-listings)

#### Watch a search or a seller for changes

Put a name in **Watch list name** and run the actor on a schedule, for example every hour. The first run returns everything, marked `"change": "new"`. Every later run with the same name returns only:

- what is new: a new listing in your search, a new item of the seller;
- what changed since the last run: price, title or status, for example an item that went from on sale to sold (`"change": "changed"`, with `changed_fields` and the old values in `previous`);
- what is gone: an item that left a search or a seller's list that was read to its end, or an item given by link that Mercari no longer has (`"change": "removed"`). Rows for what is gone are free.

Rows that did not change are not stored and not charged, so a check every hour costs only what changed. The **Changes** view of the output shows these rows. A list cut by **Items per search** says nothing about what went beyond the cut. The actor keeps the watch list in a key-value store of your account named `watch-mercari-...`; use one name per list, and one run of it at a time.

```json
{
    "searches": ["https://jp.mercari.com/search?keyword=ミュウex%20SAR&sort=created_time&order=desc"],
    "maxItemsPerSearch": 120,
    "translateTitles": true,
    "watchName": "mew cards"
}
```

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

You pay for the rows the actor stores. The price per 1,000 rows depends on your Apify plan:

| What | Free | Starter | Scale | Business |
|---|---|---|---|---|
| A listed item (a search or a seller's list) | $2.00 | $1.80 | $1.60 | $1.40 |
| A full item row | $3.00 | $2.70 | $2.40 | $2.00 |
| A seller profile | $1.00 | $0.90 | $0.80 | $0.70 |
| English title (add-on, per row that gets one) | $1.00 | $0.90 | $0.80 | $0.70 |

A run also costs $0.005 to start, on every plan. Apify counts the start once per GB of the run's memory, so at the default memory it is one start.

The examples below are at the Free plan price, rows only; add $0.005 per run.

- A search of 120 items costs $0.24, or $0.36 with English titles.
- 1,000 full item rows cost $3.00.
- A seller with 60 listed items costs $0.121.

You do not pay for what the actor could not read, for rows of what is gone, or for unchanged rows of a watch list. Apify's free plan comes with $5 of usage a month, which is enough for about 2,500 listed items.

### Input

| Field | What it does |
|---|---|
| `searches` | Keywords or search links, one per line. |
| `items` | Item links or ids: `https://jp.mercari.com/item/m34542484477` and `m34542484477` are the same. |
| `sellers` | Seller links or ids: `https://jp.mercari.com/user/profile/123456789` and `123456789` are the same. A link to one of the seller's items works too. |
| `status` | For keywords: `on_sale` (default), `sold` or `all`. |
| `sort` | For keywords: `relevance` (default), `newest`, `price_low`, `price_high`, `likes`. |
| `priceMin`, `priceMax` | For keywords: a price range in yen. |
| `maxItemsPerSearch` | How many items of each search to return: up to 1,200, 120 by default. |
| `maxItemsPerSeller` | How many items of each seller's list to return: up to 300, 60 by default. 0 returns only the profile. |
| `scrapeDetails` | Off: a short row per listed item. On: the full item row for every listed item. |
| `translateTitles` | Adds `title_en` to every listed item and item. |
| `maxItems` | Stop after this many rows. |
| `maxConcurrency` | How many searches, items and sellers are read at the same time. 5 by default. |
| `watchName` | A watch list's name: each run stores only what is new, changed or gone since the last run with the same name. |

Sold prices of a card, newest first, with English titles:

```json
{
    "searches": ["ミュウex SAR"],
    "status": "sold",
    "sort": "newest",
    "maxItemsPerSearch": 240,
    "translateTitles": true
}
```

A seller's shop with the full row of every item:

```json
{
    "sellers": ["https://jp.mercari.com/user/profile/123456789"],
    "maxItemsPerSeller": 100,
    "scrapeDetails": true
}
```

### Output

Every row has a `type` field: `listing`, `item` or `seller`.

#### A listed item row

```json
{
    "type": "listing",
    "source": "search",
    "source_query": "ポケモンカード ミュウ",
    "position": 1,
    "item_id": "m51882261247",
    "url": "https://jp.mercari.com/item/m51882261247",
    "title": "ミュウツーex FUR MEGA 拡張パック",
    "title_en": "Mewtwo ex FUR MEGA expansion pack",
    "price": 900,
    "currency": "JPY",
    "price_usd": 5.85,
    "status": "on_sale",
    "item_type": "mercari",
    "condition_id": 3,
    "condition": "No noticeable scratches or stains",
    "shipping_paid_by": "seller",
    "brand": null,
    "category_id": 1289,
    "seller_id": "200069750",
    "created": "2026-11-03T12:00:11Z",
    "updated": "2026-11-03T12:03:49Z",
    "thumbnail": "https://static.mercdn.net/thumb/item/webp/m51882261247_1.jpg?1793707211",
    "photos": ["https://static.mercdn.net/item/detail/webp/photos/m51882261247_1.jpg?1793707211"],
    "auction": {"highest_bid": 1000, "highest_bid_usd": 6.5, "total_bids": 6, "initial_price": 500, "bid_deadline": "2026-11-04T11:01:00Z"},
    "usd_per_jpy": 0.0065,
    "usd_rate_date": "2026-11-03"
}
```

#### A full item row

```json
{
    "type": "item",
    "item_id": "m34542484477",
    "url": "https://jp.mercari.com/item/m34542484477",
    "title": "ミュウex SAR 30th CELEBRATION 129/103",
    "title_en": "Mew ex SAR 30th CELEBRATION 129/103",
    "price": 4600,
    "currency": "JPY",
    "price_usd": 29.9,
    "status": "trading",
    "description": "購入後、即スリーブに入れています。\n美品です。",
    "condition_id": 1,
    "condition": "New, unused",
    "condition_ja": "新品、未使用",
    "category": "ゲーム・おもちゃ・グッズ > トレーディングカード > ポケモンカードゲーム",
    "category_id": 1289,
    "likes": 2,
    "comments": 0,
    "shipping_paid_by": "seller",
    "shipping_method": "らくらくメルカリ便",
    "ships_within_days": [2, 3],
    "attributes": [
        {"name": "種別", "value": "シングルカード 1枚"},
        {"name": "シリーズ", "value": "MEGA"},
        {"name": "セット", "value": "M 拡張パック 30th CELEBRATION"}
    ],
    "photos": ["https://static.mercdn.net/item/detail/orig/photos/m34542484477_1.jpg?1793706450"],
    "created": "2026-11-03T11:47:30Z",
    "updated": "2026-11-03T12:02:17Z",
    "seller_id": "123456789",
    "seller_name": "...",
    "seller_ratings_good": 302,
    "seller_ratings_normal": 1,
    "seller_ratings_bad": 2,
    "seller_star_score": 5,
    "seller_items": 193,
    "seller_quick_shipper": true,
    "seller_joined": "2016-05-30T09:16:54Z"
}
```

#### A seller row

```json
{
    "type": "seller",
    "seller_id": "123456789",
    "url": "https://jp.mercari.com/user/profile/123456789",
    "name": "...",
    "ratings_good": 302,
    "ratings_normal": 1,
    "ratings_bad": 2,
    "rating_count": 305,
    "star_score": 5,
    "items_listed": 193,
    "followers": 2,
    "following": 1,
    "joined": "2016-05-30T09:16:54Z"
}
```

### Limits you should know

- **Mercari Japan only**, not Mercari US. Prices are in yen, text in Japanese as the sellers wrote it.
- **Up to 1,200 items per search** and 300 per seller, in the order Mercari shows them. A search that finds more says how many in the run's `SUMMARY` (`search_results_found`).
- **Mercari Shops products** (items sold by shops, not by people) come in search rows; they are not read one by one.
- **A deleted item cannot be read.** It is listed in the run's `FAILED` record and is not charged. A sold item can still be read; `status` says `sold_out`.
- **English titles are machine translation.** Card names, brand names and slang may come out odd; the Japanese title is always there.
- **USD prices** use the ECB's reference rate of the day the run started; the rate is in every row.

### FAQ

#### Do I need a Mercari account, cookies or a proxy?

No. The actor reads what Mercari shows to a visitor who is not logged in, and brings its own connections in Japan.

#### What happens when something could not be read?

Each search, item and seller is tried up to three times. What still fails is listed in the `FAILED` record of the run's key-value store, with the reason, and is not charged. If Mercari starts refusing visitors, or the connection is lost, the run does not press on: it waits and tries again with one visitor at a time. If that does not help within a few minutes, the run stops and keeps what it stored; it is marked as failed only when it stored nothing. Start it again with **Resurrect** and it goes on from where it stopped. A row is never stored twice.

#### Can I run it on a schedule or call it from my code?

Yes. Use Apify's schedules with a watch list to get new listings and price drops as they happen, and the Apify API or its clients for Python and JavaScript to start runs and read results. The `maxItems` field and the run's spending limit keep a run within a budget.

#### Is it legal to scrape Mercari?

The actor reads only what Mercari shows publicly, without logging in. Most sellers on Mercari are private persons, and the rows hold their public profile name and ratings. That is personal data. Collect it only for a purpose the rules that apply to you allow, keep no more than you need, and do not use it to contact or profile people. You are responsible for how you use the data; if you are not sure, ask a lawyer.

#### Something is wrong or a field is missing

Open an issue on the actor's **Issues** tab with the search, item or seller link.

Mercari is a trademark of Mercari, Inc. This actor is not affiliated with or endorsed by Mercari.

# Actor input Schema

## `searches` (type: `array`):

One search per line: a keyword in Japanese or English (ポケモンカード, Nintendo Switch), or the link of a Mercari search page with its filters, such as https://jp.mercari.com/search?keyword=ポケモンカード\&status=sold_out. A link keeps its own filters; the options below apply to keywords.

## `items` (type: `array`):

Items to read in full (description, condition, shipping, likes, the seller's ratings). Each line is a link such as https://jp.mercari.com/item/m34542484477 or just the id m34542484477.

## `sellers` (type: `array`):

Sellers whose profile and items to read. Each line is a profile link such as https://jp.mercari.com/user/profile/534239204, the number from it, or a link to one of the seller's items: the actor then reads that item to find its seller.

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

For keywords. Sold items show what things really sell for.

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

For keywords.

## `priceMin` (type: `integer`):

For keywords. Leave empty for no lower bound.

## `priceMax` (type: `integer`):

For keywords. Leave empty for no upper bound.

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

How many items of each search to return, in the order Mercari shows them. 1,200 is the most.

## `maxItemsPerSeller` (type: `integer`):

How many items of each seller's list to return (on sale and sold, newest first). 300 is the most. 0 returns only the seller's profile.

## `scrapeDetails` (type: `boolean`):

Off: one short row per item of a search or a seller's list (title, price, status, condition, photos, link). On: the actor opens every listed item and returns the full item row instead, charged as an item.

## `translateTitles` (type: `boolean`):

Adds title_en, the title in English (machine translation), to every listed item and item. Charged per row that gets one; see the pricing.

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

The run stops once it has stored this many rows. Leave empty for no limit.

## `maxConcurrency` (type: `integer`):

How many searches, items and sellers are read at the same time, each from its own address. More is faster; the default suits most jobs.

## `watchName` (type: `string`):

For runs on a schedule. Give the same name every time: each run then stores only what is new or changed since the last run with that name (a new listing, a price drop, an item sold), marked in the field change. An item that is gone from a search or a seller's list read to its end is stored once as removed, free. Rows that did not change are not stored and not charged. Leave empty to get every row.

## Actor input object example

```json
{
  "searches": [
    "ポケモンカード ミュウ"
  ],
  "status": "on_sale",
  "sort": "relevance",
  "maxItemsPerSearch": 120,
  "maxItemsPerSeller": 60,
  "scrapeDetails": false,
  "translateTitles": false,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

One row per listed item (from a search or a seller's list), per item read in full, or per seller; the field `type` says which.

## `summary` (type: `string`):

How many rows were stored, how many jobs failed, and why the run stopped if it did.

## `failed` (type: `string`):

The searches, items and sellers that could not be read, each with the reason (a deleted item, for one). An empty list when everything was read.

# 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 = {
    "searches": [
        "ポケモンカード ミュウ"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maksim_lazouski/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 = { "searches": ["ポケモンカード ミュウ"] }

# Run the Actor and wait for it to finish
run = client.actor("maksim_lazouski/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 '{
  "searches": [
    "ポケモンカード ミュウ"
  ]
}' |
apify call maksim_lazouski/mercari-japan-scraper --silent --output-dataset

```

## MCP server setup

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