# eBay Sold & Completed Items - Real-Time Price Arbitrage Scraper (`automation_studio/ebay-sold-comps-scraper`) Actor

Extract real confirmed eBay sold prices, dates, shipping costs, and arbitrage valuation comps. Perfect for resellers, thrift flippers, and price intelligence.

- **URL**: https://apify.com/automation_studio/ebay-sold-comps-scraper.md
- **Developed by:** [Automation Studio](https://apify.com/automation_studio) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 confirmed sold comps

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?

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 & Completed Items - Real-Time Price Arbitrage Scraper

Extract confirmed, real-world **eBay Sold & Completed Listings** to calculate true market value ("Comps"), find flip opportunities, and track resale price trends.

Resellers and market researchers don't care about what sellers are asking for an item—they only care about what buyers **actually paid**. This scraper taps directly into eBay's confirmed sales index (`LH_Sold=1&LH_Complete=1`) to deliver clean, structured comp data with built-in arbitrage analytics.

***

### Key Capabilities & Unfair Advantages

- **100% Confirmed Transactions**: Scrapes only items that successfully sold and closed. Filters out active listings and unsold listings.
- **Total Landed Cost Calculation**: Combines final sold price and shipping fee (`totalLandedPrice = soldPrice + shippingCost`) so flippers know the true cash amount buyers spent.
- **Condition-Aware Valuations**: Extracts condition labels (`Brand New`, `Pre-Owned`, `Refurbished`, `For Parts`) to evaluate comps accurately across condition tiers.
- **Automated Arbitrage Profit Calculator**: Provide your sourcing cost (e.g. thrift store price) and the scraper automatically calculates estimated eBay fees (13.25%), net profit, and ROI %.
- **Sale Format Intelligence**: Categorizes listings into `AUCTION` (with total bid counts) vs `BUY_IT_NOW` vs Best Offer Accepted.
- **Unmasked High-Res Media**: Automatically upscales thumbnail images to full 1600px assets (`s-l1600.jpg`) for product condition verification.
- **Clean Canonical URLs**: Removes tracking tokens, referral redirects, and session IDs to return clean `https://www.ebay.com/itm/{itemId}` links.
- **Multi-Marketplace Support**: Pulls sold comps across US (`ebay.com`), UK (`ebay.co.uk`), Germany (`ebay.de`), Canada (`ebay.ca`), and Australia (`ebay.com.au`).

***

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `keywords` | Array of Strings | `["Sony WH-1000XM4"]` | Product keywords or model names to query for sold comps. |
| `maxResults` | Integer | `10` | Maximum sold listings to harvest (1 to 5000). Default is 10 for fast verification. |
| `sourcingCost` | Float | `0.0` | Optional: Your purchase/sourcing cost to compute net profit and ROI %. |
| `itemCondition` | String (Dropdown) | `"ALL"` | Condition filter: `ALL`, `NEW`, `USED`, or `PARTS`. |
| `ebayDomain` | String (Dropdown) | `"ebay.com"` | Target regional marketplace (`ebay.com`, `ebay.co.uk`, `ebay.de`, `ebay.ca`, `ebay.com.au`). |
| `proxyConfiguration` | Object | `{ "useApifyProxy": true }` | Proxy routing configuration for request routing. |

***

### Output Format

Each item record includes comprehensive product, sales, and arbitrage data:

```json
{
  "itemTitle": "Sony WH-1000XM4 Wireless Noise-Canceling Headphones - Black (Pre-Owned)",
  "soldPrice": 142.50,
  "shippingCost": 8.95,
  "totalLandedPrice": 151.45,
  "currency": "USD",
  "condition": "Pre-Owned",
  "soldDate": "Oct 10, 2026",
  "listingType": "BUY_IT_NOW",
  "bidCount": 0,
  "sourcingCost": 35.00,
  "estimatedEbayFee": 20.07,
  "netArbitrageProfit": 96.38,
  "arbitrageRoiPercent": 275.4,
  "sellerUsername": "audiophile_vault",
  "sellerFeedbackScore": 1480,
  "itemId": "266890123456",
  "itemUrl": "https://www.ebay.com/itm/266890123456",
  "imageUrl": "https://i.ebayimg.com/images/g/abc123xyz/s-l1600.jpg",
  "scrapedAt": "2026-10-11T12:00:00.000Z"
}
```

***

### Executive Comps Summary

At the completion of each run, an aggregated valuation summary is saved to the Key-Value Store (`SUMMARY`):

- **Median Sold Price**: The most accurate measure of fair market value, unaffected by high or low outliers.
- **Average Sold Price & Spread**: 25th percentile to 75th percentile market value range.
- **Sell-Through Frequency**: Sales volume detected over recent days to gauge liquidity.
- **Condition Price Multipliers**: Comparative valuation between Brand New vs. Pre-Owned items.

***

### Practical Applications

- **Thrift & Garage Sale Flippers**: Instantly check true sold comps before buying items at thrift shops, estate sales, or clearance racks.
- **Sneaker & Streetwear Resellers**: Track real secondary market transaction prices across Nike, Jordan, Supreme, and vintage streetwear.
- **Trading Card & Collectibles Dealers**: Pull real-time auction closing prices for Pokémon, Magic: The Gathering, and sports cards.
- **Cross-Marketplace Arbitrage**: Compare eBay sold prices against Amazon, Mercari, Facebook Marketplace, and Vinted to find spread opportunities.
- **Automated Repricing Engines**: Connect via webhook or API to feed live comps into your custom repricing bots.

# Actor input Schema

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

Enter product keywords or specific model names to pull sold comps for (e.g. 'Sony WH-1000XM4', 'Jordan 4 Retro Military Black', 'Vintage Carhartt Detroit Jacket').

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

Maximum number of confirmed sold listings to extract (1 to 5000). Default is 10 for rapid verification.

## `sourcingCost` (type: `number`):

Optional: Enter what you paid (or expect to pay) for the item. The scraper will automatically compute estimated eBay fees (13.25%), net profit, and ROI % for every sold comp.

## `itemCondition` (type: `string`):

Filter by item condition on eBay.

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

Select the target eBay regional marketplace.

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

Apify proxy routing configuration for reliable eBay harvesting.

## Actor input object example

```json
{
  "keywords": [
    "Sony WH-1000XM4"
  ],
  "maxResults": 10,
  "sourcingCost": 35,
  "itemCondition": "ALL",
  "ebayDomain": "ebay.com",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Complete dataset of confirmed eBay sold listings

# 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": [
        "Sony WH-1000XM4"
    ],
    "maxResults": 10,
    "sourcingCost": 35,
    "itemCondition": "ALL",
    "ebayDomain": "ebay.com",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_studio/ebay-sold-comps-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": ["Sony WH-1000XM4"],
    "maxResults": 10,
    "sourcingCost": 35,
    "itemCondition": "ALL",
    "ebayDomain": "ebay.com",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automation_studio/ebay-sold-comps-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 '{
  "keywords": [
    "Sony WH-1000XM4"
  ],
  "maxResults": 10,
  "sourcingCost": 35,
  "itemCondition": "ALL",
  "ebayDomain": "ebay.com",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automation_studio/ebay-sold-comps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_studio/ebay-sold-comps-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/TuOGB98eQzedQXf01/builds/nDZnIFPMxF1hBiQe5/openapi.json
