# eBay Sold Listings Search (`cmfapps/ebay-sold-search`) Actor

Search recent sold eBay listings and export structured prices, sold dates, conditions, images, item IDs, and URLs. Supports up to 240 results and 1–90 day date filtering.

- **URL**: https://apify.com/cmfapps/ebay-sold-search.md
- **Developed by:** [Cody F](https://apify.com/cmfapps) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 sold listing results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Search

Search recent sold eBay listings and receive structured sale data in an Apify dataset. Use the results for resale research, pricing comparisons, market analysis, spreadsheets, or automated workflows.

The Actor returns public sold-listing search cards. It does not perform AI matching, valuations, authenticity checks, or guarantee that two products are identical.

### What you get

Each dataset item can include:

- eBay item ID and listing title
- Canonical listing URL and image URL
- Sold price and currency
- Item condition
- Parsed sold date
- The query used and scrape timestamp
- A `raw` object containing the source card fields used to build the normalized result

Fields that eBay does not display or that cannot be parsed are returned as `null`.

### Pricing

The result price is **$0.0015 per dataset item**, or **$1.50 per 1,000 results**. You pay for the number of items actually returned, not the requested maximum. For example, 240 returned items cost $0.36 and 60 returned items cost $0.09.

The Apify Console displays the complete run-pricing details before you start the Actor.

### Input

| Field | Type | Default | Allowed | Description |
| --- | --- | ---: | ---: | --- |
| `query` | string | required | 2–100 characters | Search phrase sent to eBay. |
| `count` | integer | `100` | 1–240 | Maximum number of results to return. |
| `daysToScrape` | integer | `30` | 1–90 | Return only listings with a parsed sold date within this many days. |
| `maxWaitSeconds` | integer | `900` | 60–3600 | Maximum total time to wait for backend capacity and processing. |

Example:

```json
{
  "query": "rtx 4080",
  "count": 240,
  "daysToScrape": 30,
  "maxWaitSeconds": 900
}
```

`count` is a maximum, not a guarantee. eBay may have fewer matching sold listings, omit dates from some cards, return duplicate items across pages, or temporarily stop serving a later page. The date filter excludes rows whose sold date is missing or older than the requested window.

### Output example

Results are written to the run's default dataset, one item per sold listing:

```json
{
  "marketplace": "ebay",
  "itemId": "123456789012",
  "title": "NVIDIA GeForce RTX 4080 16GB Graphics Card",
  "url": "https://www.ebay.com/itm/123456789012",
  "imageUrl": "https://i.ebayimg.com/images/example/s-l500.jpg",
  "soldPrice": 899.99,
  "currency": "USD",
  "condition": "Pre-Owned",
  "soldDate": "2026-08-31T00:00:00+00:00",
  "searchQuery": "rtx 4080",
  "scrapedAt": "2026-09-05T21:07:42.318000+00:00",
  "raw": {
    "sold_text": "Sold Aug 31, 2026",
    "price_text": "$899.99",
    "subtitle_text": "Pre-Owned"
  }
}
```

Export the dataset as JSON, CSV, Excel, XML, or RSS, or read it through the Apify API and integrations.

### Partial results and retries

The Actor retries temporary eBay error pages. For requests over 60 results, it visits consecutive result pages with pacing between them. If a later page still fails after all retries, the Actor preserves and returns valid items collected from earlier pages instead of discarding the entire run. That successful run may therefore contain fewer items than `count`.

If the first page cannot be read, the run fails and does not fabricate results. A successful run with an empty dataset means no qualifying results were found.

### Typical runtime

A one-page request usually completes in about 30–120 seconds. Multi-page requests commonly take 2–6 minutes because pages are deliberately paced and temporary failures are retried. Queue load, eBay response time, and retry behavior can make individual runs longer. Increase `maxWaitSeconds` for larger requests or automation with strict retry requirements.

### Troubleshooting

- **Fewer results than requested:** `count` is a ceiling. Check `daysToScrape`, broaden the query, or retry later if a later eBay page was temporarily unavailable.
- **Empty successful dataset:** no cards with a parseable sold date matched the query and date window. Try a broader query or a larger date window.
- **Timed out waiting for capacity:** rerun later or increase `maxWaitSeconds`. The Actor automatically waits and retries while capacity is temporarily full.
- **Failed on an eBay error page:** eBay continued returning an error after retries. Retrying the Actor later is normally sufficient.

For support, open an issue from this Actor's **Issues** tab and include the Apify run ID, input, and approximate run time. Never include account passwords, API tokens, or other secrets.

### Data handling and privacy

The Actor processes your search input and publicly displayed eBay listing data to perform the run and operate the service. It does not require your eBay username, password, cookies, or session. Results are stored in your Apify run dataset according to your Apify account's storage and retention settings. Limited operational records, including the query, run status, timing, counts, and error diagnostics, may be retained to secure, monitor, and troubleshoot the service. Do not submit personal, confidential, or sensitive information as a search query.

### Disclaimer

This is an independent tool and is not affiliated with, endorsed by, or sponsored by eBay. Availability and fields may change when eBay changes its pages. You are responsible for using the data in accordance with applicable law, Apify's terms, and the source website's terms.

# Actor input Schema

## `query` (type: `string`):

The exact search phrase to send to eBay.

## `count` (type: `integer`):

Maximum number of sold listing cards to return. You are charged only for items actually returned.

## `daysToScrape` (type: `integer`):

Only return listings with a parsed sold date within this many days. Listings without a parseable date are excluded.

## `maxWaitSeconds` (type: `integer`):

Maximum total seconds the Actor waits for available capacity and result processing.

## Actor input object example

```json
{
  "query": "Mario Kart 8 Deluxe Nintendo Switch",
  "count": 100,
  "daysToScrape": 30,
  "maxWaitSeconds": 900
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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("cmfapps/ebay-sold-search").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("cmfapps/ebay-sold-search").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 cmfapps/ebay-sold-search --silent --output-dataset

```

## MCP server setup

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

```

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/04ECmisi7IZKhDqvf/builds/o1yBnIWyAMTGkczDl/openapi.json
