# eBay Sold Listings API (`epicscrapers/ebay-sold-listings-api`) Actor

Extract recent sold eBay listings with prices, shipping costs, sale dates, conditions, sellers, and URLs. Search eight marketplaces with date, condition, and price filters, then export structured data or access it through the Apify API.

- **URL**: https://apify.com/epicscrapers/ebay-sold-listings-api.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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 Products Scraper

Get structured data from completed and sold eBay listings. Use the data to research sold prices, validate product demand, compare marketplaces, and monitor second-hand products.

The Actor searches recent eBay sales by keyword. It returns the item title, sold price, shipping cost, total price, condition, sale date, seller, item location, image, and listing URL. You do not need an eBay API key or an eBay seller account.

### Why use this eBay sold listings scraper?

A current listing shows an asking price. A sold listing shows a price that a buyer accepted. This data can help you make better pricing and sourcing decisions.

Use this Actor to:

- Research the market value of used products.
- Find recent eBay sold prices.
- Compare product demand across eBay marketplaces.
- Check prices before you buy products for resale.
- Monitor collectibles, electronics, fashion, parts, and refurbished products.
- Build price history, market research, and product analytics tools.
- Export eBay sales data for a spreadsheet, database, dashboard, or AI workflow.

### Main features

- Search one or more product keywords in one run.
- Get only completed and sold eBay items.
- Select new items, used items, or all conditions.
- Set a minimum price and a maximum price.
- Set the number of days to search.
- Set a result limit for each keyword.
- Search eight eBay marketplaces.
- Get structured JSON data in an Apify dataset.
- Export results in JSON, CSV, Excel, XML, or RSS format.
- Run the scraper manually, on a schedule, through the API, or in an Apify integration.

### Supported eBay marketplaces

| Input value   | Marketplace    | Typical currency |
| ------------- | -------------- | ---------------- |
| `ebay.com`    | United States  | USD              |
| `ebay.co.uk`  | United Kingdom | GBP              |
| `ebay.de`     | Germany        | EUR              |
| `ebay.fr`     | France         | EUR              |
| `ebay.it`     | Italy          | EUR              |
| `ebay.es`     | Spain          | EUR              |
| `ebay.ca`     | Canada         | CAD              |
| `ebay.com.au` | Australia      | AUD              |

### How to scrape sold items on eBay

1. Open the Actor in Apify Console.
2. Add one or more terms to **Search keywords**.
3. Select the eBay site.
4. Set the condition, date range, price range, and result limit.
5. Select **Start**.
6. Open the **Dataset** tab when the run is complete.
7. Download the data or send it to another service.

For a first test, use this input:

```json
{
    "keywords": ["iphone 12", "sony wh-1000xm5"],
    "site": "ebay.com",
    "condition": "used",
    "days": 30,
    "minPrice": 50,
    "maxPrice": 1000,
    "maxItems": 100
}
```

### Input

| Field       | Type             | Required | Default    | Description                                                                   |
| ----------- | ---------------- | -------- | ---------- | ----------------------------------------------------------------------------- |
| `keywords`  | array of strings | Yes      | —          | Product names or search terms.                                                |
| `site`      | string           | No       | `ebay.com` | eBay marketplace to search. Use a value from the supported marketplace table. |
| `condition` | string           | No       | `all`      | Condition filter. Use `all`, `new`, or `used`.                                |
| `days`      | integer          | No       | `30`       | Get listings sold in the last specified number of days. Minimum value: `1`.   |
| `minPrice`  | number           | No       | —          | Minimum sold price in the currency of the selected marketplace.               |
| `maxPrice`  | number           | No       | —          | Maximum sold price in the currency of the selected marketplace.               |
| `maxItems`  | integer          | No       | `100`      | Maximum number of results for each keyword. Minimum value: `1`.               |

If you use multiple keywords, the Actor applies `maxItems` to each keyword. For example, two keywords and `maxItems: 100` can produce up to 200 records.

### Output

The Actor stores one record for each sold listing in the default dataset. A record has this format:

```json
{
    "searchQuery": "iphone 12",
    "site": "ebay.com",
    "listingId": "128010523042",
    "title": "Apple iPhone 12 Pro Max - 128 GB",
    "url": "https://www.ebay.com/itm/128010523042",
    "imageUrl": "https://i.ebayimg.com/images/g/example/s-l225.jpg",
    "soldPrice": 159.99,
    "currency": "USD",
    "shippingPrice": 8.49,
    "shippingText": "+$8.49 delivery",
    "totalPrice": 168.48,
    "condition": "Parts Only",
    "conditionDetails": null,
    "soldAt": "2026-08-04T00:00:00.000Z",
    "soldDateText": "Sold Aug 4, 2026",
    "seller": {
        "username": "example_seller",
        "feedbackScore": null,
        "feedbackPercent": null,
        "isStore": false
    },
    "itemLocation": "Located in United States",
    "quantitySold": 0,
    "isPromoted": false,
    "hasBestOffer": false,
    "returnsAccepted": false
}
```

#### Output field reference

| Field              | Description                                                             |
| ------------------ | ----------------------------------------------------------------------- |
| `searchQuery`      | Keyword that found the listing.                                         |
| `site`             | eBay marketplace that the Actor searched.                               |
| `listingId`        | Unique eBay listing ID.                                                 |
| `title`            | Listing title.                                                          |
| `url`              | URL of the eBay item.                                                   |
| `imageUrl`         | URL of the primary item image.                                          |
| `soldPrice`        | Item sale price, without the shipping price.                            |
| `currency`         | ISO currency code, such as `USD`, `GBP`, `EUR`, `CAD`, or `AUD`.        |
| `shippingPrice`    | Numeric shipping price. Free shipping has the value `0`.                |
| `shippingText`     | Shipping text from the listing.                                         |
| `totalPrice`       | Sum of `soldPrice` and `shippingPrice`, when both values are available. |
| `condition`        | Item condition shown by eBay.                                           |
| `conditionDetails` | Additional condition data, when available.                              |
| `soldAt`           | Sale date in ISO 8601 format.                                           |
| `soldDateText`     | Original sale-date text.                                                |
| `seller`           | Seller name and available seller data.                                  |
| `itemLocation`     | Item location text.                                                     |
| `quantitySold`     | Sold quantity, when available.                                          |
| `isPromoted`       | Indicates if the result is a promoted listing.                          |
| `hasBestOffer`     | Indicates if best-offer text is present.                                |
| `returnsAccepted`  | Indicates if return text is present.                                    |

Some fields can be `null`. eBay does not supply all fields for all listings and marketplaces.

### Run with the Apify API

Use your Apify API token and send a POST request:

```bash
curl "https://api.apify.com/v2/acts/epicscrapers~ebay-sold-products/runs?token=YOUR_APIFY_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "keywords": ["vintage watch"],
    "site": "ebay.com",
    "condition": "used",
    "days": 14,
    "maxItems": 50
  }'
```

The request starts a run. Use the run response to get the default dataset ID and download the results.

### Run with the Apify JavaScript client

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('epicscrapers/ebay-sold-products').call({
    keywords: ['vintage watch'],
    site: 'ebay.com',
    condition: 'used',
    days: 14,
    maxItems: 50,
});

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

### Run with the Apify Python client

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("epicscrapers/ebay-sold-products").call(run_input={
    "keywords": ["vintage watch"],
    "site": "ebay.com",
    "condition": "used",
    "days": 14,
    "maxItems": 50,
})

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

### Automate eBay sold-price research

You can schedule the Actor in Apify Console. For example, run the same searches each day and send new data to Google Sheets, Make, Zapier, Slack, a webhook, or your database. You can also connect the dataset to an AI agent for product classification or price analysis.

Use a stable set of keywords and filters when you compare results over time. Store the sale date, listing ID, sold price, shipping price, and currency with each record.

### Limits and data quality

- eBay can change its service or result format. Such a change can affect the available data.
- A listing can omit seller, shipping, quantity, location, or condition data.
- `hasBestOffer` shows that best-offer text is present. It does not show the private offer amount.
- `totalPrice` is the item price plus the displayed shipping price. It does not include tax, import fees, or other charges.
- Currency and price filters apply to the selected marketplace.
- Search results can change between runs.
- The Actor uses an Apify Residential Proxy. The run must have access to this proxy service.

### Responsible use

Use this Actor only for lawful purposes. Follow the eBay terms, applicable laws, and data protection rules. Do not use the data to send spam or to make prohibited profiles of persons.

### Support

If you find a problem, open an issue on the Actor page. Include the input, marketplace, run ID, and a short description of the expected result. Do not include your Apify API token.

### Legal notice

This Actor is an independent data extraction tool. It is not an official eBay product and is not endorsed by eBay. eBay is a trademark of eBay Inc.

# Actor input Schema

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

One or more product names or search terms. Can be a single string or an array of strings.

## `site` (type: `string`):

Which eBay marketplace to search.

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

Filter by item condition.

## `days` (type: `integer`):

Only return listings sold within the last N days.

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

Optional minimum sold price (in the marketplace's currency).

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

Optional maximum sold price (in the marketplace's currency).

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

Maximum total results to return across all keywords.

## Actor input object example

```json
{
  "site": "ebay.com",
  "condition": "all",
  "days": 30,
  "maxItems": 100
}
```

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/ebay-sold-listings-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("epicscrapers/ebay-sold-listings-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call epicscrapers/ebay-sold-listings-api --silent --output-dataset

```

## MCP server setup

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

```

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/x5cAYzfb7eXRZt5JI/builds/PiO429tzarGKdS1Nc/openapi.json
