# eBay Sold Listings Scraper (`originalvi/ebay-sold-listings`) Actor

Sold & completed eBay listings for any keyword: real sale prices, dates, condition, shipping, plus min/avg/median price stats.

- **URL**: https://apify.com/originalvi/ebay-sold-listings.md
- **Developed by:** [Andrew Schneidwind](https://apify.com/originalvi) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 1 total users, 0 monthly users, 46.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 sold listing scrapeds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## eBay Sold Listings Scraper — real sold prices, not asking prices

Find out what things **actually sell for** on eBay. This Actor scrapes **sold & completed listings** for any keyword and returns real sale prices, sold dates, condition, and shipping, plus ready-made **price statistics** (min / max / average / median) per keyword.

Asking prices lie. Sold prices don't. Whether you're pricing inventory, researching a product niche, or valuing a collection, completed-listing data is the closest thing to a true market price that exists for second-hand and collectible goods.

### What you get

One dataset item per sold listing:

```json
{
  "keyword": "iphone 14 pro 256gb",
  "title": "Apple iPhone 14 Pro 256GB Deep Purple Unlocked",
  "price": 612.5,
  "currency": "$",
  "priceText": "$612.50",
  "soldDate": "Jun 28, 2026",
  "condition": "Pre-Owned",
  "shipping": "Free shipping",
  "bids": null,
  "url": "https://www.ebay.com/itm/1234567890",
  "imageUrl": "https://i.ebayimg.com/...",
  "status": "SUCCEEDED"
}
```

Plus one `PRICE_STATS` summary item per keyword:

```json
{
  "keyword": "iphone 14 pro 256gb",
  "type": "PRICE_STATS",
  "soldCount": 50,
  "minPrice": 380,
  "maxPrice": 799,
  "averagePrice": 601.34,
  "medianPrice": 615,
  "currency": "$"
}
```

### How to scrape eBay sold listings

1. Enter one or more **keywords** — one search runs per keyword.
2. Optionally set a **condition filter** (Any / New / Used), a **max listings cap**, and the **eBay site** (US, UK, Germany, Australia, Canada, France, Italy, Spain).
3. Click **Start**. Results land in the dataset within seconds, ready to export as JSON, CSV, or Excel.

No login, no eBay API key, no developer account needed.

### Input

| Field | Description |
|---|---|
| `keywords` | One search per keyword |
| `maxItemsPerKeyword` | Cap on listings per keyword (default 100, max 2000) |
| `condition` | Any / New / Used |
| `ebayDomain` | eBay.com, .co.uk, .de, .com.au, .ca, .fr, .it, .es |
| `includePriceStats` | Add the per-keyword stats item (default on) |
| `proxyConfiguration` | Apify Proxy settings — keep **residential** (default) |

### Pricing

You pay a small fee **per sold listing delivered** — blocked or failed searches are never charged. No subscriptions, no minimums, no monthly rental. Scraping 1,000 sold listings costs $1.00 plus a few cents of platform usage.

### Use cases

- **Resellers & flippers** — price inventory using real sale data, not wishful asking prices. Check what that thrift-store find actually moves for before you buy it.
- **Product research & e-commerce** — validate demand and margins before sourcing a product. Median sold price beats gut feeling.
- **Collectors** — track true market value of trading cards, coins, watches, sneakers, vinyl, LEGO sets.
- **Repricing & valuation tools** — feed live comp data into your own pricing engine via the Apify API.
- **Insurance & appraisals** — document fair market value with real transaction evidence.

### Run it from your own code

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("originalvi/ebay-sold-listings").call(run_input={
    "keywords": ["pokemon charizard psa 9", "nintendo switch oled"],
    "maxItemsPerKeyword": 100,
    "condition": "any",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

Works the same with the JavaScript `apify-client`, raw HTTP API, or no-code integrations (Make, Zapier, n8n). You can also schedule daily runs and export straight to Google Sheets.

### FAQ

**Is it legal to scrape eBay sold listings?**
This Actor only collects publicly visible data — the same sold-listing results anyone can see in a browser. No login is used and no personal data is collected. That said, how you use the data is your responsibility; consult a lawyer for your specific situation.

**Why do I see `BLOCKED` errors?**
eBay aggressively blocks datacenter IPs. Keep the proxy configuration on **residential** (the default). Runs that deliver nothing are never charged.

**How far back does sold-listing data go?**
eBay shows roughly the last 90 days of sold/completed listings in search results, capped at about 10,000 items per query. For deeper history, split your search by condition or more specific keywords.

**Can I scrape eBay UK / Germany / Australia instead of eBay US?**
Yes — set `ebayDomain` to `ebay.co.uk`, `ebay.de`, `ebay.com.au`, `ebay.ca`, `ebay.fr`, `ebay.it`, or `ebay.es`. Prices come back in the local currency.

**How is this different from eBay's Terapeak?**
Terapeak requires an eBay seller account and keeps data inside eBay's UI. This Actor gives you raw, structured data you can pipe anywhere — spreadsheets, dashboards, pricing models, AI agents.

**Does it return active listings too?**
No — sold/completed only. That's the point: real transaction prices.

### Tips for better results

- Be specific with keywords: `iphone 14 pro 256gb unlocked` beats `iphone` — the price statistics get much more meaningful.
- Use the `condition` filter to separate new vs. used markets; they often differ by 30%+.
- Schedule a daily run to build your own price-history database — eBay only shows ~90 days.

### More Actors by this developer

- [Website Screenshot Pro](https://apify.com/originalvi/website-screenshot-pro) — pixel-perfect full-page screenshots with cookie-banner removal
- [Google Trends Explorer](https://apify.com/originalvi/google-trends-explorer) — interest over time, related queries & topics
- [App Store Reviews Scraper](https://apify.com/originalvi/app-store-reviews-scraper) — iOS reviews & ratings across 20+ countries
- [Google News Scraper](https://apify.com/originalvi/google-news-scraper) — structured news articles by keyword
- [Hacker News Scraper](https://apify.com/originalvi/hacker-news-scraper) — HN stories & comments by keyword, author, or date

### Found a problem?

Open an issue on the **Issues** tab and I'll fix it fast — usually within a day.

# Actor input Schema

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

One search per keyword, e.g. `iphone 14 pro 256gb`. Results are sold/completed listings only.

## `maxItemsPerKeyword` (type: `integer`):

Upper limit of sold listings to return for each keyword.

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

Filter by item condition.

## `ebayDomain` (type: `string`):

Which eBay marketplace to search.

## `includePriceStats` (type: `boolean`):

Push one extra summary item per keyword with min/max/average/median sold price.

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

Proxies to use. Residential is strongly recommended — eBay blocks datacenter IPs. Leave as-is unless you have your own proxies.

## Actor input object example

```json
{
  "keywords": [
    "iphone 14 pro"
  ],
  "maxItemsPerKeyword": 100,
  "condition": "any",
  "ebayDomain": "ebay.com",
  "includePriceStats": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        "iphone 14 pro"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("originalvi/ebay-sold-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 = {
    "keywords": ["iphone 14 pro"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("originalvi/ebay-sold-listings").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 '{
  "keywords": [
    "iphone 14 pro"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call originalvi/ebay-sold-listings --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/wxIA6j8bwDUMUTIEV/builds/x6YdoxULJmVSfGbE0/openapi.json
