# Mercari Sold Price Scraper - Yahoo Auctions & PayPay Comps (`datamill/mercari-sold-price-scraper`) Actor

Get verified sold prices from Mercari, Yahoo Auctions and PayPay Flea Market. Real Japanese resale comps with median, min and max.

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

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Japan Resale Price Checker do?

**What did it actually sell for in Japan?** This Actor answers that in a single call. For any keyword it pulls recent **verified sold listings** — not asking prices — from Japan's three largest secondhand marketplaces and returns one unified price analysis with min, median, max and every underlying comp.

- **[Mercari](https://jp.mercari.com) (メルカリ)** — Japan's #1 C2C app, sold-out filter
- **[Yahoo Auctions](https://auctions.yahoo.co.jp) (ヤフオク)** — closed auctions with bid counts
- **[PayPay Flea Market](https://paypayfleamarket.yahoo.co.jp) (PayPayフリマ)** — completed sales

Sold comps are what pricing decisions actually need. Active listings tell you what sellers *hope* to get; this Actor tells you what buyers *paid*. Run it in the Console, hit it via **API**, **schedule** daily price tracking, or let an AI agent call it through **MCP**.

### Why use Japan Resale Price Checker?

- **Proxy buying and export arbitrage** — source in Japan, sell on eBay or StockX. Know your true cost basis before you bid.
- **Reselling and sourcing** — trading cards, sneakers, watches, cameras, anime figures, vintage fashion, luxury bags.
- **Price your own listings** — see the real clearing price instead of guessing from what is currently listed.
- **Pricing tools and AI agents** — one call returns a complete, structured comp report.
- **Trend tracking** — schedule a keyword daily and chart how its median moves.

#### Why cross-market matters

The same search clears at very different prices per platform. A live run on a Pokémon card query returned these medians across 90 sold listings:

| Marketplace | Median sold price |
|---|---|
| Yahoo Auctions | ¥82,000 |
| Mercari | ¥80,750 |
| PayPay Flea Market | ¥29,050 |

That spread is where sourcing margin lives — and you only see it by querying all three at once. Part of any gap reflects a different mix of items per platform, so narrow your keyword (card number, model code, grade) before treating a spread as pure arbitrage.

**Every listing returned is verified sold.** Items still on sale are excluded, and auctions that closed without a single bid are dropped, so asking prices never leak into your statistics.

### How to use Japan Resale Price Checker

1. Click **Try for free**.
2. Enter a **Search keyword**. Japanese matches the most inventory (`ポケモンカード リザードンex SAR`), but brands and model numbers in Latin script work too (`Nintendo Switch 2`, `Rolex Submariner`).
3. Optionally add an **Exclude keyword** (`ジャンク 傷あり`) to strip damaged goods.
4. Optionally set a **USD/JPY rate** to get the summary in dollars as well.
5. Click **Start**, then read the summary in the **Output** tab.

### Input

| Field | Type | Description |
|---|---|---|
| `keyword` | string | What to price-check |
| `excludeKeyword` | string | Words to exclude (Mercari) |
| `marketplaces` | array | Any of `mercari`, `yahoo_auctions`, `paypay_flea` |
| `maxPerMarketplace` | integer | Sold listings pulled per marketplace, 5–100 |
| `includeListings` | boolean | Return every comp alongside the statistics |
| `usdJpyRate` | integer | Optional USD conversion rate |

```json
{
  "keyword": "ポケモンカード リザードンex SAR",
  "maxPerMarketplace": 40,
  "usdJpyRate": 148,
  "includeListings": true
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
  "keyword": "ポケモンカード リザードンex SAR",
  "totalComps": 90,
  "overall": { "count": 90, "minYen": 1150, "maxYen": 350000, "medianYen": 57000, "meanYen": 65683 },
  "byMarketplace": {
    "mercari": { "count": 30, "minYen": 3800, "maxYen": 350000, "medianYen": 80750 },
    "yahoo_auctions": { "count": 30, "minYen": 1150, "maxYen": 170000, "medianYen": 82000 },
    "paypay_flea": { "count": 30, "minYen": 1200, "maxYen": 170000, "medianYen": 29050 }
  },
  "overallUsd": { "usdJpyRate": 148, "minUsd": 7.77, "medianUsd": 385.14, "maxUsd": 2364.86 },
  "listings": [
    {
      "marketplace": "yahoo_auctions",
      "title": "ポケモンカード メガリザードンX ex SAR",
      "priceYen": 1200,
      "status": "sold",
      "soldAt": "2026-07-28T23:04:40+09:00",
      "bidCount": 3,
      "url": "https://page.auctions.yahoo.co.jp/jp/auction/z658431892"
    }
  ]
}
```

### Data you can extract

| Field | Description |
|---|---|
| `overall` | count, `minYen`, `maxYen`, `medianYen`, `meanYen` across all marketplaces |
| `byMarketplace` | The same statistics computed separately per marketplace |
| `overallUsd` | Min / median / max converted at your supplied rate |
| `listings[].title` | Item title as listed |
| `listings[].priceYen` | The price it actually sold for |
| `listings[].marketplace` | `mercari`, `yahoo_auctions` or `paypay_flea` |
| `listings[].url` | Direct link to the sold listing |
| `listings[].soldAt` | When the sale completed |
| `listings[].bidCount` | Bids received (Yahoo Auctions) |
| `listings[].condition` | Item condition where the marketplace reports it |
| `listings[].thumbnailUrl` | Item photo |

### How much does it cost to check Japanese resale prices?

Pay per event, charged once per keyword analysed — regardless of how many comps come back:

| Event | Price |
|---|---|
| Price check (all marketplaces) | $0.05 |

Checking 100 items costs **$5**. A daily job tracking 50 keywords runs about **$75/month**. Apify's free tier includes $5 of monthly usage, which covers roughly 100 checks before you pay anything. A single check can return up to 300 sold comps.

### Tips

- **Narrow keywords give tighter, more usable medians.** `リザードンex SAR 201/165` beats `ポケモンカード`.
- Use `excludeKeyword` (`ジャンク 傷あり コピー`) to strip damaged goods and reproductions out of your comps.
- **Median beats mean here** — a single graded or sealed outlier will drag the average far from reality.
- Raise `maxPerMarketplace` for a stable median on high-volume items; lower it for fast, cheap spot checks.
- Comparing across time? Keep the keyword byte-identical so you are measuring the market, not your query.

### FAQ

**Is scraping these marketplaces legal?**
The Actor uses public search endpoints only — no login, no paywall bypass, modest request volume per run. Scraping publicly available data is generally lawful in many jurisdictions, but you are responsible for each source site's terms and your local regulations. Prices are historical sold data, not an appraisal or investment advice.

**Are these really sold prices?**
Yes. Mercari is filtered to sold-out status, Yahoo Auctions to closed auctions, and PayPay Flea Market to its sold filter — and each listing's status is re-checked in the response before it is counted. Auctions that ended with zero bids never sold, so they are discarded.

**Why does one marketplace return fewer comps?**
Thin categories simply have fewer recent sales there. The statistics stay valid; `count` per marketplace tells you how much weight each median deserves.

**Can you add another marketplace or currency?**
Use the **Issues** tab — Rakuma and Suruga-ya are candidates, and custom Japanese data sources can be built on request.

### Other Actors by Data Mill

- [YouTube Transcript Scraper](https://apify.com/datamill/youtube-transcript-scraper) — bulk transcripts, subtitles and RAG chunks from videos, playlists and channels
- [Japan Hotel Scraper](https://apify.com/datamill/jalan-hotel-scraper) — Jalan rates, ratings and plans, including ryokan the global OTAs never list
- [Japan Horse Racing Scraper](https://apify.com/datamill/netkeiba-race-scraper) — JRA race cards, live odds and results with full payouts

All of them return clean English-keyed JSON and are maintained the same way.

# Actor input Schema

## `keyword` (type: `string`):

What to price-check. Japanese keywords match the most listings (e.g. `ポケモンカード リザードンex SAR`, `Nintendo Switch 2`, `ルイヴィトン バッグ`). Brand and model numbers work well.

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

Words to exclude (Mercari only), e.g. `ジャンク 傷あり` to skip damaged goods.

## `marketplaces` (type: `array`):

Which marketplaces to query.

## `maxPerMarketplace` (type: `integer`):

How many recent sold listings to pull from each marketplace.

## `includeListings` (type: `boolean`):

Include every sold listing (title, price, URL, thumbnail) alongside the aggregate statistics.

## `usdJpyRate` (type: `integer`):

Optional. Provide a USD/JPY rate to also get prices converted to USD (e.g. 148).

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

Enable Apify Proxy if you run many checks and hit rate limits.

## Actor input object example

```json
{
  "keyword": "ポケモンカード リザードンex SAR",
  "marketplaces": [
    "mercari",
    "yahoo_auctions",
    "paypay_flea"
  ],
  "maxPerMarketplace": 40,
  "includeListings": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "keyword": "ポケモンカード リザードンex SAR",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datamill/mercari-sold-price-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 = {
    "keyword": "ポケモンカード リザードンex SAR",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("datamill/mercari-sold-price-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 '{
  "keyword": "ポケモンカード リザードンex SAR",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call datamill/mercari-sold-price-scraper --silent --output-dataset

```

## MCP server setup

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