# eBay Sold Items Scraper — Sold Prices, Comps & Price Stats (`yumitori/ebay-sold-items-scraper`) Actor

eBay sold listings & comps with built-in price stats (median, avg, p25/p75) — not raw rows for Excel. Real SOLD prices across 8 marketplaces, plus promoted-ad bid data, best-offer-excluded comps, watch counts & auto category IDs. 12k+ comps/keyword via fast JSON — no API key, no browser.

- **URL**: https://apify.com/yumitori/ebay-sold-items-scraper.md
- **Developed by:** [Yakugusa Yumitori](https://apify.com/yumitori) (community)
- **Categories:** E-commerce, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

Get the **real prices items sold for** on eBay — not asking prices — with **built-in price statistics** (median, average, p25/p75) so you skip the Excel math. Covers **8 marketplaces**, returns **30+ fields per listing**, surfaces **promoted-listing bid data**, and serves **12,000+ sold comps per keyword** from structured data — no API key, no browser, no captcha.

### What does this actor do?

eBay Sold Items Scraper pulls **completed/sold listings** straight from eBay — the actual transaction prices, sold dates, conditions, bids, shipping, and seller feedback. Unlike a general eBay scraper (which shows *active* listings and *asking* prices), this is built for **price research**: finding what an item truly sold for before you buy or list.

It goes further than a basic sold-listings scraper in three ways most don't:

- **It computes the stats for you.** Every run returns `priceStats` per keyword — count, min, max, **average, median, p25, p75** — with best-offer-accepted sales **excluded** so your comps aren't skewed.
- **It sees the ad auction.** Optional promoted-listing **bid intelligence** (advertiser max bid + estimated clearing price/CPC) per keyword.
- **It speaks 8 marketplaces.** US, UK, Germany, France, Italy, Spain, Canada, Australia — with correct localized currency.

### Why use it instead of a generic sold-listings scraper?

![What makes this eBay sold scraper different — 12,000+ depth per keyword (bypasses eBay's web cap), promoted-listing bid data + clearing CPC, sponsored and best-offer-accepted flags for clean comps, keyword expansion, auto-discovered category IDs, and a direct-JSON engine that needs no browser or proxy for US — versus a typical eBay sold scraper](https://files.catbox.moe/me0j4r.png)

### Who is it for?

**🛍️ Resellers & flippers** — research comp sales before buying inventory, validate your asking price against what buyers actually paid, track seasonal trends, build pricing sheets for hundreds of items at once.

**📦 E-commerce sellers** — set competitive prices on eBay/Amazon/Shopify, analyze competitor sell-through by keyword, decide which condition (new vs used) commands a premium, time restocks.

**📊 Market researchers & analysts** — collect historical price data for vintage/collectible markets, build datasets for pricing models, compare auction vs Buy-It-Now differentials, export to Excel/Sheets.

**🤖 Developers & data teams** — power price-comparison tools, build price-shift alerts, feed sold-price data into inventory systems, schedule refreshes via the Apify API or MCP.

### What data you get

**Per sold listing (30+ fields):**

| Field | Description |
|---|---|
| `itemId` | eBay item ID |
| `title` | Listing title |
| `price` | Final sold price (number) |
| `shippingPrice` | Shipping cost (number) |
| `totalPrice` | Price + shipping |
| `currency` | Marketplace currency (USD/GBP/EUR/…) |
| `condition` | Normalized condition (New / Used / Open box / Refurbished / For parts) |
| `soldDate` | Date the item sold |
| `listingType` / `buyingFormat` | Auction or Buy It Now |
| `bidCount` | Number of bids (auctions) |
| `endTime` | Auction end time |
| `sellerName` | Seller username |
| `sellerFeedbackScore` | Seller total feedback count |
| `sellerPositivePct` | Positive feedback % |
| `itemLocation` | Item location |
| `watchCount` | Watchers on the listing |
| `quantitySold` / `quantityAvailable` | Units sold / available |
| `epid` | eBay catalog product ID |
| `categoryId` | Category ID |
| `marketplace` | Source marketplace |
| `isSponsored` | Promoted (sponsored) listing flag |
| `isBestOfferAccepted` | Sale via accepted Best Offer (exclude for clean comps) |
| `authenticityGuarantee` | eBay Authenticity Guarantee flag |
| `certifiedRefurbished` | Certified Refurbished flag |
| `url` | Direct eBay item URL |
| `image` | Item image URL |
| `sourceQuery` | The keyword that returned this item |

**Per keyword (run summary):**

- **`priceStats`** — count, min, max, avg, median, p25, p75 (best-offer-excluded)
- **Auto-discovered `categories`** — `[{ id, name }]` for the keyword
- **Promoted-ad intelligence** (when enabled) — advertiser `bid`, estimated `clearingPrice`, `adSubType`

**Ready-made dataset views:** **Overview** (image, title, price, condition, sold date, seller), **Pricing** (price / shipping / total / format / bids / end time), and **Seller Intel** (seller feedback, location, product rating).

### Pricing

**Pay-per-result — $2.99 per 1,000 sold listings** (volume discounts apply at higher usage tiers). You're charged per listing returned, not by runtime — no charge for empty results.

**Real-world cost examples:**

| Use case | Listings | Cost |
|---|---|---|
| Quick comp check (1 keyword, 10 results) | 10 | ~$0.03 |
| Standard research (1 keyword, 100 results) | 100 | ~$0.30 |
| Deep analysis (5 keywords, 100 each) | 500 | ~$1.50 |
| Bulk research (10 keywords, 200 each) | 2,000 | ~$5.98 |

Every Apify account includes **$5 in free credits** — roughly **1,600 sold listings** before you spend anything.

### How to use

1. Open **eBay Sold Items Scraper** on Apify Store and click **Try for free**.
2. Enter one or more keywords in **Search keywords** (`queries`).
3. Set **Max results per keyword** (`maxItemsPerQuery`) — 10 for a quick test, 200+ for research.
4. Pick a **Marketplace** and apply optional filters (condition, price range, buying format, sold-within-days).
5. Click **Save & Start**.
6. Download results as JSON, CSV, or Excel — and read `priceStats` for instant median/average pricing.

**Input example — vintage camera comps (US, used, recent sales):**

```json
{
  "queries": ["canon ae-1 program", "minolta x-700"],
  "marketplace": "EBAY-US",
  "maxItemsPerQuery": 200,
  "sortOrder": "endedRecently",
  "condition": "used",
  "minPrice": 20,
  "maxPrice": 500,
  "soldWithinDays": 30,
  "includeAdIntelligence": true
}
````

**Input example — auction-only electronics:**

```json
{
  "queries": ["iphone 15 pro 256gb"],
  "marketplace": "EBAY-US",
  "maxItemsPerQuery": 100,
  "sortOrder": "endedRecently",
  "buyingFormat": "auction"
}
```

**Input example — multi-market price comparison with keyword expansion:**

```json
{
  "queries": ["lego star wars ucs"],
  "marketplace": "EBAY-GB",
  "maxItemsPerQuery": 200,
  "expandKeywords": true,
  "expansionLimit": 5
}
```

**Output example — typical sold listing:**

```json
{
  "itemId": "227266797887",
  "title": "Canon AE-1 Program 35mm Film Camera w/ 50mm f/1.8 Lens — Tested",
  "price": 178.5,
  "shippingPrice": 12,
  "totalPrice": 190.5,
  "currency": "USD",
  "condition": "Used",
  "soldDate": "2026-06-12",
  "listingType": "Buy It Now",
  "buyingFormat": "FIXED_PRICE",
  "bidCount": null,
  "endTime": null,
  "sellerName": "camera_warehouse_us",
  "sellerFeedbackScore": 3712,
  "sellerPositivePct": 99.5,
  "itemLocation": "Portland, OR, USA",
  "watchCount": 14,
  "quantitySold": 1,
  "epid": "78901234",
  "categoryId": "15230",
  "marketplace": "EBAY-US",
  "isSponsored": false,
  "isBestOfferAccepted": false,
  "authenticityGuarantee": false,
  "url": "https://www.ebay.com/itm/227266797887",
  "image": "https://i.ebayimg.com/images/g/.../s-l1600.jpg",
  "sourceQuery": "canon ae-1 program"
}
```

**Output example — per-keyword price stats (run summary):**

```json
{
  "query": "canon ae-1 program",
  "priceStats": {
    "count": 187,
    "min": 39.99,
    "max": 320,
    "avg": 162.4,
    "median": 155,
    "p25": 119,
    "p75": 199
  },
  "categories": [{ "id": "15230", "name": "Film Cameras" }]
}
```

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `queries` | string\[] | — | **Required.** Keywords to search sold listings. Each runs a separate search. |
| `marketplace` | string | `EBAY-US` | `EBAY-US`, `EBAY-GB`, `EBAY-DE`, `EBAY-FR`, `EBAY-IT`, `EBAY-ES`, `EBAY-CA`, `EBAY-AU`. |
| `maxItemsPerQuery` | integer | 200 | Max sold listings per keyword (up to 20,000). |
| `sortOrder` | string | `endedRecently` | `endedRecently`, `newlyListed`, `priceLow`, `priceHigh`, `bestMatch`. |
| `condition` | string | `any` | `any`, `new`, `open_box`, `refurbished`, `used`, `parts`. |
| `buyingFormat` | string | `all` | `all`, `auction`, `buy_it_now`. |
| `minPrice` / `maxPrice` | number | — | Price range filter. |
| `soldWithinDays` | integer | — | Only sales within the last N days (early-stops paging past the window). |
| `categoryId` | string | — | Restrict to an eBay category ID. |
| `freeShippingOnly` | boolean | false | Only free-shipping sales. |
| `expandKeywords` | boolean | false | Auto-expand each keyword via eBay suggestions. |
| `expansionLimit` | integer | 5 | Expansions per keyword when `expandKeywords` is on. |
| `includeAdIntelligence` | boolean | true | Include promoted-listing bid intelligence. |
| `dedupeAcrossQueries` | boolean | true | Remove duplicate items across keywords. |
| `concurrentQueries` | integer | 2 | Keywords processed in parallel. |
| `proxyConfiguration` | object | Apify Proxy off | US runs work without a proxy; use a country-matched residential proxy for non-US markets. |

### The 8 marketplaces

Search any of **US, UK, Germany, France, Italy, Spain, Canada, Australia** with the correct localized currency. US runs work proxy-free; for non-US markets, a country-matched residential proxy surfaces **~20% more local inventory**.

### Built-in price analytics

Stop dumping rows into a spreadsheet to find the going rate. Every keyword returns a `priceStats` object — count, min, max, average, median, p25, p75 — with **Best-Offer-accepted sales excluded** so a few lowball deals don't drag your median down. Read the median for a robust "what it really sells for," and p25–p75 for the realistic negotiating band.

### Promoted-listing bid intelligence

Turn on `includeAdIntelligence` to see the **Promoted Listings ad auction** behind a keyword: the advertiser max `bid` and estimated `clearingPrice` (effective CPC). Useful for gauging how competitive a niche is and what sellers are paying to surface there. (Live data — a point-in-time snapshot.)

### Tips for best results

- 🎯 Specific keywords ("canon ae-1 program 50mm") return tighter comps than "camera".
- 📅 `endedRecently` sort gives the freshest sales; pair with `soldWithinDays` for a clean recent window.
- 💰 Narrow `minPrice`/`maxPrice` on high-variance categories (watches, jewelry) for a meaningful median.
- 🧹 Filter out `isBestOfferAccepted` for the cleanest median.
- 🔄 Run multiple keywords (brand + model + aliases) for a fuller market picture.
- 📊 Read `priceStats` instead of recomputing — median and p25/p75 are already there.

### Integrations

- **Google Sheets** — push comps per keyword into a sheet; auto-refresh weekly to keep pricing current.
- **Make / Zapier** — trigger a scenario on run finish: filter by price, push bargains to Slack or email a daily price digest.
- **Airtable** — build a live pricing database with rollups for average sold price per category.
- **Scheduling** — daily/weekly runs via Apify's scheduler to track price trends and detect reversals.

### API usage

**Node.js (apify-client):**

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('yumitori/ebay-sold-items-scraper').call({
    queries: ['canon ae-1 program', 'minolta x-700'],
    marketplace: 'EBAY-US',
    maxItemsPerQuery: 200,
    sortOrder: 'endedRecently',
    condition: 'used',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python (apify-client):**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("yumitori/ebay-sold-items-scraper").call(run_input={
    "queries": ["canon ae-1 program", "minolta x-700"],
    "marketplace": "EBAY-US",
    "maxItemsPerQuery": 200,
    "sortOrder": "endedRecently",
    "condition": "used",
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

**cURL:**

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/yumitori~ebay-sold-items-scraper/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{ "queries": ["canon ae-1 program"], "marketplace": "EBAY-US", "maxItemsPerQuery": 200 }'
```

### Use with AI agents via MCP

Available as a tool for AI assistants that support the Model Context Protocol.

**Claude Code:**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=yumitori/ebay-sold-items-scraper"
```

**Claude Desktop, Cursor, or VS Code** — add to your MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=yumitori/ebay-sold-items-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

**Example prompts:** *"What did 'rolex submariner 16610' actually sell for on eBay in the last 30 days — median and p25/p75?"* · *"Compare sold prices for 'iphone 15 pro 256gb' vs 'iphone 15 pro max 256gb', auctions only."*

### Is it legal to scrape eBay sold listings?

eBay's completed/sold listing data is **publicly visible** to any visitor without logging in. This actor accesses only that publicly available data. Use it responsibly: respect eBay's Terms of Service, don't spam buyers or sellers, comply with GDPR/CCPA when storing any personal data, and use the data for legitimate price research. See Apify's guide to ethical web scraping for context.

### FAQ

**How many results can I get?** Up to 12,000+ per keyword. Run multiple keywords in one run for broader coverage.

**How is this different from a general eBay scraper?** A general scraper shows active listings (asking prices). This returns completed/sold listings (actual transaction prices) — what buyers really paid.

**Do I need an API key or login?** No. No eBay API key, no login, no captcha.

**Why are some auction fields empty?** `bidCount` and `endTime` only apply to auction-format sales; Buy-It-Now items leave them null.

**How do I get the cleanest median?** Filter out `isBestOfferAccepted` items and use `soldWithinDays` to keep comps recent — or just read the `priceStats.median`, which already excludes best-offer sales.

**Can I research a specific category?** Yes — pass a `categoryId`, or rely on the auto-discovered `categories` returned per keyword.

**Which marketplaces are supported?** US, UK, Germany, France, Italy, Spain, Canada, Australia — with localized currency.

***

> ⚠️ **Unofficial.** Not affiliated with, endorsed by, or sponsored by eBay Inc. "eBay" is a trademark of eBay Inc., used here for descriptive purposes only. Collects only publicly available listing data.

# Actor input Schema

## `queries` (type: `array`):

One or more eBay search terms. Add a single term for a focused run, or paste many for bulk research — each keyword runs independently and its rows are tagged with `sourceQuery`.

## `listingStatus` (type: `string`):

"sold" = confirmed completed sales with final prices (the default — for comps & pricing). "active" = current live listings. "completed" = all ended listings incl. unsold.

## `marketplace` (type: `string`):

Which eBay site to search. Prices return in that market's local currency.

## `maxItemsPerQuery` (type: `integer`):

Hard cap on listings returned per keyword. Fetched 200 at a time, so 1000 = 5 requests, 5000 = 25 requests. eBay's mobile API serves 12,000+ per query (far past the website's 10k cap).

## `sortOrder` (type: `string`):

How to rank results. For sold comps, "Ended recently" is most useful.

## `minPrice` (type: `integer`):

Only listings at or above this price (local currency).

## `maxPrice` (type: `integer`):

Only listings at or below this price.

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

Filter by item condition.

## `buyingFormat` (type: `string`):

Restrict to a buying format.

## `categoryId` (type: `string`):

Optional eBay category id to scope the search (e.g. 58058 = Computers/Tablets & Networking). Leave blank for all categories. Don't know the ID? Just run once — every run lists the category IDs relevant to your keyword in the run summary (key-value store → SUMMARY → perQuery\[].categories). No external lookup needed.

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

Only return listings that ship free.

## `soldWithinDays` (type: `integer`):

For sold/completed runs: only keep listings that sold within the last N days. With the default 'Ended recently' sort, the actor stops paging as soon as it's past the window — fast, precise recent comps. Leave blank for no date limit.

## `expandKeywords` (type: `boolean`):

Before searching, expand each seed keyword into related terms eBay shoppers actually search, and scrape those too. Great for broad market research.

## `expansionLimit` (type: `integer`):

When keyword expansion is on, how many related terms to add per seed.

## `includeAdIntelligence` (type: `boolean`):

Capture eBay Promoted Listings auction data per keyword (advertiser bid + actual clearing CPC + promoted items) into a separate `promoted-ads` dataset. Populated for ~80% of commercial keywords; a point-in-time snapshot. (Per-listing `isSponsored` flags are always included regardless.)

## `dedupeAcrossQueries` (type: `boolean`):

When running multiple keywords, drop a listing on later keywords if its `itemId` was already seen. The first row keeps its `sourceQuery`.

## `concurrentQueries` (type: `integer`):

How many keywords to scrape in parallel. 1 = sequential. Higher = faster but risks rate-limiting.

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

Optional — leave OFF for US (works great with no proxy). Turn ON Apify Residential only for non-US marketplaces, where it auto-routes through an in-country IP and surfaces more local inventory (see the README chart). For US bulk runs, Datacenter is a cheap alternative.

## Actor input object example

```json
{
  "queries": [
    "rtx 4090"
  ],
  "listingStatus": "sold",
  "marketplace": "EBAY-US",
  "maxItemsPerQuery": 200,
  "sortOrder": "endedRecently",
  "condition": "any",
  "buyingFormat": "all",
  "freeShippingOnly": false,
  "expandKeywords": false,
  "expansionLimit": 5,
  "includeAdIntelligence": true,
  "dedupeAcrossQueries": true,
  "concurrentQueries": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped listings (overview / pricing / seller intel views available).

## `summary` (type: `string`):

Totals + per-keyword counts + run config.

# 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 = {
    "queries": [
        "rtx 4090"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yumitori/ebay-sold-items-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 = {
    "queries": ["rtx 4090"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("yumitori/ebay-sold-items-scraper").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 '{
  "queries": [
    "rtx 4090"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call yumitori/ebay-sold-items-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=yumitori/ebay-sold-items-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "eBay Sold Items Scraper — Sold Prices, Comps & Price Stats",
        "description": "eBay sold listings & comps with built-in price stats (median, avg, p25/p75) — not raw rows for Excel. Real SOLD prices across 8 marketplaces, plus promoted-ad bid data, best-offer-excluded comps, watch counts & auto category IDs. 12k+ comps/keyword via fast JSON — no API key, no browser.",
        "version": "1.0",
        "x-build-id": "Trslm4V34pfGu7QuK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/yumitori~ebay-sold-items-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-yumitori-ebay-sold-items-scraper",
                "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/yumitori~ebay-sold-items-scraper/runs": {
            "post": {
                "operationId": "runs-sync-yumitori-ebay-sold-items-scraper",
                "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/yumitori~ebay-sold-items-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-yumitori-ebay-sold-items-scraper",
                "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": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Search keywords",
                        "minItems": 1,
                        "maxItems": 50,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "One or more eBay search terms. Add a single term for a focused run, or paste many for bulk research — each keyword runs independently and its rows are tagged with `sourceQuery`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingStatus": {
                        "title": "Listing status",
                        "enum": [
                            "sold",
                            "active",
                            "completed"
                        ],
                        "type": "string",
                        "description": "\"sold\" = confirmed completed sales with final prices (the default — for comps & pricing). \"active\" = current live listings. \"completed\" = all ended listings incl. unsold.",
                        "default": "sold"
                    },
                    "marketplace": {
                        "title": "Marketplace",
                        "enum": [
                            "EBAY-US",
                            "EBAY-GB",
                            "EBAY-DE",
                            "EBAY-FR",
                            "EBAY-IT",
                            "EBAY-ES",
                            "EBAY-CA",
                            "EBAY-AU"
                        ],
                        "type": "string",
                        "description": "Which eBay site to search. Prices return in that market's local currency.",
                        "default": "EBAY-US"
                    },
                    "maxItemsPerQuery": {
                        "title": "Max results per keyword",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Hard cap on listings returned per keyword. Fetched 200 at a time, so 1000 = 5 requests, 5000 = 25 requests. eBay's mobile API serves 12,000+ per query (far past the website's 10k cap).",
                        "default": 200
                    },
                    "sortOrder": {
                        "title": "Sort",
                        "enum": [
                            "endedRecently",
                            "newlyListed",
                            "priceLowToHigh",
                            "priceHighToLow",
                            "bestMatch"
                        ],
                        "type": "string",
                        "description": "How to rank results. For sold comps, \"Ended recently\" is most useful.",
                        "default": "endedRecently"
                    },
                    "minPrice": {
                        "title": "Minimum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only listings at or above this price (local currency)."
                    },
                    "maxPrice": {
                        "title": "Maximum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only listings at or below this price."
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "any",
                            "new",
                            "used",
                            "certified_refurbished",
                            "open_box"
                        ],
                        "type": "string",
                        "description": "Filter by item condition.",
                        "default": "any"
                    },
                    "buyingFormat": {
                        "title": "Buying format",
                        "enum": [
                            "all",
                            "auction",
                            "buy_it_now"
                        ],
                        "type": "string",
                        "description": "Restrict to a buying format.",
                        "default": "all"
                    },
                    "categoryId": {
                        "title": "Category ID",
                        "type": "string",
                        "description": "Optional eBay category id to scope the search (e.g. 58058 = Computers/Tablets & Networking). Leave blank for all categories. Don't know the ID? Just run once — every run lists the category IDs relevant to your keyword in the run summary (key-value store → SUMMARY → perQuery[].categories). No external lookup needed."
                    },
                    "freeShippingOnly": {
                        "title": "Free shipping only",
                        "type": "boolean",
                        "description": "Only return listings that ship free.",
                        "default": false
                    },
                    "soldWithinDays": {
                        "title": "Sold within (days)",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "For sold/completed runs: only keep listings that sold within the last N days. With the default 'Ended recently' sort, the actor stops paging as soon as it's past the window — fast, precise recent comps. Leave blank for no date limit."
                    },
                    "expandKeywords": {
                        "title": "Expand keywords (auto-suggest)",
                        "type": "boolean",
                        "description": "Before searching, expand each seed keyword into related terms eBay shoppers actually search, and scrape those too. Great for broad market research.",
                        "default": false
                    },
                    "expansionLimit": {
                        "title": "Expansions per keyword",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "When keyword expansion is on, how many related terms to add per seed.",
                        "default": 5
                    },
                    "includeAdIntelligence": {
                        "title": "Include promoted-listing bid intel",
                        "type": "boolean",
                        "description": "Capture eBay Promoted Listings auction data per keyword (advertiser bid + actual clearing CPC + promoted items) into a separate `promoted-ads` dataset. Populated for ~80% of commercial keywords; a point-in-time snapshot. (Per-listing `isSponsored` flags are always included regardless.)",
                        "default": true
                    },
                    "dedupeAcrossQueries": {
                        "title": "Dedupe across keywords",
                        "type": "boolean",
                        "description": "When running multiple keywords, drop a listing on later keywords if its `itemId` was already seen. The first row keeps its `sourceQuery`.",
                        "default": true
                    },
                    "concurrentQueries": {
                        "title": "Concurrent keywords",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "How many keywords to scrape in parallel. 1 = sequential. Higher = faster but risks rate-limiting.",
                        "default": 2
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Optional — leave OFF for US (works great with no proxy). Turn ON Apify Residential only for non-US marketplaces, where it auto-routes through an in-country IP and surfaces more local inventory (see the README chart). For US bulk runs, Datacenter is a cheap alternative.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
