Yahoo! Fleamarket Japan Scraper (Yahoo!フリマ / PayPayフリマ)
Pricing
from $2.00 / 1,000 results
Yahoo! Fleamarket Japan Scraper (Yahoo!フリマ / PayPayフリマ)
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.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
JP Data Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape Yahoo! Fleamarket (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,categoryPathpriceJpy(shipping included — on Yahoo! Fleamarket the seller always pays shipping),statussizeRaw/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)
{"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 tomaxItemsPerSearchlistings, withenrichDetailif set), but stores only the aggregate — so a run that answers "what does X go for on Yahoo! Fleamarket?" costs onesummaryevent 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:
{"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 ofkeyword,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):
{"searches": [{ "brand": "KAPITAL", "categoryPath": "mens > jackets", "priceMaxJpy": 50000, "listedAfter": "2026-11-01" }],"maxItemsPerSearch": 100}
Keyword within a category, good condition only, with details:
{"searches": [{ "keyword": "visvim FBT", "categoryPath": "mens > シューズ", "conditionMin": 4 }],"maxItemsPerSearch": 50,"maxDetailPages": 100}
Everything one seller currently lists:
{ "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, 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?
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_TOKENContent-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, incl. sold prices
- Trefac (トレファク) — published
- KOMEHYO (コメ兵) — published
- 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/categoryPathpriceJpy(送料込み)、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 | リクエスト間隔 |
入力例
{"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 を)。
- データの利用はご自身の責任で、サイトの利用規約を守り、画像・文章の無断転載はお控えください。