# Mercari Japan Scraper — Sold Prices & New Listings (`crawloop/mercari-japan-scraper`) Actor

Scrape Mercari Japan on-sale and sold listings by keyword or search URL. Export JPY price, condition, brand, seller, photos, and timestamps as JSON. Optional item details and a new-listing monitor for scheduled runs.

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

## Pricing

from $1.49 / 1,000 listings

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## Mercari Japan Scraper — Sold Prices & New Listings

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Mercari, Inc. or its affiliates. Data is read from publicly accessible listing pages only. No login. You are responsible for complying with applicable law and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Scrape **Mercari Japan** on-sale and **sold listings** by keyword or search URL. Export **JPY price**, **condition**, **brand**, **seller**, **photos**, and **timestamps** as JSON. Turn on monitor mode to save only new listings on a schedule. This is a **Mercari Japan scraper** and an unofficial **Mercari API alternative** for resale comps — not the US Mercari site.

**Best for:** resellers and sourcing teams who need sold prices in yen and a repeatable new-listing watch.

| Mercari Japan Scraper | eBay sold | eBay live | Vinted |
| :--- | :--- | :--- | :--- |
| Mercari Japan Scraper ◄── you are here | [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper) | [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) |

| Depop new listings | Poshmark sold |
| :--- | :--- |
| [Depop Monitor](https://apify.com/crawloop/depop-monitor) | [Poshmark Sold Listings Scraper](https://apify.com/crawloop/poshmark-sold-listings-scraper) |
| New Depop search cards | Poshmark sold price, dates, seller |

### When to use this Actor

- **Sold comps** — set status to sold out and export the price, condition, and updated time
- **Sourcing** — search on-sale listings by keyword, price band, and newest first
- **New listing monitor** — schedule a run; the first pass stores seen ids, later passes save only new cards
- **Item lookup** — paste an item URL when you need the description and seller rating
- **Python, Node.js, or MCP** — one dataset, no browser

### When not to use this Actor

- **Mercari US** — this Actor reads Mercari Japan only
- **Buyer messages, emails, or phone numbers** — not collected
- **A seller-review or follower dump** — search cards and one optional item page only
- **Cross-border checkout or shipping quotes** — prices are the listing price in JPY

### Key features

- **Keyword or search URL** — status, sort, price, category, and brand on the URL are kept
- **On sale, sold, or both** — sold rows are the comp; on-sale rows are the live feed
- **C2C and Mercari Shops** — both item types from the same search
- **Monitor mode** — named key-value store of seen ids; seed run writes no dataset rows
- **Optional item detail** — description, category, likes, comments, and seller rating
- **HTTP only** — no browser; leave proxy off unless a run is blocked

### Input

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchTerms` | Array | — | Keywords. Up to 15 per run |
| `startUrls` | Array | — | Mercari Japan search URLs or item URLs |
| `status` | String | `on_sale` | `on_sale`, `sold_out`, or `both` |
| `sortBy` | String | `created_time` | `created_time`, `price`, `likes`, or `score` |
| `sortOrder` | String | `desc` | `desc` or `asc` |
| `priceMin` / `priceMax` | Integer | — | Price band in JPY. `priceMax` 0 means no cap |
| `maxItems` | Integer | `40` | Cap per keyword and status (1–300) |
| `fetchItemDetails` | Boolean | `false` | Merge the item page into each saved row |
| `monitorMode` | Boolean | `false` | Save only listings that were not seen before |
| `emitExisting` | Boolean | `false` | Also write rows on the first monitor seed |
| `monitorStoreName` | String | `mercari-japan-monitor-state` | Named store for seen ids |
| `proxyConfiguration` | Object | Off | Turn on only if a run is blocked |

#### Input example

```json
{
    "searchTerms": ["nintendo switch"],
    "status": "sold_out",
    "sortBy": "created_time",
    "sortOrder": "desc",
    "priceMin": 1000,
    "priceMax": 20000,
    "maxItems": 40,
    "fetchItemDetails": false,
    "monitorMode": false,
    "proxyConfiguration": { "useApifyProxy": false }
}
```

#### Search URL example

```json
{
    "startUrls": [
        { "url": "https://jp.mercari.com/search?keyword=nike&status=on_sale&sort=created_time&order=desc&price_max=8000" }
    ],
    "maxItems": 40
}
```

#### Monitor example

Schedule the same input. The first run stores ids and saves nothing. The next runs save only new listings.

```json
{
    "searchTerms": ["nintendo switch"],
    "status": "on_sale",
    "sortBy": "created_time",
    "maxItems": 40,
    "monitorMode": true,
    "emitExisting": false,
    "monitorStoreName": "mercari-japan-switch"
}
```

### Output

Each dataset row is one listing. Prices are integers in JPY. `createdAt` and `updatedAt` are UTC. `detailFetched` is true when the item page was merged. Monitor rows that were not in the seen set have `isNew: true`.

| Field | Description |
| :--- | :--- |
| `itemId` | Listing id |
| `url` | Public item URL |
| `title` | Listing title |
| `price` / `currency` | Price and `JPY` |
| `status` | `on_sale`, `sold_out`, or `trading` |
| `itemType` | `mercari` or `shops` |
| `brand` / `condition` / `shippingPayer` | Card attributes. Condition is an English label |
| `sellerId` | Public seller id |
| `photoUrl` | Primary photo |
| `createdAt` / `updatedAt` | UTC timestamps |
| `description` / `sellerName` / `likeCount` | Present when detail fetch succeeded |
| `source` | Keyword or URL |
| `isNew` | Unseen listing in monitor mode |
| `scrapedAt` | When the row was parsed |

#### Output example

```json
{
    "itemId": "m10000000001",
    "url": "https://jp.mercari.com/item/m10000000001",
    "title": "Switch game",
    "price": 1300,
    "currency": "JPY",
    "status": "sold_out",
    "itemType": "mercari",
    "brand": "Nintendo Switch",
    "condition": "good",
    "shippingPayer": "seller",
    "sellerId": "100000001",
    "photoUrl": "https://static.mercdn.net/thumb/item/webp/m10000000001_1.jpg",
    "createdAt": "2026-09-22T13:20:12Z",
    "updatedAt": "2026-09-22T17:20:28Z",
    "source": "nintendo switch",
    "isNew": false,
    "detailFetched": false,
    "scrapedAt": "2026-09-22T17:00:00Z"
}
```

### Use cases

- **Japan sold comps** before buying inventory to resell on eBay
- **Brand watch** — newest on-sale cards for a keyword, then a scheduled monitor
- **Price band sourcing** — `priceMin` / `priceMax` in yen
- **Shop vs C2C** — `itemType` separates Mercari Shops from person-to-person listings
- **One-item check** — paste an item URL and read description plus seller rating

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/mercari-japan-scraper").call({
    searchTerms: ["nintendo switch"],
    status: "sold_out",
    maxItems: 40,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("crawloop/mercari-japan-scraper").call(run_input={
    "searchTerms": ["nintendo switch"],
    "status": "sold_out",
    "maxItems": 40,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~mercari-japan-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms":["nintendo switch"],"status":"sold_out","maxItems":40}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call this Actor by its Store name `crawloop/mercari-japan-scraper`.

Example prompts:

- "Run Mercari Japan Scraper for sold Nintendo Switch listings and return price, condition, and URL as JSON"
- "Monitor new on-sale Mercari Japan listings for the keyword 'nike' and summarize only rows with isNew true"
- "Take the Mercari Japan sold prices, then run eBay Sold Listings Scraper for the same product name and compare the comps"

### Suite next step

After a Japan sold sample, run [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) on the same product name for completed eBay prices. For live European fashion inventory, use [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) or [Depop Monitor](https://apify.com/crawloop/depop-monitor). For US sold comps, use [Poshmark Sold Listings Scraper](https://apify.com/crawloop/poshmark-sold-listings-scraper).

### FAQ

#### Does this Mercari Japan scraper include sold prices?

Yes. Set `status` to `sold_out` or `both`. Each row has the listing price in JPY plus `updatedAt`.

#### How does the new-listing monitor work?

`monitorMode` stores seen ids in a named key-value store. The first run only seeds that store. Later runs on the same store name save listings that were not in the cache. Use Apify Scheduler for the repeat.

#### Do I need a proxy?

Leave proxy off. The Actor uses HTTP requests. Enable Apify Proxy only when a run fails because the request was blocked.

#### Is this the official Mercari API?

No. It is an unofficial Mercari Japan scraper for public listings. It does not log in and it does not read private account data.

#### Can I scrape Mercari US with this Actor?

No. Keywords and URLs are for Mercari Japan. US listings are a different site.

### Related Actors

- [Depop Monitor](https://apify.com/crawloop/depop-monitor) — new Depop listings
- [Poshmark Sold Listings Scraper](https://apify.com/crawloop/poshmark-sold-listings-scraper) — Poshmark sold comps
- [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) — completed eBay sales for the same product
- [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper) — live eBay asking prices
- [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) — new listings on Vinted
- [StockX Listings Scraper](https://apify.com/crawloop/stockx-listings-scraper) — lowest ask, highest bid, last sale

# Actor input Schema

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

Keywords on Mercari Japan. Each keyword is one search. With status both, on-sale and sold are separate searches.

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

Search URLs or item URLs. Search-URL filters (keyword, status, sort, price, category, brand) override the fields below for that URL.

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

On sale, sold out, or both. Both runs two searches and applies max items to each.

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

Sort for keyword searches. Search URLs keep their own sort.

## `sortOrder` (type: `string`):

Descending is newest or highest price first.

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

Optional minimum price in yen.

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

Optional maximum price in yen. 0 means no maximum.

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

Cap per keyword and status. A both-status keyword can return up to twice this number.

## `fetchItemDetails` (type: `boolean`):

Open each saved listing for description, category, likes, and seller rating. Item URLs always fetch this page. Shop items that have no detail payload stay as search cards.

## `monitorMode` (type: `boolean`):

Remember seen listing IDs in a named key-value store. The first run seeds silently. Later scheduled runs save only new listings.

## `emitExisting` (type: `boolean`):

Also write the current page on the seed run.

## `monitorStoreName` (type: `string`):

Named key-value store for seen listing IDs. Use a different name for a separate watch.

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

Leave proxy off. Turn on Apify Proxy only if a run is blocked.

## Actor input object example

```json
{
  "searchTerms": [
    "nintendo switch"
  ],
  "status": "on_sale",
  "sortBy": "created_time",
  "sortOrder": "desc",
  "maxItems": 40,
  "fetchItemDetails": false,
  "monitorMode": false,
  "emitExisting": false,
  "monitorStoreName": "mercari-japan-monitor-state",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Default dataset listings.

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

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

```

## MCP server setup

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