# eBay Sold Listings Scraper — Real Sold Prices & Dates (`omao/ebay-sold-scraper`) Actor

Scrape eBay sold & completed listings by keyword: real sold prices, sold dates, condition, shipping, seller and clean item URLs. Ideal for price research, reselling and market-value analysis. ~60 listings/page, sites US/UK/DE/FR/IT/ES/CA/AU.

- **URL**: https://apify.com/omao/ebay-sold-scraper.md
- **Developed by:** [Marouane Oulabass](https://apify.com/omao) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 96.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 sold 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 to JSON, CSV & Google Sheets

**Scrape eBay sold and completed listings by keyword and get the real final sold price, sold date, condition, shipping, seller and a clean item URL — as JSON, CSV or Excel.** Asking prices are noise; sold prices are the truth. Use them to price inventory, spot arbitrage and value any item with confidence.

> AI-agent ready: this Actor is callable and payable by AI agents via [x402](https://docs.apify.com/platform/integrations/x402) (USDC on Base), no Apify account required.

### How to see what an item actually sold for on eBay

eBay hides sold prices behind a filter and removes them after ~90 days. This scraper pulls the **SOLD & completed** listings for any keyword in real time and returns structured data — the real transaction price and date, not the asking price. No eBay account, no eBay API key needed.

### How to export eBay sold listings to Google Sheets, CSV or Excel

Run the Actor with your keywords, then export the results in one click: the dataset downloads as **CSV, Excel, JSON or HTML**, or you pull it live via the API into Google Sheets, a database or your app. One clean row per sold listing — ready to analyze.

### eBay sold prices as JSON — what you get (one row per sold listing)

| Field | Description |
|---|---|
| `soldPrice` + `currency` | 💰 **The real price it sold for** (USD/GBP/EUR/…) |
| `soldDate` | 📅 When it sold ("Sold Oct 5, 2024") |
| `title` | Listing title |
| `condition` | New / Pre-Owned / … |
| `isAuction` + `bids` | Auction vs Buy-It-Now, with bid count |
| `shippingText` | Shipping / delivery cost label |
| `seller` | Seller username |
| `permalink` | Clean item URL (tracking stripped) |
| `thumbnail` | Product image URL |
| `searchTerm`, `searchRank`, `site`, `scrapedAt` | Provenance |

### Example — scrape eBay sold data by keyword

**Input**

```json
{ "keywords": ["nintendo switch oled", "iphone 13 128gb"], "ebaySite": "US", "maxResults": 120 }
```

**Output (one item)**

```json
{
  "title": "Nintendo Switch OLED White Console",
  "soldPrice": 195.00, "currency": "USD", "soldDate": "Sold Jul 12, 2026",
  "condition": "Pre-Owned", "isAuction": false, "shippingText": "Free delivery",
  "seller": "sheffs_kard_kitchen", "permalink": "https://www.ebay.com/itm/117297819333"
}
```

### What people use eBay sold data for

- **Reselling & flipping** — price your listings to actually sell, and find undervalued buys.
- **Arbitrage & dropshipping** — compare sold prices across marketplaces (US/UK/DE/FR…) to find margins.
- **Price research & item valuation** — appraise collectibles, electronics, sneakers, trading cards and parts by their real market value.
- **eBay price history datasets** — run a keyword on a schedule to build your own sold-price history over time.
- **AI / LLM & RAG pipelines** — feed clean, real-world resale price data to your models and agents.

### Why this eBay sold listings scraper

- ✅ **Real SOLD data** — not active/asking listings. This is the hard part, and it's what you actually need.
- 🌍 **8 marketplaces** — US, UK, DE, FR, IT, ES, CA, AU. Compare prices across regions.
- 🎯 **100% field fidelity** — measured 100% fill on sold price, date, condition, seller, URL and image across 360 real listings.
- ⚡ **Fast & affordable** — ~60 listings per page, pay only per listing returned.
- 🧹 **Clean output** — normalized prices, clean URLs, ready for Sheets/Excel/your database or API.

### Input options

- `keywords` *(required)* — one search per keyword.
- `ebaySite` — `US`, `UK`, `DE`, `FR`, `IT`, `ES`, `CA`, `AU` (default `US`).
- `maxResults` — sold listings per keyword (default 120, ~60/page).
- `maxItems` — optional global cap across all keywords.

### FAQ

**How do I see eBay sold prices?** Run this Actor with your keyword — it returns the real sold price and sold date for each completed listing, even after eBay hides them.

**Does it return active (asking) listings?** No — only **sold/completed** listings, i.e. real transaction prices.

**Do I need an eBay account or API key?** No — it scrapes the public eBay results in real time. No account, no eBay API key.

**How do I export eBay sold listings to Google Sheets or CSV?** Run the Actor, then export the dataset as CSV/Excel/JSON, or connect the API to Google Sheets.

**Which countries and currencies?** 8 eBay marketplaces (see `ebaySite`); prices are returned in each site's currency.

**How far back does eBay sold data go?** eBay typically shows completed listings from roughly the last 90 days; this scraper returns what's currently listed as sold for your keyword.

**How fresh is the data?** Live — it scrapes eBay in real time on each run.

**What does it cost?** Pay-per-result — you're only charged for sold listings actually returned. Try it with a small `maxResults` first.

***

*Tip: run the same keyword weekly and diff the results to build your own eBay sold-price history dataset.*

# Actor input Schema

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

Keywords to look up among eBay SOLD/completed listings (one search per keyword).

## `ebaySite` (type: `string`):

Which eBay site to search.

## `maxResults` (type: `integer`):

Upper bound of sold listings to collect per keyword (about 60 per page).

## `maxItems` (type: `integer`):

Global cap across all keywords. Leave empty for no global cap.

## `debugSnapshots` (type: `boolean`):

Save an HTML snapshot of the first results page to the key-value store (diagnostics).

## `healthCheckMode` (type: `boolean`):

Internal monitoring: verify extraction-fidelity thresholds and FAIL the run if broken (no billing). Used by the daily health canary.

## `warmup` (type: `boolean`):

Visit the eBay homepage first so the session carries normal cookies before hitting the search. Helps against eBay's anti-bot challenges. Leave on unless you are debugging.

## Actor input object example

```json
{
  "keywords": [
    "nintendo switch",
    "iphone 13 128gb"
  ],
  "ebaySite": "US",
  "maxResults": 120,
  "debugSnapshots": true,
  "healthCheckMode": false,
  "warmup": true
}
```

# Actor output Schema

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

All scraped sold listings (title, sold price, sold date, condition, shipping, seller, clean URL).

# 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": [
        "nintendo switch"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("omao/ebay-sold-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": ["nintendo switch"] }

# Run the Actor and wait for it to finish
run = client.actor("omao/ebay-sold-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 '{
  "keywords": [
    "nintendo switch"
  ]
}' |
apify call omao/ebay-sold-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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