# Japan Resale Cross-Market Checker — Yahoo, Mercari, PayPay (`jpmarketdata/japan-resale-cross-market-checker`) Actor

One keyword, three Japanese resale markets, one call: Yahoo! Auctions sold prices, Mercari (sold out / on sale) and PayPay Flea Market. Returns median and quartiles per market plus the cross-market price gap, every number labelled sold or asking. From $0.02 — no subscription. 日本3市場の相場差を1コールで比較。

- **URL**: https://apify.com/jpmarketdata/japan-resale-cross-market-checker.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 keyword analyzed across markets

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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Japan Resale Cross-Market Checker — Yahoo, Mercari, PayPay

**What is this worth in Japan, and where is it cheapest?** One call per keyword prices it on **all three big Japanese resale marketplaces at once** and returns the gap between them.

| Market | What you get | Basis |
|---|---|---|
| [Yahoo! Auctions Japan](https://auctions.yahoo.co.jp/) (ヤフオク) | Closed auctions with at least one bid | **sold** |
| [Mercari Japan](https://jp.mercari.com/) (メルカリ) | Sold-out and/or on-sale listings | **sold** and/or **asking** |
| [PayPay Flea Market](https://paypayfleamarket.yahoo.co.jp/) (PayPayフリマ) | Live listings | **asking** |

Buying the same answer as three separate single-market scrapers costs **$0.06** and leaves you to reconcile three schemas. Here it is **one $0.02 record**, with the markets already lined up next to each other.

### Why the `priceBasis` labels matter more than the numbers

A closed Yahoo! auction is a **realized sale price**. A live PayPay listing is an **asking price** — what a seller hopes for, which nobody has agreed to yet. PayPay does not publish sold listings at all, so the asking price is the only thing that market can honestly supply.

Subtract those two medians without noticing and your "arbitrage margin" is fiction. So:

- every market block carries **`priceBasis`** (`sold` / `asking`) and a plain-English **`priceBasisLabel`**
- every entry of **`comparison.pairs`** is tagged **`basis`**: `sold_vs_sold`, `sold_vs_asking` or `asking_vs_asking`, plus a boolean `sameBasis`
- when Mercari is queried with **both** statuses it is returned as **two separate blocks** (`mercari_sold`, `mercari_on_sale`) rather than one blended median — a single number may only ever have one basis
- `comparison.mixedBasis` and `comparison.note` say out loud when the headline spread crosses bases

`sold_vs_sold` (Yahoo ↔ Mercari sold out) is the pair you can act on. `asking_vs_asking` (Mercari on sale ↔ PayPay) tells you where to buy today. `sold_vs_asking` is context, not margin.

### Pricing — from $0.02 per keyword, no subscription

| Event | Price | When |
|---|---|---|
| Keyword analyzed across markets | **$0.02** | Per keyword, whatever the number of markets |
| Individual listing | **$0.002** | Only if you enable **Include individual listings** |

A default run (1 keyword, 3 markets, summary only) costs **$0.02** and takes about 10 seconds.

**A keyword is only charged when at least two of the selected markets actually returned data** (or the single one, if you selected only one). A "cross-market" record with one market in it is not a comparison, so it is free.

### Input

| Field | Example | Notes |
|---|---|---|
| `keywords` | `["nintendo switch"]` | Japanese usually matches more listings than English. Each keyword costs $0.02 |
| `markets` | `["yahoo_auction","mercari","paypay_flea"]` | Multi-select, all three by default. The price per keyword does not change |
| `mercariStatus` | `"both"` | `both` / `sold_out` (sold comps) / `on_sale` (asking) |
| `maxItemsPerMarket` | `100` | 30–300 listings sampled per market (and per Mercari status) |
| `priceMinJpy` / `priceMaxJpy` | `15000` | Optional price window, applied **identically to all markets** client-side |
| `includeIndividualItems` | `false` | Enable to also get every sampled listing, +$0.002 each |
| `convertToUsd` | `true` | Adds USD stats at the current rate (one FX lookup per run) |

### Output example (`type: "cross_market_summary"`, abridged, measured 2026-07-26)

```json
{
  "type": "cross_market_summary",
  "keyword": "nintendo switch",
  "markets": {
    "yahoo_auction": {
      "market": "yahoo_auction",
      "marketName": "Yahoo! Auctions Japan (closed auctions)",
      "priceBasis": "sold",
      "priceBasisLabel": "Sold — winning bid of an ended auction (bidCount >= 1)",
      "available": true,
      "totalListingsFound": 229986,
      "sampledListings": 50,
      "pricedListings": 50,
      "priceJpy": {"min": 980, "p25": 3405, "median": 4540, "p75": 6520, "max": 62000, "average": 9026},
      "signals": {"soldListings": 50, "unsoldListings": 0, "sellThroughRatioSampled": 1.0,
                  "bidCount": {"min": 1, "median": 1, "max": 1}},
      "sourceUrl": "https://auctions.yahoo.co.jp/closedsearch/closedsearch?p=nintendo+switch&n=50&b=1"
    },
    "mercari_sold":    {"priceBasis": "sold",   "priceJpy": {"median": 4775},  "signals": {"medianDaysToSell": 0}},
    "mercari_on_sale": {"priceBasis": "asking", "priceJpy": {"median": 3474}},
    "paypay_flea":     {"priceBasis": "asking", "priceJpy": {"median": 14200},
                        "signals": {"likeCount": {"median": 4}}}
  },
  "comparison": {
    "marketsCompared": ["yahoo_auction", "mercari_sold", "mercari_on_sale", "paypay_flea"],
    "medianJpy": {"yahoo_auction": 4540, "mercari_sold": 4775, "mercari_on_sale": 3474, "paypay_flea": 14200},
    "listingsFound": {"yahoo_auction": 229986, "mercari_sold": 15000, "mercari_on_sale": 15000, "paypay_flea": 149999},
    "comparable": true,
    "cheapestMarket": "mercari_on_sale", "priciestMarket": "paypay_flea",
    "spreadJpy": 10726, "spreadPct": 308.8, "spreadBasis": "asking_vs_asking",
    "mixedBasis": true,
    "pairs": [
      {"from": "yahoo_auction", "to": "mercari_sold", "basis": "sold_vs_sold", "sameBasis": true,
       "diffJpy": 235, "diffPct": 5.2, "cheaperMarket": "yahoo_auction"},
      {"from": "mercari_on_sale", "to": "paypay_flea", "basis": "asking_vs_asking", "sameBasis": true,
       "diffJpy": 10726, "diffPct": 308.8, "cheaperMarket": "mercari_on_sale"}
    ],
    "note": "Bases are mixed. …"
  },
  "marketsWithData": ["mercari", "paypay_flea", "yahoo_auction"],
  "checkedAt": "2026-07-26T06:21:11+00:00"
}
````

With `includeIndividualItems: true` you additionally get one record per listing, each tagged with `market`, `marketEntry` and `priceBasis`.

### Use cases

- **Cross-market sourcing** — buy on the cheapest market, sell on the dearest; the `sold_vs_sold` pair is the one with a realized price on both ends
- **Proxy buying & export** — quote a Japanese client a defensible price band per marketplace in one request
- **Repricing** — schedule the Actor and watch the median per market move over time
- **Deciding where to list** — `listingsFound` is the supply you would compete with, `signals.sellThroughRatioSampled` (Yahoo) and `signals.medianDaysToSell` (Mercari) are the liquidity
- **Market research** — how big is the asking-vs-sold premium in Japan, per category

### Notes & limits

- **A broad keyword compares different products, not different markets.** "nintendo switch" matched a console-heavy mix on PayPay and an accessory-heavy mix on Mercari, which is why the measured spread above is 308% — that number is real, but it is a product-mix artifact, not arbitrage. Narrow the keyword, or set `priceMinJpy` / `priceMaxJpy`; with a ¥15,000 floor the four medians tighten to ¥16,990–¥31,000, which is the actual console band
- Check **`pricedListings`** before trusting a median: a tight price window can leave a market with very few listings
- **`totalListingsFound` is what each site reports for the keyword** and is never rewritten by the client-side price window; each site also counts differently (Mercari caps its hit count at 15,000)
- **PayPay Flea Market can never return sold prices** — they are not server-rendered. Nothing in this Actor pretends otherwise
- Yahoo's sold filter is `bidCount >= 1`; ended auctions that received no bid are sampled but excluded from the price statistics (`signals.unsoldListings`)
- Mercari's `medianDaysToSell` uses `updated - created`, which also moves on price edits, so it skews low — read it as a liquidity signal, not an exact time-to-sale
- **A market that fails does not fail the run**: it comes back as `available: false` with an `error`, and the remaining markets are still compared. Only a keyword where *every* market failed fails the run
- Read-only, no login, no browser. Requests are throttled to one per 1.5 s, and Yahoo! Auctions and PayPay Flea Market are queried **sequentially** because they share one backend
- No personal data is collected — sellers are excluded from every record

***

### 日本語ガイド

**キーワード1件につき、ヤフオク(落札)・メルカリ・PayPayフリマの3市場の相場を1レコードで比較する Actor です。**

- **概要**: 各市場の価格統計(最安・p25・中央値・p75・最高・平均)に加えて、**市場間の価格差**(`comparison`)を返します。単体スクレイパー3本を買うと $0.06 かかり、スキーマの突き合わせも自分でやることになりますが、これは **$0.02 の1レコード**で揃った状態で返します。
- **価格の「基準」が最重要**: ヤフオクの落札価格は**実際に成約した価格(sold)**、PayPayフリマは\*\*出品価格(asking)\*\*です(PayPay は売却済み商品を公開していないため asking しか取得できません)。この2つを無自覚に引き算すると、存在しない利ざやが出ます。そこで全ブロックに `priceBasis`(`sold` / `asking`)、全ペアに `basis`(`sold_vs_sold` / `sold_vs_asking` / `asking_vs_asking`)を必ず付けています。**メルカリで「両方」を選んだ場合は `mercari_sold` と `mercari_on_sale` の2ブロックに分けて返します**(1つの中央値が2つの基準を混ぜないため)。
- **使い方**: `keywords` にキーワード(日本語の方がヒットしやすい)、`markets` で市場を選択(既定は3市場)、`mercariStatus` でメルカリの売り切れ/販売中を選びます。`priceMinJpy` / `priceMaxJpy` は**3市場に同一条件で**適用されるので、付属品や大量セット出品を除いて比較したいときに使ってください。個別明細が必要なときだけ `includeIndividualItems` を ON にします。
- **料金**: キーワード1件 **$0.02**(市場を何個選んでも同額)、個別明細は **$0.002/件**(既定 OFF なので既定実行は $0.02 固定)。**選択した市場のうち2市場以上(1市場だけ選んだ場合は1市場)からデータが返らなかったキーワードには課金されません** — 1市場だけの結果は「横断比較」ではないためです。サブスクリプション不要です。
- **注意**: 広いキーワードは「市場の違い」ではなく「商品構成の違い」を比較してしまいます(実測: `nintendo switch` は PayPay が本体中心・メルカリが付属品中心になり、価格差 308% と出ました)。キーワードを絞るか価格帯を指定してください(¥15,000 以上に絞ると4つの中央値は ¥16,990〜¥31,000 に収束し、本体の実勢価格帯になります)。中央値を読む前に `pricedListings`(統計に使われた件数)を確認してください。
- **その他**: ヤフオクの sold 判定は入札1件以上、メルカリの `medianDaysToSell` は出品〜更新の日数(値下げでも動くため短めに出ます)。1市場が失敗しても `available: false` として残り、他市場の比較は続行します(全市場×全キーワードが失敗したときだけ run を失敗させます)。ブラウザ不使用・ログイン不要・1.5秒に1リクエスト、ヤフオクと PayPayフリマは同一基盤のため逐次取得しています。個人情報は取得しません。

# Actor input Schema

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

One or more search keywords, compared across every selected market. Japanese usually matches more listings than English (Nintendo Switch, ポケモンカード, ロレックス). Each keyword costs $0.02.

## `markets` (type: `array`):

Which Japanese marketplaces to price. Yahoo! Auctions returns SOLD prices (ended auctions with at least one bid), Mercari can return either, PayPay Flea Market can only return ASKING prices (it does not publish sold listings). The price of a keyword is the same whichever markets you pick.

## `mercariStatus` (type: `string`):

Which Mercari listings to price. 'Sold out' gives real sold comps (comparable with Yahoo! Auctions), 'On sale' gives asking prices (comparable with PayPay Flea Market), 'Both' returns them as two separate blocks so each keeps a single, honest price basis.

## `maxItemsPerMarket` (type: `integer`):

How many listings to sample per market (and per Mercari status) before computing the statistics. Larger samples are steadier but slower: Yahoo returns 50 per request, Mercari 120, PayPay 100, and requests are throttled to one per 1.5 s.

## `priceMinJpy` (type: `integer`):

Drop listings priced below this before computing the statistics. Applied identically to every market so the medians stay comparable. Useful to cut accessory/junk listings out of a keyword.

## `priceMaxJpy` (type: `integer`):

Drop listings priced above this before computing the statistics. Applied identically to every market. Useful to cut bundles and lot sales out of a keyword.

## `includeIndividualItems` (type: `boolean`):

Off by default: a run costs a flat $0.02 per keyword, whatever the number of markets. Enable to also get every sampled listing from every market (title, price, status, condition, URL) at +$0.002 per listing.

## `convertToUsd` (type: `boolean`):

Adds USD statistics next to JPY using the current exchange rate (open.er-api.com, looked up once per run).

## Actor input object example

```json
{
  "keywords": [
    "nintendo switch"
  ],
  "markets": [
    "yahoo_auction",
    "mercari",
    "paypay_flea"
  ],
  "mercariStatus": "both",
  "maxItemsPerMarket": 100,
  "includeIndividualItems": false,
  "convertToUsd": true
}
```

# 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 = {
    "keywords": [
        "nintendo switch"
    ],
    "markets": [
        "yahoo_auction",
        "mercari",
        "paypay_flea"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/japan-resale-cross-market-checker").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 = {
    "keywords": ["nintendo switch"],
    "markets": [
        "yahoo_auction",
        "mercari",
        "paypay_flea",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/japan-resale-cross-market-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "nintendo switch"
  ],
  "markets": [
    "yahoo_auction",
    "mercari",
    "paypay_flea"
  ]
}' |
apify call jpmarketdata/japan-resale-cross-market-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jpmarketdata/japan-resale-cross-market-checker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Japan Resale Cross-Market Checker — Yahoo, Mercari, PayPay",
        "description": "One keyword, three Japanese resale markets, one call: Yahoo! Auctions sold prices, Mercari (sold out / on sale) and PayPay Flea Market. Returns median and quartiles per market plus the cross-market price gap, every number labelled sold or asking. From $0.02 — no subscription. 日本3市場の相場差を1コールで比較。",
        "version": "0.1",
        "x-build-id": "fW1FZCU027rO03WKy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jpmarketdata~japan-resale-cross-market-checker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jpmarketdata-japan-resale-cross-market-checker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jpmarketdata~japan-resale-cross-market-checker/runs": {
            "post": {
                "operationId": "runs-sync-jpmarketdata-japan-resale-cross-market-checker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jpmarketdata~japan-resale-cross-market-checker/run-sync": {
            "post": {
                "operationId": "run-sync-jpmarketdata-japan-resale-cross-market-checker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "One or more search keywords, compared across every selected market. Japanese usually matches more listings than English (Nintendo Switch, ポケモンカード, ロレックス). Each keyword costs $0.02.",
                        "default": [
                            "nintendo switch"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "markets": {
                        "title": "Markets to compare",
                        "type": "array",
                        "description": "Which Japanese marketplaces to price. Yahoo! Auctions returns SOLD prices (ended auctions with at least one bid), Mercari can return either, PayPay Flea Market can only return ASKING prices (it does not publish sold listings). The price of a keyword is the same whichever markets you pick.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "yahoo_auction",
                                "mercari",
                                "paypay_flea"
                            ],
                            "enumTitles": [
                                "Yahoo! Auctions Japan — sold (ヤフオク落札)",
                                "Mercari Japan (メルカリ)",
                                "PayPay Flea Market — asking (PayPayフリマ)"
                            ]
                        },
                        "default": [
                            "yahoo_auction",
                            "mercari",
                            "paypay_flea"
                        ]
                    },
                    "mercariStatus": {
                        "title": "Mercari listing status",
                        "enum": [
                            "both",
                            "sold_out",
                            "on_sale"
                        ],
                        "type": "string",
                        "description": "Which Mercari listings to price. 'Sold out' gives real sold comps (comparable with Yahoo! Auctions), 'On sale' gives asking prices (comparable with PayPay Flea Market), 'Both' returns them as two separate blocks so each keeps a single, honest price basis.",
                        "default": "both"
                    },
                    "maxItemsPerMarket": {
                        "title": "Max listings sampled per market",
                        "minimum": 30,
                        "maximum": 300,
                        "type": "integer",
                        "description": "How many listings to sample per market (and per Mercari status) before computing the statistics. Larger samples are steadier but slower: Yahoo returns 50 per request, Mercari 120, PayPay 100, and requests are throttled to one per 1.5 s.",
                        "default": 100
                    },
                    "priceMinJpy": {
                        "title": "Minimum price (JPY, optional)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop listings priced below this before computing the statistics. Applied identically to every market so the medians stay comparable. Useful to cut accessory/junk listings out of a keyword."
                    },
                    "priceMaxJpy": {
                        "title": "Maximum price (JPY, optional)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop listings priced above this before computing the statistics. Applied identically to every market. Useful to cut bundles and lot sales out of a keyword."
                    },
                    "includeIndividualItems": {
                        "title": "Include individual listings",
                        "type": "boolean",
                        "description": "Off by default: a run costs a flat $0.02 per keyword, whatever the number of markets. Enable to also get every sampled listing from every market (title, price, status, condition, URL) at +$0.002 per listing.",
                        "default": false
                    },
                    "convertToUsd": {
                        "title": "Convert prices to USD",
                        "type": "boolean",
                        "description": "Adds USD statistics next to JPY using the current exchange rate (open.er-api.com, looked up once per run).",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
