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

Scrape eBay sold listings from 8 marketplaces with no login or cookies. Get real sold prices, sale age, seller rating, condition and shipping from search, seller or listing links. Bulk input and auto proxy switching. Export JSON, CSV or Excel for price comps and resale research.

- **URL**: https://apify.com/data_minds/ebay-sold-listings-scraper.md
- **Developed by:** [Data Minds](https://apify.com/data_minds) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

**eBay Sold Listings Scraper** is an Apify Actor that extracts real sold prices, sale age, seller ratings and optional item details from eBay sold listings in bulk, with no login or cookies. Paste search, seller or listing links, choose one of eight eBay sites and export JSON, CSV or Excel for price research and reselling. Pay per result: **from $0.0025 per result ($2.50 per 1,000) on the Gold plan**. [▶ Try it free](https://apify.com/data_minds/ebay-sold-listings-scraper)

### What can eBay Sold Listings Scraper do?

- 💰 **Real sold prices at scale** - collect eBay sold prices and currencies for any search term, seller or single listing.
- 🔗 **Mix link types** - paste search links, seller links, listing links or plain keywords in one run.
- 📊 **Price statistics included** - get median, mean, minimum and maximum sold price per keyword and currency.
- 🏪 **Seller and rating data** - see the seller, positive share, seller score and the rating left for each sale.
- 🔬 **Optional item details** - add end date, condition, category, shipping price, total price, location and image.
- 🌎 **Eight eBay sites** - ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca and ebay.com.au.
- ⚡ **Live output** - every sold listing appears in the dataset as soon as it is found.
- 🔌 **Export and integrations** - JSON, CSV, Excel, API, schedules and webhooks.

#### What data can I extract from eBay?

| Field | Description |
|---|---|
| 🏷 `itemId` | eBay item number of the listing. |
| 🔗 `url` | Link to the eBay listing page. |
| 📝 `title` | Listing title as shown at the time of the sale. |
| 💵 `soldPrice` | Price the buyer paid. |
| 💱 `soldCurrency` | ISO currency code of the sold price. |
| 📅 `soldWithin` | Age bucket of the sale: `30d`, `6m`, `12m` or `12m+` (older). |
| 🗓 `soldNotBefore` | Earliest possible sale date for the age bucket (empty for `12m+`). |
| 🏪 `sellerUsername` | eBay username of the seller. |
| 📈 `sellerPositivePercent` | Seller positive rating share (search-term runs). |
| 🎖 `sellerFeedbackScore` | Seller rating score (search-term runs). |
| ⭐ `feedbackRating` | positive, neutral or negative rating left for the sale. |
| ✅ `verifiedPurchase` | True when eBay marks the rating as a verified purchase. |
| 🔍 `keyword` | Search term that matched the sale (only when keywords are used). |
| 🌐 `site` | eBay site the sale belongs to. |
| ⏱ `scrapedAt` | UTC time the row was collected. |
| 🔬 `endedOn`, `listingState` | Exact end date and `ended` or `active` state (item details and listing lookups). |
| 🧰 `condition`, `category` | Item condition and category path (item details and listing lookups). |
| 🚚 `shippingPrice`, `shippingCurrency`, `totalPrice` | Shipping cost, its currency, and sold price plus shipping when both use the same currency (item details and listing lookups). |
| 📍 `location`, `imageUrl` | Where the item ships from and the main image (item details and listing lookups). |
| 🛒 `price`, `currency`, `quantityAvailable`, `quantitySold` | Price shown on the listing, its currency and quantities (listing lookups only). |

eBay publishes the age of a sale only as a bucket, so the exact sale date is not included unless the item page still shows it.

Use it as an eBay sold listings extractor when you need sold comps in bulk. It also works as an eBay completed listings scraper for research, and you can run it on a schedule as an eBay price tracker.

### What can you do with the data from eBay?

Use eBay sold price analysis to check the average sold price before you set a listing price. Resellers get eBay sold listings for resellers in one export.

Each row adds the eBay sold date bucket and the eBay seller feedback score. With item details on, it also adds eBay shipping price data and eBay item condition data, which suits an eBay flipping price check.

**🎯 eBay price research for resellers**

1. Paste a search link or a keyword into `urls`, for example a phone model.
2. Set `soldWithin` to `6m` and add `excludeWords` such as `for parts`.
3. Open the Price statistics table for the median eBay sold price before you buy or list.

**🏪 Seller research**

1. Paste a seller profile link into `urls`.
2. Turn on `includeItemDetails` to add condition, category and shipping.
3. Export the sold listings by seller to a spreadsheet and compare prices and ratings.

**📊 eBay market research and competitor price analysis**

1. Add several keywords in `keywords` and pick your `ebaySite`.
2. Set `minPrice` and `maxPrice` to focus on one price band.
3. Schedule the run for eBay product price monitoring and eBay sold price history over time.

**📦 eBay price comps for collectibles**

1. Paste single listing links to look up their current page values.
2. Combine them with search links to compare sold prices against live listings.
3. Export eBay sold listings to CSV or Excel for your records.

### How do I use eBay Sold Listings Scraper?

Wondering how to see sold listings on eBay, or what did it sell for on eBay? Follow these steps.

1. Open **eBay Sold Listings Scraper** on Apify and click **Try for free**.
2. Paste eBay search, seller or listing links into **eBay links**, or add search phrases in **Extra search keywords**.
3. Choose the **eBay marketplace** and the **Sold within** window.
4. Set **Maximum listings** and optional price limits or exclude words.
5. Turn on **Add item details** if you need condition, category and shipping.
6. Click **Start** and wait for the run to finish.
7. Open the **Dataset** tab and export the sold listings as JSON, CSV or Excel.

### How much does it cost to scrape eBay?

eBay Sold Listings Scraper uses pay-per-event pricing: you pay for each sold listing saved to the dataset. Your price per result depends on your Apify plan. Apify platform usage is billed in addition.

| Plan | Price per result | Per 1,000 results |
|---|---|---|
| 🆓 Free | $0.004 | $4.00 |
| 🥉 Bronze | $0.0035 | $3.50 |
| 🥈 Silver | $0.003 | $3.00 |
| 🥇 Gold | $0.0025 | $2.50 |

Each run also starts with one start event of $0.00005 (default memory 1 GB; the event is $0.00005 per GB, minimum one). Rows in the sellers, price statistics and inputs-without-results tables are not charged as results.

**Example:** 500 sold listings on the Silver plan cost 500 x $0.003 = $1.50, plus the $0.00005 start event and platform usage.

#### Is scraping eBay free?

The Free plan price is $0.004 per result, and Apify platform usage is billed in addition. Set a maximum spend per run in the run options and the Actor stops cleanly when it is reached.

#### How much does eBay Sold Listings Scraper cost per 1,000 results?

On the Gold plan, 1,000 results cost $2.50. Silver costs $3.00, Bronze costs $3.50 and Free costs $4.00 per 1,000 results. Add the $0.00005 start event per run and the platform usage billed by Apify. Only sold listing rows saved to the dataset count as results.

### Input

Only **eBay links** (`urls`) is required. Everything else has a default. Search links and plain keywords look up sold listings for that term, seller links read that seller's recent sales, and listing links look up one listing. You can mix all three in one run.

| Field | Type | Required | Description | Default / example |
|---|---|---|---|---|
| `urls` | array | yes | eBay search, seller or listing links, or plain keywords. | `https://www.ebay.com/sch/i.html?_nkw=iphone+13+pro+max+128gb` |
| `keywords` | array | no | Extra search phrases. A sold listing must contain all words of a phrase, in any order. | empty |
| `maxItems` | integer | no | Stop after this many sold listings in total. `0` means no limit. | `10` |
| `includeItemDetails` | boolean | no | Add end date, condition, category, shipping price, total price, item location and image. Slower, one extra request per listing. | `false` |
| `ebaySite` | string | no | Which eBay site to search: ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca or ebay.com.au. Use ebay.co.uk for eBay sold listings UK or ebay.de for eBay sold listings Germany. Empty uses the site of your links, otherwise ebay.com. | empty |
| `soldWithin` | string | no | Keep sales inside this window: `30d` (past month), `6m`, `12m` or `all`. | `6m` |
| `minPrice` | number | no | Skip sales below this price. `0` means no lower limit. | `0` |
| `maxPrice` | number | no | Skip sales above this price. `0` means no upper limit. | `0` |
| `excludeWords` | array | no | Drop sold listings whose title contains any of these words or phrases. | `["cracked", "for parts"]` |
| `sellersPerKeyword` | integer | no | How many sellers to read for each search term (1 to 500). More sellers find more sales but take longer. | `60` |
| `searchPages` | integer | no | How many result pages (120 listings each, 1 to 10) are used per search term. | `3` |
| `feedbackPages` | integer | no | How many pages of each seller's newest sales to read (200 sales per page, 1 to 20). | `3` |
| `concurrency` | integer | no | Requests that run at the same time (1 to 10). Lower it if eBay slows the run down. | `4` |
| `proxyConfiguration` | object | no | Optional connection settings. The default works for most runs. | `{"useApifyProxy": false}` |

#### Example input

```json
{
  "urls": [
    "https://www.ebay.com/sch/i.html?_nkw=iphone+13+pro+max+128gb"
  ],
  "keywords": [],
  "maxItems": 100,
  "includeItemDetails": true,
  "ebaySite": "ebay.com",
  "soldWithin": "6m",
  "minPrice": 0,
  "maxPrice": 0,
  "excludeWords": ["cracked", "for parts"]
}
```

### Output

Results go to the Apify Dataset. Export them as JSON, CSV, Excel, XML or HTML from the Dataset tab or the API. The dataset has these views: **Sold listings**, **Sellers and ratings**, **Item details** and **Listing lookups**. Three extra tables are saved beside it: **Sellers read**, **Price statistics** and **Inputs without results**. A **SUMMARY** record in the key-value store holds the run totals.

#### Sold listing (search or seller link, item details on)

```json
{
  "itemId": "123456789012",
  "url": "https://example.com/itm/123456789012",
  "title": "Example phone 128GB",
  "soldPrice": 499.0,
  "soldCurrency": "USD",
  "soldWithin": "6m",
  "soldNotBefore": "2026-04-18",
  "endedOn": "2026-09-30",
  "listingState": "ended",
  "condition": "Used",
  "category": "Cell Phones > Smartphones",
  "shippingPrice": 12.5,
  "shippingCurrency": "USD",
  "totalPrice": 511.5,
  "location": "Example City, Example State, United States",
  "imageUrl": "https://example.com/image.jpg",
  "sellerUsername": "example_seller",
  "sellerPositivePercent": 99.1,
  "sellerFeedbackScore": 1200,
  "feedbackRating": "positive",
  "verifiedPurchase": true,
  "keyword": "example phone 128gb",
  "site": "ebay.com",
  "scrapedAt": "2026-10-18T10:00:00.000Z"
}
```

#### Listing lookup (single listing link)

```json
{
  "itemId": "123456789012",
  "url": "https://example.com/itm/123456789012",
  "title": "Example phone 128GB",
  "listingState": "ended",
  "price": 499.0,
  "currency": "USD",
  "endedOn": "2026-09-30",
  "condition": "Used",
  "category": "Cell Phones > Smartphones",
  "quantityAvailable": 0,
  "quantitySold": 3,
  "shippingPrice": 12.5,
  "shippingCurrency": "USD",
  "totalPrice": 511.5,
  "location": "Example City, Example State, United States",
  "imageUrl": "https://example.com/image.jpg",
  "site": "ebay.com",
  "scrapedAt": "2026-10-18T10:00:00.000Z"
}
```

#### Price statistics (one row per keyword and currency)

```json
{
  "keyword": "example phone 128gb",
  "currency": "USD",
  "sales": 42,
  "median": 495.0,
  "mean": 501.25,
  "min": 320.0,
  "max": 640.0
}
```

#### Notes and limitations

- Sale age is an age bucket (past month, 6 months, 12 months or older); `soldNotBefore` is the earliest possible date.
- Exact end dates, condition, category and shipping need **Add item details**, and stay empty if the listing page is no longer available.
- `sellerPositivePercent` and `sellerFeedbackScore` are filled for search-term runs.
- Without item details the sold rows have no condition, category or shipping fields.
- Listing lookups return the values shown on the listing page and are not part of the price statistics.
- Sellers with more sales than **Sales pages per seller** reads are cut off, and older sales are skipped.
- The default **Maximum listings** is 10, so raise it (or set `0`) for larger runs.
- Prices are saved in the currency shown by the eBay site you choose.

### FAQ

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

The Actor collects publicly visible eBay data and needs no login. Whether your use is lawful depends on your country, your purpose and eBay's terms, so you stay responsible for compliance. Read Apify's overview at https://blog.apify.com/is-web-scraping-legal/ and consult a lawyer. This is not legal advice.

#### Do I need an eBay account, cookies or an API key?

No. eBay Sold Listings Scraper works without an eBay login, cookies or API key. You only need an Apify account. Paste public eBay search, seller or listing links, or add keywords, and start the run. The Actor does not ask for any eBay credentials at any point.

#### How many eBay sold listings can I get per run?

Set **Maximum listings** to the number you want, or `0` for no limit. The total depends on how many matching sales exist and on the depth settings: sellers per keyword, search pages and sales pages per seller. Raise them for more sales, but runs take longer.

#### How old are the sold prices on eBay?

Each sale carries an age bucket: past month, 6 months, 12 months or older. Use **Sold within** to keep only the window you need. Keywords must match every word of the listing title, so broad phrases return more sales than very specific ones.

#### Can I export eBay sold listings to CSV or Excel?

Yes. Open the Dataset tab after the run and download JSON, CSV, Excel, XML or HTML. The Price statistics table can be exported the same way, so you can build an eBay sold listings spreadsheet for price research without writing code.

#### Can I schedule runs or use webhooks and integrations?

Yes. Use Apify schedules to repeat a run daily or weekly and track eBay sold price history. Add a webhook to trigger your own workflow when a run finishes, or connect the dataset to tools such as Make, Zapier or n8n through Apify's integrations.

#### Can I use eBay Sold Listings Scraper with the Apify API or an MCP server?

Yes. You can start runs and read the dataset through the Apify API, and call the Actor from MCP clients through Apify's MCP server. The API tab of this Actor shows ready-made samples, and the full reference is at https://docs.apify.com/api/v2.

#### Why am I getting fewer results than expected?

Common reasons are a low **Maximum listings** value, narrow price or **Sold within** filters, or **Exclude words** removing titles. A keyword also needs every word in the title. Check the Inputs without results table, then raise sellers per keyword, search pages or sales pages per seller.

#### eBay Sold Listings Scraper not working?

Open the Inputs without results table to see which link or keyword failed and why. Then try again with fewer parallel requests or at a later time. If the problem continues, report it in the Issues tab of this Actor with your run link, and we will look into it.

### Related Actors

| Actor | Use it to |
|---|---|
| 🔥 [Google Trends : Trending Search Scraper](https://apify.com/data_minds/google-trends-trending-search-scraper) | Scrape Google Trends trending searches for 55+ countries to spot what is in demand before you research prices. |
| ⭐ [Trustpilot Reviews Scraper](https://apify.com/data_minds/trustpilot-reviews-scraper) | Extract customer reviews, star ratings and company replies from Trustpilot to check a brand or store. |
| 🌐 [Website Content Crawler](https://apify.com/data_minds/website-content-crawler) | Crawl a website from start URLs and save each page as clean text, Markdown and metadata. |

### Support and disclaimer

Found a bug or need a feature? Open an issue in the **Issues** tab. For custom solutions, integrations or questions, write to hello.dataminds@gmail.com. eBay Sold Listings Scraper is independent and not affiliated with [eBay](https://www.ebay.com/); eBay and other trademarks belong to their owners. It collects publicly available data only, and you are responsible for complying with applicable laws and the site's terms.

*Last updated: 2026-10-18*

# Actor input Schema

## `urls` (type: `array`):

One or more eBay links, in bulk. A search link (…/sch/i.html?\_nkw=iphone+13) looks up that search term; a seller link (…/usr/username) reads that seller's recent sales; a listing link (…/itm/123456789012) looks up one listing. You can mix all three. Plain keywords are accepted too.

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

Optional. Add search phrases here instead of pasting a search link. Sold listings must contain ALL words of a phrase, in any order.

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

Stop after this many sold listings in total. 0 means no limit.

## `includeItemDetails` (type: `boolean`):

Also open each listing to add exact end date, condition, category, shipping price, total price, item location and image. Slower, one extra request per listing.

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

Which eBay site to search. Leave empty to use the site of your links (otherwise ebay.com).

## `soldWithin` (type: `string`):

Only keep sales that happened inside this window. eBay publishes the age of a sale only as the past month, past 6 months, past 12 months or older.

## `minPrice` (type: `number`):

Skip sales below this price. 0 means no lower limit.

## `maxPrice` (type: `number`):

Skip sales above this price. 0 means no upper limit.

## `excludeWords` (type: `array`):

Drop sold listings whose title contains any of these words or phrases, for example 'for parts' or 'cracked'.

## `sellersPerKeyword` (type: `integer`):

How many sellers (most matching listings first) to read for each search term. More sellers means more sales found but a longer run.

## `searchPages` (type: `integer`):

How many result pages (120 listings each) are used to find sellers for each search term.

## `feedbackPages` (type: `integer`):

How many pages of each seller's newest sales to read (200 sales per page).

## `concurrency` (type: `integer`):

How many requests run at the same time. Lower it if eBay slows the run down.

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

Optional connection settings. The default works for most runs, and the run adjusts by itself if eBay refuses requests.

## Actor input object example

```json
{
  "urls": [
    "https://www.ebay.com/sch/i.html?_nkw=iphone+13+pro+max+128gb"
  ],
  "keywords": [],
  "maxItems": 10,
  "includeItemDetails": false,
  "soldWithin": "6m",
  "minPrice": 0,
  "maxPrice": 0,
  "excludeWords": [
    "cracked",
    "for parts"
  ],
  "sellersPerKeyword": 60,
  "searchPages": 3,
  "feedbackPages": 3,
  "concurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `soldListings` (type: `string`):

Every sold listing with price, sale age and seller.

## `sellerInfo` (type: `string`):

Seller score, positive share and the rating left for each sale.

## `itemDetails` (type: `string`):

End date, condition, category, shipping and location (when item details are on).

## `itemLookups` (type: `string`):

Single listings looked up by link.

## `sellers` (type: `string`):

One row per seller that was read.

## `priceStats` (type: `string`):

Median, mean, min and max sold price per keyword and currency.

## `failedInputs` (type: `string`):

Keywords, sellers or listings that gave no result.

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

Totals for the whole run.

# 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 = {
    "urls": [
        "https://www.ebay.com/sch/i.html?_nkw=iphone+13+pro+max+128gb"
    ],
    "keywords": [],
    "excludeWords": [
        "cracked",
        "for parts"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_minds/ebay-sold-listings-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 = {
    "urls": ["https://www.ebay.com/sch/i.html?_nkw=iphone+13+pro+max+128gb"],
    "keywords": [],
    "excludeWords": [
        "cracked",
        "for parts",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_minds/ebay-sold-listings-scraper").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 '{
  "urls": [
    "https://www.ebay.com/sch/i.html?_nkw=iphone+13+pro+max+128gb"
  ],
  "keywords": [],
  "excludeWords": [
    "cracked",
    "for parts"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_minds/ebay-sold-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_minds/ebay-sold-listings-scraper"
        }
    }
}
```

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/40SPhzoksVYGpOOKn/builds/JWpmKVxqQ7Y8oqUFA/openapi.json
