# Yahoo! Auctions Japan Scraper (`scrapyx/yahoo-auctions-japan-scraper`) Actor

Listings from Yahoo! Auctions Japan (ヤフオク!): current and buy-now price in yen, bids, end time, condition, shipping, seller, category, image. Search by keyword or category with price, condition and sort filters; includes or excludes Yahoo! Flea Market fixed-price items. No login.

- **URL**: https://apify.com/scrapyx/yahoo-auctions-japan-scraper.md
- **Developed by:** [Ibnu Adzim](https://apify.com/scrapyx) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 results

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

## Yahoo! Auctions Japan Scraper

Listings from **Yahoo! Auctions Japan (ヤフオク!)**, Japan's largest auction
marketplace: current price and buy-now price in yen, start price, bids, time
left and end time, condition, postage and free-shipping flag, seller id,
category and category path, image, and the listing URL — with Yahoo! Flea
Market (フリマ) fixed-price listings included or excluded on request.

HTTP only, no login, no key, no browser. 100 listings per page.

### What it is for

- **Price research** — sold-out Switch consoles, film cameras, trading cards:
  what is asked and what is bid, right now.
- **Sniping lists** — `sortBy: endingSoon` with a price band.
- **Reseller sourcing** — `condition: unused`, `buyNowOnly`, `freeShippingOnly`.

### Input

| field | what it does |
| --- | --- |
| `searchTerms` | Keywords (Japanese or English). |
| `categoryIds` | Yahoo category ids (`auccat`), alone or with terms. |
| `priceMin/Max`, `condition`, `newListingsOnly`, `sortBy` | Filters the site applies. |
| `buyNowOnly`, `freeShippingOnly` | Filters applied locally (see below). |
| `includeFleaMarket` | Which of the site's two catalogues to read (see below). |
| `maxItems`, `maxConcurrency`, `minRequestInterval`, `proxyConfiguration` | Limits. |

Targets are `searchTerms` × `categoryIds`; each gets its own `SEARCH_SUMMARY`.

### Five things about this site worth knowing before you trust a run

#### 1. The first request of a session sees half the catalogue

A cookie-less request for "nintendo switch" answers 36,791 results. The same
request again, once the site's browser-id cookie is set, answers 77,080 —
the extra 40,000 are Yahoo! Flea Market fixed-price listings. A crawler that
paginates from its first response gets page 1 from one catalogue and page 2
from the other. This Actor warms every session with one discarded request
before the first real page (`includeFleaMarket: true`, the default), or
clears cookies before every request to get the auctions-only catalogue
deterministically (`false`). The summary reports `sessionWarmups`, the site's
three totals (all / auctions / fixed price), and `fleaMarketRows`.

#### 2. The site stops at 15,000 rows and then says "0件"

Offset 14,901 serves 100 cards; offset 15,001 serves none and every count on
the page reads 0 — for a search that had 729,000 results a page earlier. The
Actor never asks past the wall, reports `wallReached: true`, and keeps the
real total. Narrow by category, price or condition to see more.

#### 3. Some URL filters are honoured, some are silently ignored

Honoured (each answered an impossible value with nothing): price band,
condition (`istatus`), category, recent-only, sort. Ignored (the total never
moved): the buy-now-only, free-shipping-only and sold-items parameters the
site's own UI generates. `buyNowOnly` and `freeShippingOnly` are therefore
applied **locally** from the card flags and counted in `filteredOut`; sold
items are not offered. An unknown category id is answered with an HTTP 500
(reported as `upstream_error`), an unknown keyword with a clean 404
(`no_matches`), an empty keyword with a landing page (refused here).

#### 4. Condition ids were verified, not assumed

`istatus=1` returns 28,262 rows, every one labelled 未使用; `istatus=2` returns
48,825 — exactly the remainder. So `unused` is 1 and `used` is 2. The finer
used grades (3/4/5) are not exposed. `istatus=99` is silently ignored by the
site, which is why the input is an enum.

#### 5. Featured cards repeat, and the listing's fields are scattered

Page 1 carries three featured (paid) cards that appear again on page 2;
flagged `isFeatured` and de-duplicated. A card's `data-auction-*` attributes
are split across its image link, title link and watch button — end time,
start price, buy-now price and seller live on the button. All are merged.

### Output

- **`LISTING`** — `auctionId`, `url`, `title`, `currentPrice`, `buyNowPrice`,
  `startPrice`, `currency`, `bids`, `timeLeft`, `endsAt` (UTC), `condition`,
  `postage`, `freeShipping`, `isFleaMarket`, `isShoppingItem`, `easyPayment`,
  `categoryId`, `categoryPath`, `sellerId`, `imageUrl`, `isFeatured`,
  `query`, `resultPosition`, `pageFound`.
- **`SEARCH_SUMMARY`** — `totalResults`, `totalAuctions`, `totalFixedPrice`,
  `listingsReturned`, `pagesFetched`, `sessionWarmups`, `stoppedReason`,
  `wallReached`, `duplicateRowsDropped`, `featuredRows`, `filteredOut`,
  `fleaMarketRows`, `buyNowRows`, `freeShippingRows`, `minPrice`, `maxPrice`.
- **`ERROR`** — `invalid_input`, `upstream_error`, `page_shape_changed`,
  `fetch_failed`, with detail.

### Known limits

- Flea-market rows have no bids, time left, end time or seller id — they are
  fixed-price listings, and the search card does not carry those for them.
- `condition` is shown on the card for only some listings; the filter is
  the site's, the label is emitted when present.
- Sold / closed auctions are a different search on the site and are not
  fetched.
- Connections from outside Japan occasionally stall at the TCP handshake;
  the Actor retries on a fresh session.

# Actor input Schema

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

What to search for on ヤフオク! - 'nintendo switch', 'ライカ M6', 'ポケモンカード'. Japanese or English. Each term is its own target (combined with each category id). An unknown term returns a clean 'no results'.

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

Yahoo category ids (auccat), e.g. 2084315794 for Nintendo Switch consoles - the number in a category URL. Combined with each search term; on their own they list the whole category. An unknown id is refused by the site with an HTTP 500 and reported as bad\_request.

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

Lowest current price in yen.

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

Highest current price in yen.

## `condition` (type: `string`):

Item condition as the site filters it. Verified: 'unused' rows all carry the 未使用 label; 'used' is exactly the remainder.

## `newListingsOnly` (type: `boolean`):

Only listings the site marks as new arrivals (its 'new=1' filter).

## `buyNowOnly` (type: `boolean`):

Keep only listings with a buy-now price. Applied locally from the card - the site's own fixed-price URL filter is silently ignored.

## `freeShippingOnly` (type: `boolean`):

Keep only listings flagged 送料無料. Applied locally - the site's free=1 parameter is silently ignored.

## `includeFleaMarket` (type: `boolean`):

On by default: the catalogue a browser sees, with Yahoo! フリマ fixed-price listings (roughly half of all results). Off: the auctions-only catalogue the site serves to a cookie-less request. The two are different result sets with different totals; each row carries isFleaMarket.

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

Listing order. Only these values are accepted; the site silently falls back to relevance on anything else.

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

Overall cap on LISTING rows across every target. 100 per page; the site stops serving at 15,000 rows per search (wallReached) - narrow by category, price or condition to see more.

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

Parallel requests across targets. Pages are ~1.3 MB each.

## `minRequestInterval` (type: `integer`):

Politeness delay between request starts. The site tolerated 15 unpaced requests; 0.5 s is the default.

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

Optional. No anti-bot layer was observed. Connections from outside Japan sometimes stall at the TCP handshake and are retried; enable Apify's free datacenter proxy if a cloud run reports fetch\_failed on page 1.

## Actor input object example

```json
{
  "searchTerms": [
    "nintendo switch"
  ],
  "condition": "any",
  "newListingsOnly": false,
  "buyNowOnly": false,
  "freeShippingOnly": false,
  "includeFleaMarket": true,
  "sortBy": "relevance",
  "maxItems": 200,
  "maxConcurrency": 2,
  "minRequestInterval": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `items` (type: `string`):

One row per scraped record. See the dataset's default view for field definitions.

# 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("scrapyx/yahoo-auctions-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("scrapyx/yahoo-auctions-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 scrapyx/yahoo-auctions-japan-scraper --silent --output-dataset

```

## MCP server setup

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