# Yahoo! Flea Market Japan Bulk Listings (`jpmarketdata/yahoo-flea-market-bulk-listings`) Actor

Export public Yahoo! Flea Market search results as per-item rows with source-listed price, status, likes and provenance. Up to 2,000 rows per term; no keyword fee. Unofficial.

- **URL**: https://apify.com/jpmarketdata/yahoo-flea-market-bulk-listings.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 listing scrapeds

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/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! Flea Market Japan Bulk Listings

Export search-result rows from the public Yahoo! Flea Market site (formerly PayPay Flea Market). Unofficial and not affiliated with LINE Yahoo. For inventory analysts and AI agents that need a flat, repeatable feed for a known keyword.

### Input

Provide 1–5 exact `keywords` (2–80 characters each). `maxListingsPerKeyword` defaults to 100 and ranges from 100 to 2,000. The Actor uses only the site-default order and `page=N`; sorting and most filters are robots-disallowed.

### Repeat inventory snapshots

Save the same exact `keywords` and `maxListingsPerKeyword` as an Apify Task. Reuse that Task on your chosen schedule, or call `POST /v2/actor-tasks/<TASK_ID>/runs`. After the run finishes, read its default dataset through `GET /v2/datasets/<DATASET_ID>/items?format=json&clean=true` and retain the run ID with the imported rows.

Use `(keyword, id)` for the current inventory snapshot and `(runId, keyword, id)` to avoid duplicates when importing one run again. Append observations using `observedAt`; `listedAt` is the source listing time, not a sale time. Keep each keyword's free `search_summary` beside its rows. Check `keywordStatus`, `truncatedBy`, query rewrites and `pagesFetched` before comparing snapshots: a partial run or a missing card does not prove a sale or removal. A rewritten query is not the requested keyword's inventory. Compare the same input and source order, and retain earlier snapshots when coverage is partial.

This Actor supplies raw OPEN search cards for your own inventory or pricing workflow. Choose [Yahoo! Flea Market Japan Listing Price Summary](https://apify.com/jpmarketdata/paypay-flea-price-checker) for a price summary rather than the individual feed. Search-card prices remain source-listed values and can include auction bid floors.

### Output

One `listing` row per unique OPEN result with ID, exact page URL, title, source-listed yen price, likes, condition code, listing time, optional brand/category, page/position and observation time. `sourcePriceJpy` is the price shown on the search card; it may be a live auction bid floor and is not a confirmed amount at which the item can be purchased. Search results may include qualifying Yahoo Auction items; `originType=unverified` and `priceType=source-listed-price-unverified` avoid implying every row is native flea or a fixed buy-now price. SOLD cards are excluded and counted in a free `search_summary` row, with total reported by source, pages, duplicates, truncation and spelling rewrite. The source-reported total is a changing snapshot, not a complete-export guarantee. No sold prices or market median.

The summary fields are `keywordStatus` (`ok`, `not_found`, `rewritten`, or `partial`), `totalFoundReported`, `openRowsDelivered`, `soldRowsExcluded`, `duplicatesDropped`, `pagesFetched`, `sortUsed=site-default`, and `truncatedBy` (`none`, `item-limit`, `page-limit`, `time-limit`, or `charge-limit`). A rewritten query has no charged rows and includes `queryRewrittenTo`. A verified exact-query zero has an uncharged `not_found` summary. If the run limit is reached before a later keyword's first page, its summary has `pagesFetched=0`, `sortUsed=not-observed`, and omits the unknown `totalFoundReported`. Source failures raise a classified error.

Both row types retain the normalized requested `keyword` (trimmed, with duplicate input terms removed) and `observedAt` fields. The dataset's two views use `listingKeyword` and `summaryKeyword` respectively so listings and summaries remain separate when several keywords are requested.

### Pricing

$0.0015 per delivered OPEN `listing`; no keyword/start fee. Summaries, duplicate/excluded/error rows are free. The Actor checks the remaining PPE event allowance before each row and reports `charge-limit` if that allowance stops output. A theoretical 10,000 rows is $15, subject to runtime/page and platform run-cost caps.

### Limits

100 cards per page, up to 20 pages per keyword, 50 search pages in one run, at least 1.5 seconds between requests, 30-second request timeout, 300-second run limit. Stop starting requests near 210 seconds and disclose partial results. No login, browser, paid API, robots-disallowed search filters, seller pages or item-detail fan-out. DC access and cost require a private Apify canary before release.

### Privacy

Only allowlisted public listing facts and canonical item URLs are exported. Obvious email addresses, phone numbers, URLs and contact IDs in seller-written titles are replaced with `[contact removed]`. Seller identity, descriptions, hashtags, images, contacts, locations, cookies and raw page data are excluded.

# Actor input Schema

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

One to five exact Yahoo! Flea Market search terms, 2–80 characters each.

## `maxListingsPerKeyword` (type: `integer`):

OPEN listing rows to deliver for each term, 100–2,000.

## Actor input object example

```json
{
  "maxListingsPerKeyword": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/yahoo-flea-market-bulk-listings").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/yahoo-flea-market-bulk-listings").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 '{}' |
apify call jpmarketdata/yahoo-flea-market-bulk-listings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/yahoo-flea-market-bulk-listings"
        }
    }
}
```

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/PslrabAyMRxD9evR4/builds/OvtSxXStg60PzoIQU/openapi.json
