# Yahoo! Fleamarket Japan Scraper (Yahoo!フリマ / PayPayフリマ) (`tokyo-select-jp/yahoo-fleamarket-search-scraper`) Actor

Scrape Yahoo! Fleamarket (Yahoo!フリマ, formerly PayPay フリマ) — Japan's second-largest C2C marketplace. Search by keyword, brand or category; get normalized listings (price JPY, size, condition, seller, images) with optional item details. No browser, no login. JP Data Works series.

- **URL**: https://apify.com/tokyo-select-jp/yahoo-fleamarket-search-scraper.md
- **Developed by:** [JP Data Works](https://apify.com/tokyo-select-jp) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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! Fleamarket Japan Scraper (Yahoo!フリマ / PayPayフリマ)

Scrape **[Yahoo! Fleamarket](https://paypayfleamarket.yahoo.co.jp/) (Yahoo!フリマ, formerly PayPay フリマ)** — Japan's second-largest consumer-to-consumer marketplace, run by LY Corporation on the Yahoo! Auctions platform — by **keyword, brand and category**, and get clean JSON / CSV: price in JPY (shipping always included), normalized size, listing time, seller id and images. Optionally open each item page for **condition (商品の状態), colour, gender, seller rating, likes, shipping and the full gallery**. **No browser, no login, no proxy needed.** Part of the **JP Data Works** series of Japanese marketplace scrapers (Mercari, Trefac, KOMEHYO …) that share one output shape so results can be merged.

**Keywords:** Yahoo フリマ スクレイピング · PayPay フリマ scraper · Yahoo! Fleamarket Japan API · Japanese C2C marketplace data · used clothing, sneakers, trading cards, figures, cameras · resale sourcing (eBay, Grailed, Depop) · price monitoring · new-listing alerts.

### What you get

One row per listing:

- `itemId`, `url`, `title`, `brand`, `brandId`, `categoryId`, `categoryPath`
- `priceJpy` (shipping included — on Yahoo! Fleamarket the seller always pays shipping), `status`
- `sizeRaw` / `sizeNorm` / `size` (`W32`, `L`, `JP3`, `26.5cm`, `FREE` — from the item page, or guessed from the title on list-only runs)
- `sellerId`, `listedAt`, `endsAt`, `labels`, `imageUrl` / `imageUrls` (full size), `fetchedAt`, `keyword`, `search`

With **Enrich with item pages** each item additionally has `conditionRank` 6 (新品、未使用) … 1 (全体的に状態が悪い) and `conditionLabel`, `color`, `gender`, the full `categoryPath` / `categoryIds`, `sellerName`, `sellerRatingCount`, `sellerVerified`, `sellerBadges`, `likes`, `shippingMethod` / `shippingDuration` / `shippingFromArea`, `description`, every photo and `status: "sold"` for sold-out items.

#### Example item (enriched)

```json
{
  "source": "yahoo-fleamarket",
  "itemId": "z716028686",
  "url": "https://paypayfleamarket.yahoo.co.jp/item/z716028686",
  "title": "KAPITAL キャピタル 12oz デニム CACTUS カバーオール メモリアル刺繍 限定モデル XL ワークジャケット",
  "brand": "KAPITAL",
  "brandId": "106095",
  "priceJpy": 77000,
  "status": "on_sale",
  "sizeRaw": "LL（XL）",
  "sizeNorm": { "kind": "alpha", "value": "XL" },
  "size": "XL",
  "conditionRank": 6,
  "conditionLabel": "未使用",
  "categoryId": "36588",
  "categoryPath": "ファッション > メンズファッション > ジャケット > カバーオール",
  "gender": "メンズ / レディース",
  "color": "ブルー系",
  "sellerId": "p6125728",
  "sellerName": "KEI",
  "sellerRatingCount": 1543,
  "sellerVerified": true,
  "sellerBadges": ["安心発送", "取引実績50+"],
  "shippingMethod": "おてがる配送（日本郵便）",
  "shippingDuration": "2〜3日で発送",
  "shippingFromArea": "大阪府",
  "shippingPayer": "seller",
  "likes": 0,
  "imageUrl": "https://auctions.c.yimg.jp/images.auctions.yahoo.co.jp/image/dr000/auc0211/users/…/i-img1200x1200-….jpg",
  "listedAt": "2026-11-01T14:40:00.000Z",
  "fetchedAt": "2026-11-02T02:08:20.000Z",
  "detailFetchedAt": "2026-11-02T02:08:23.115Z",
  "keyword": "デニム",
  "search": { "label": "デニム brand:KAPITAL#106095 メンズファッション>ジャケット ¥–50000", "mode": "search", "brandId": "106095", "categoryId": "36583", "url": "https://paypayfleamarket.yahoo.co.jp/search/%E3%83%87%E3%83%8B%E3%83%A0?brandIds=106095&categoryIds=36583" }
}
```

Without enrichment the detail fields are `null` / `[]`, so the dataset always has the same columns.

### Output modes — listings or a market summary

`outputMode` chooses what the dataset contains:

- **`items`** (default) — one row per listing, as above.
- **`summary`** — one **market-summary row per search** instead of the listings. The Actor still walks the search pages (up to `maxItemsPerSearch` listings, with `enrichDetail` if set), but stores only the aggregate — so a run that answers "what does X go for on Yahoo! Fleamarket?" costs one `summary` event per search rather than hundreds of result events.
- **`both`** — the listings plus the summary row.

A summary row (`recordType: "summary"`) has the same shape in every JP Data Works Actor, so you can put several sites side by side:

```json
{
  "recordType": "summary",
  "source": "yahoo-fleamarket",
  "search": { "label": "…", "url": "…", "…": "the resolved search parameters" },
  "fetchedAt": "2026-11-02T03:00:00.000Z",
  "sampleSize": 180, "totalOnSite": 1243, "scanned": 190, "filteredOut": 10, "withDetail": 0,
  "status": { "on_sale": 180, "sold": 0, "unknown": 0 },
  "price": { "count": 180, "min": 3300, "p25": 9800, "median": 16500, "mean": 19840, "p75": 25300, "max": 128000, "stddev": 15210 },
  "priceOnSale": { "…": "same statistics for on-sale listings" }, "priceSold": { "…": "and for sold ones (sites that list them)" },
  "priceHistogram": { "bucketJpy": 10000, "buckets": [ { "fromJpy": 0, "toJpy": 10000, "count": 46 }, "…" ] },
  "conditionRank": { "6": 12, "5": 40, "4": 71, "3": 30, "unknown": 27 }, "conditionLabels": { "…": "the site's own labels" },
  "sizes": { "M": 48, "L": 41, "W32": 12, "…": 0 }, "sizeKinds": { "alpha": 120, "waist": 30, "numeric": 20, "unknown": 10 },
  "brands": { "KAPITAL": 180 }, "categories": { "メンズ > ジャケット/アウター": 95, "…": 0 }, "gender": { "mens": 170, "unknown": 10 },
  "listed": { "last24h": 9, "last7d": 41, "last30d": 120 }, "sold": null,
  "cheapest": [ { "itemId": "…", "title": "…", "url": "…", "priceJpy": 3300, "conditionRank": 4, "size": "M", "status": "on_sale" }, "…" ],
  "cheapestGoodCondition": [ "… cheapest with condition rank ≥ 4 …" ],
  "newest": [ "… most recently listed (sites that expose listing times) …" ]
}
```

Yahoo! Fleamarket cards carry the listing time, so `listed` (last 24 h / 7 d / 30 d) and `newest` are filled — a cheap way to measure how fast a brand is being listed. Sold listings are not searchable (robots.txt), so `priceSold` is empty.

### Input

- **`keywords`** — one search per keyword.
- **`searches`** — structured: objects with any of `keyword`, `brand` / `brandId`, `categoryPath` / `categoryId`, `priceMinJpy`, `priceMaxJpy`, `conditionMin`, `listedAfter`, `excludeWords`, `sellerId`.

Top-level `priceMinJpy`, `priceMaxJpy`, `conditionMin`, `listedAfter`, `excludeWords` are defaults for every keyword and search.

| Field | Type | Default | Notes |
|---|---|---|---|
| `keywords` | string\[] | — | One search per keyword. |
| `outputMode` | `items` | `summary` | `both` | `items` | Listings, one market-summary row per search, or both (see "Output modes"). |
| `searches` | object\[] | — | Structured searches (table below). |
| `priceMinJpy` / `priceMaxJpy` | integer | none | **Client-side** (see "Why some filters are client-side"). |
| `conditionMin` | 1–6 | none | 6 新品、未使用, 5 未使用に近い, 4 目立った傷や汚れなし, 3 やや傷や汚れあり, 2 傷や汚れあり. Needs the item page → turns `enrichDetail` on. |
| `listedAfter` | ISO date / epoch | none | From the card's listing time; brand / category pages are newest-first, so the walk stops early. |
| `excludeWords` | string\[] | `[]` | Client-side title filter. |
| `maxItemsPerSearch` | integer | 100 | 100 cards per page. |
| `maxTotalItems` | integer | none | Hard cap per run. |
| `dedupeAcrossSearches` | boolean | true | |
| `enrichDetail` | boolean | false | One extra request + one `detail-page` event per item. |
| `maxDetailPages` | integer | 100 | Cap on item-page requests per run. |
| `requestDelayMs` | integer | 2000 | Minimum pause between requests. |
| `proxyConfiguration` | object | none | Optional. |
| `outputFields` | string\[] | all | Keep only these fields (`itemId`, `url` always kept). |

Fields of one `searches` entry:

| Field | Example | How it is applied |
|---|---|---|
| `keyword` | `"デニム"` | `/search/<keyword>` (site relevance order). |
| `brand` | `"KAPITAL"` | Resolved to the site's brand id by opening the first hit of a search for the name (2 requests, once per run). If the first hit is another brand, the name is searched as a keyword and titles are filtered client-side. |
| `brandId` | `106095` | The site's brand id (from `/brand/<id>` links). With a keyword → `brandIds=`; alone → the brand page `/brand/<id>` (newest first). |
| `categoryPath` | `"mens"`, `"mens > jackets > coverall"`, `"メンズファッション > ジャケット > Gジャン、デニム"`, `"ladies > dresses"` | Resolved against the built-in fashion category tree (レディース / メンズ / 腕時計、アクセサリー, 3 levels; English aliases for the common ones). With a keyword → `categoryIds=`; alone → the category page (newest first). Unknown paths are used as an extra keyword. |
| `categoryId` | `"36588"` or `"13457/2495/36583/36588"` | The site's category id. |
| `priceMinJpy` / `priceMaxJpy` | `5000` / `50000` | Client-side. |
| `conditionMin` | `4` | Client-side after the item page. |
| `listedAfter` | `"2026-11-01"` | Client-side (card listing time). |
| `excludeWords` | `["レプリカ"]` | Client-side. |
| `sellerId` | `"p6125728"` | Keep only one seller's items. |

#### Why some filters are client-side

The site's `robots.txt` disallows the URL parameters for sorting, price range, condition and sold-out filtering (`sort= order= minPrice= maxPrice= conditions= sold= open= …`). This Actor only requests the URL forms that are allowed — `/search/<keyword>` with `page=`, `brandIds=` and `categoryIds=`, `/brand/<id>`, `/category/<path>` and `/item/<id>` — and applies the remaining filters itself. The trade-off is that a tight price filter may need more pages; `maxItemsPerSearch` counts kept items, and brand / category pages (newest first) stop as soon as `listedAfter` is passed.

#### Examples

New arrivals of one brand in men's jackets under ¥50,000 (schedule it and set `listedAfter` to the previous run time):

```json
{
  "searches": [{ "brand": "KAPITAL", "categoryPath": "mens > jackets", "priceMaxJpy": 50000, "listedAfter": "2026-11-01" }],
  "maxItemsPerSearch": 100
}
```

Keyword within a category, good condition only, with details:

```json
{
  "searches": [{ "keyword": "visvim FBT", "categoryPath": "mens > シューズ", "conditionMin": 4 }],
  "maxItemsPerSearch": 50,
  "maxDetailPages": 100
}
```

Everything one seller currently lists:

```json
{ "searches": [{ "keyword": "KAPITAL", "sellerId": "p6125728" }], "maxItemsPerSearch": 500 }
```

Requests are sequential: 100 listings ≈ 1 listing page ≈ 2 seconds; with `enrichDetail` ≈ 101 requests ≈ 3.5 minutes at the default delay.

### FAQ

**What is Yahoo! Fleamarket?**
Yahoo!フリマ (until 2023 "PayPay フリマ") is LY Corporation's flat-price C2C marketplace, sharing listings with Yahoo! Auctions' fixed-price items. Shipping is always included and anonymous, payment is escrowed. It is the main alternative to Mercari for used clothing, sneakers, trading cards, figures and electronics in Japan.

**Do I need a proxy or a browser?**
No. The listing and item pages are server-rendered and served to Apify's datacenter IPs at the default 2-second delay.

**Can I get sold items / price history?**
Not from this Actor: the site's sold-item filter is disallowed by its robots.txt. Items that sell after you collect them come back with `status: "sold"` when re-fetched with `enrichDetail` (the item page stays online). For sold-price comps across Japanese marketplaces use our [Mercari scraper](https://apify.com/tokyo-select-jp/mercari-search-scraper), which returns sold listings.

**How do I find brand and category ids?**
Open any item of that brand / category on the site: the 商品の情報 table links to `/brand/<id>` and `/category/<ids>`. Or just pass the brand name / a category path and let the Actor resolve it.

**How are sizes and conditions normalized?**
`sizeRaw` keeps the site text (or a size token found in the title on list-only runs); `sizeNorm` interprets it (`waist` inches for `W32`, `alpha` for `S/M/L/LL→XL`, `numeric` for JP sizes, `cm` for shoes, `free`). `conditionRank` uses 6 = best … 1 = worst — the same scale as our Mercari, Trefac and KOMEHYO scrapers.

**Is this legal?**
The Actor collects public listing data only, uses only robots.txt-allowed URLs, identifies no user and throttles requests. How you use the data is your responsibility; respect the site's terms of use, keep runs small and scheduled, and do not republish photos or descriptions as your own.

**How do I call it from code or from an AI agent?**

```js
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("tokyo-select-jp/yahoo-fleamarket-search-scraper").call({
  searches: [{ brand: "KAPITAL", categoryPath: "mens > jackets", priceMaxJpy: 50000 }],
  maxItemsPerSearch: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```
POST https://api.apify.com/v2/acts/tokyo-select-jp~yahoo-fleamarket-search-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN
Content-Type: application/json

{ "keywords": ["visvim FBT"], "maxItemsPerSearch": 50 }
```

The Actor is also exposed through Apify's MCP server (`https://mcp.apify.com`), so Claude, ChatGPT, Cursor and other MCP-capable assistants can search Yahoo! Fleamarket by calling this Actor as a tool.

### Pricing (pay per event)

| Event | Charged when | Price |
|---|---|---|
| Result (`apify-default-dataset-item`, charged automatically by Apify) | one listing is saved to the dataset | $0.002 |
| Item page (`detail-page`) | that listing was enriched from its item page | $0.005 (in addition to the result) |
| Market summary (`summary`) | one summary row is saved (outputMode `summary` / `both`) | $0.03 per search |
| Actor start (`apify-actor-start`) | each run starts | $0.00005 |

Example: 100 listings without detail = **$0.20**; with detail = **$0.70**. A `summary`-only run over 3 searches ≈ 3 × $0.03 = **$0.09**, whatever the number of listings sampled.
Set **Max total charge** on the run to cap spending.

### Roadmap — JP Data Works

Scrapers for Japanese secondhand marketplaces with one normalized shape (`priceJpy`, `sizeNorm`, `conditionRank`, `imageUrls`):

- **Mercari (メルカリ)** — [published](https://apify.com/tokyo-select-jp/mercari-search-scraper), incl. sold prices
- **Trefac (トレファク)** — [published](https://apify.com/tokyo-select-jp/trefac-search-scraper)
- **KOMEHYO (コメ兵)** — [published](https://apify.com/tokyo-select-jp/komehyo-search-scraper)
- **Yahoo! Fleamarket** — this Actor
- **Vector Park**, **Rakuma** — coming; a cross-site aggregator with market summaries (median / p25 / p75 by site, size and condition) is next.

***

### 日本語

**Yahoo!フリマ（旧 PayPay フリマ）をキーワード・ブランド・カテゴリで検索し、構造化された商品データを返す Actor です。** 価格（送料込み）、サイズ正規化、出品日時、出品者 ID、画像を返し、オプションで商品ページから **商品の状態・色・性別・出品者評価・いいね数・配送・説明文・全画像** を付加します。ブラウザ・ログイン・プロキシ不要。

**robots.txt で禁止されている URL パラメータ（並び順・価格帯・状態・売り切れ）は使いません。** 許可されている `/search/<キーワード>`（`page=` `brandIds=` `categoryIds=`）、`/brand/<id>`、`/category/<path>`、`/item/<id>` だけを使い、価格帯・出品日・状態・除外語はクライアント側で適用します。

#### 出力（1 商品 = 1 行）

- `itemId` / `url` / `title` / `brand` / `brandId` / `categoryId` / `categoryPath`
- `priceJpy`（送料込み）、`status`（`on_sale` / 詳細取得後に `sold`）
- `sizeRaw` と `sizeNorm` / `size`（商品ページ、または一覧のみのときはタイトルから推定）
- `sellerId`、`listedAt`（出品日時）、`endsAt`、`imageUrl` / `imageUrls`、`fetchedAt`、`keyword`、`search`
- 詳細: `conditionRank`（6 新品、未使用 … 1）、`conditionLabel`、`color`、`gender`、`sellerName` / `sellerRatingCount` / `sellerVerified` / `sellerBadges`、`likes`、`shippingMethod` / `shippingDuration` / `shippingFromArea`、`description`、全画像

#### 入力

| 項目 | 既定 | 説明 |
|---|---|---|
| `keywords` | — | 検索キーワード（1 行 1 件） |
| `searches` | — | 構造化検索: `keyword` / `brand`（ブランド名 → ID に解決）/ `brandId`（106095 = KAPITAL）/ `categoryPath`（`mens`、`mens > jackets > coverall`、`メンズファッション > ジャケット > Gジャン、デニム`、`ladies > dresses`）/ `categoryId` / `priceMinJpy` / `priceMaxJpy` / `conditionMin`（商品ページが必要）/ `listedAfter` / `excludeWords` / `sellerId` |
| `priceMinJpy` / `priceMaxJpy` | なし | 価格帯（クライアント側） |
| `conditionMin` | なし | 状態の下限 1〜6（商品ページを開くので enrichDetail が ON になる） |
| `listedAfter` | なし | この日時以降の出品だけ。ブランド / カテゴリページは新着順なので途中で打ち切り |
| `maxItemsPerSearch` | 100 | 検索ごとの最大件数（1 ページ 100 件） |
| `enrichDetail` | false | 商品ページを開いて補完 |
| `maxDetailPages` | 100 | 商品ページ取得の上限 |
| `requestDelayMs` | 2000 | リクエスト間隔 |

##### 入力例

```json
{
  "searches": [{ "brand": "KAPITAL", "categoryPath": "mens > jackets", "priceMaxJpy": 50000, "listedAfter": "2026-11-01" }],
  "maxItemsPerSearch": 100
}
```

#### 料金（Pay per event）

結果 1 件 $0.002 / 商品ページ 1 件 $0.005 / 起動 $0.00005。100 件（詳細なし）≈ $0.20、詳細あり ≈ $0.70。「Max total charge」で上限設定可。

#### 利用上の注意

- 公開されている商品情報のみ、robots.txt が許可する URL のみ、既定 2 秒間隔で取得します。ログイン・購入・メッセージは一切行いません。
- 売り切れ検索は robots.txt で禁止されているため提供しません（sold 相場は [Mercari Actor](https://apify.com/tokyo-select-jp/mercari-search-scraper) を）。
- データの利用はご自身の責任で、サイトの利用規約を守り、画像・文章の無断転載はお控えください。

# Changelog

This Actor's version history is a separate document: https://apify.com/tokyo-select-jp/yahoo-fleamarket-search-scraper/changelog.md

# Actor input Schema

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

Simple keyword searches, one per line (e.g. `KAPITAL デニム`, `visvim FBT`, `ポケモンカード`). Each keyword is one search and inherits the defaults below. Optional when `searches` is set.

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

Advanced searches as JSON objects. Each needs at least one of `keyword`, `brand`, `brandId`, `categoryPath`, `categoryId`.

- `keyword` — free text.
- `brand` — brand name as shown on the site (e.g. `KAPITAL`); resolved to the site's brand id by looking at the first search hit. `brandId` — the id directly (106095 = KAPITAL).
- `categoryPath` — `mens`, `ladies`, `watches`, or a path such as `mens > jackets > coverall`, `メンズファッション > ジャケット > Gジャン、デニム`, `ladies > dresses`; `categoryId` — the site's category id (36588) or id path (13457/2495/36583/36588).
- `priceMinJpy` / `priceMaxJpy` — client-side.
- `conditionMin` — minimum condition rank 1–6 (6 = 新品、未使用; needs the item page, turns enrichDetail on).
- `listedAfter` — ISO date or epoch seconds; only items listed after this (from the card's listing time).
- `excludeWords` — drop items whose title contains any of these.
- `sellerId` — keep only one seller's items.

With a keyword the Actor uses /search/<keyword>?brandIds=\&categoryIds=; without a keyword it walks the brand page or the category page (newest first).

## `outputMode` (type: `string`):

`items` (default): one dataset row per listing. `summary`: one market-summary row per search instead of the listings — sample size, price min / p25 / median / mean / p75 / max, price histogram, status / condition-rank / size / brand / category breakdowns, cheapest listings — billed once per search as the `summary` event (the sampled listings are not billed). `both`: listings plus the summary row.

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

Lower price bound for every search without its own `priceMinJpy` (client-side).

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

Upper price bound for every search without its own `priceMaxJpy` (client-side).

## `conditionMin` (type: `integer`):

Only listings with this condition rank or better (6 新品、未使用 … 1). Needs the item page, so it turns enrichDetail on.

## `listedAfter` (type: `string`):

Only items listed after this date/time (ISO or epoch seconds). Combine with a schedule for incremental collection.

## `excludeWords` (type: `array`):

Drop items whose title contains any of these words (case-insensitive).

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

Stop after this many listings for each keyword / search (100 cards per page).

## `maxTotalItems` (type: `integer`):

Hard cap on listings saved in this run across all searches.

## `dedupeAcrossSearches` (type: `boolean`):

Save a listing only once when several searches return it.

## `enrichDetail` (type: `boolean`):

Open each item page for condition, size, colour, gender, category path, seller (name, rating count, verified, badges), likes, shipping, description and the full gallery. One extra request and one `detail-page` event per item.

## `maxDetailPages` (type: `integer`):

Cap on item-page requests per run.

## `requestDelayMs` (type: `integer`):

Minimum pause between requests. Keep ≥ 2000.

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

Optional. Not needed under normal use.

## `outputFields` (type: `array`):

Keep only these top-level fields (`itemId` and `url` are always kept).

## Actor input object example

```json
{
  "keywords": [
    "KAPITAL デニム"
  ],
  "searches": [
    {
      "brand": "KAPITAL",
      "categoryPath": "mens > jackets",
      "priceMaxJpy": 50000
    }
  ],
  "outputMode": "items",
  "excludeWords": [],
  "maxItemsPerSearch": 100,
  "dedupeAcrossSearches": true,
  "enrichDetail": false,
  "maxDetailPages": 100,
  "requestDelayMs": 2000,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "outputFields": []
}
```

# Actor output Schema

## `listings` (type: `string`):

All scraped items (default dataset)

# 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": [
        "KAPITAL デニム"
    ],
    "searches": [
        {
            "brand": "KAPITAL",
            "categoryPath": "mens > jackets",
            "priceMaxJpy": 50000
        }
    ],
    "maxItemsPerSearch": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tokyo-select-jp/yahoo-fleamarket-search-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 = {
    "keywords": ["KAPITAL デニム"],
    "searches": [{
            "brand": "KAPITAL",
            "categoryPath": "mens > jackets",
            "priceMaxJpy": 50000,
        }],
    "maxItemsPerSearch": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("tokyo-select-jp/yahoo-fleamarket-search-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 '{
  "keywords": [
    "KAPITAL デニム"
  ],
  "searches": [
    {
      "brand": "KAPITAL",
      "categoryPath": "mens > jackets",
      "priceMaxJpy": 50000
    }
  ],
  "maxItemsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call tokyo-select-jp/yahoo-fleamarket-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tokyo-select-jp/yahoo-fleamarket-search-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/XD4c5zK9vFEe9lCmA/builds/fGAfQMHng2jiYFDBc/openapi.json
