# eBay Price Comps API — Active Listings (`unfenced-group/ebay-price-comps-api`) Actor

Price comps from up to 240 active eBay listings per search: median and percentiles with outliers removed, medians per condition and buying format, auction bids, sold counters, cheapest and best-selling listings. 17 eBay sites. HTTP API or batch.

- **URL**: https://apify.com/unfenced-group/ebay-price-comps-api.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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/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 Price Comps API — Active Listings

![eBay Price Comps API](https://api.apify.com/v2/key-value-stores/MWX46jLeAT8FWrULB/records/banner.png)

Find out what a product is selling for on eBay right now: one search returns a price comps report built from up to 240 active listings, with the median and percentiles after outliers are removed, medians per condition (new, used, refurbished, open box, parts) and buying format, auction activity, eBay's own "sold" counters, and the cheapest and best-selling listings. Works on 17 eBay sites. No API key required.

This report uses active listings (current asking prices). eBay shows sold and completed listings to signed-in users only, so final sale prices are not part of it.

***

### Why this API?

#### 📊 A price, not a pile of listings

One call gives you the median, the 10th to 90th percentile and the range, worked out from up to 240 listings: ready for repricing, valuation and resale decisions.

#### 🧹 Clean comps

Listings missing a search word, listings with words you exclude ("case", "cover", "defect") and prices far outside the normal band (accessories, bundles, placeholder prices) are left out, and the report says how many were removed and why.

#### 🏷️ Split by condition and format

Separate medians for new, open box, refurbished, used and for-parts listings, and for Buy It Now, Best Offer and auction listings.

#### 🔥 Demand signals

eBay's "X sold" counters on active listings, watcher counts, auction bids and the share of free shipping.

#### 🌍 17 eBay sites

US, UK, Germany, France, Italy, Spain, the Netherlands, Austria, Switzerland, Ireland, Belgium, Poland, Canada, Australia, Singapore, Hong Kong and Malaysia.

#### ⚡ Built for apps and agents

One search in, one JSON report back, over HTTP or in a batch of up to 20 searches per run.

***

### Call this actor over HTTP

Besides normal runs, this actor exposes a REST API that answers each request with JSON. There is no run to start and no dataset to fetch afterwards, which suits apps, automations and AI agents that need one answer at a time. The full interactive reference is on the **Endpoints** tab.

| Endpoint | Returns | Billed as |
|---|---|---|
| `GET /comps?query=…&market=…` | One price comps report from up to 240 active listings | Per report |

Authenticate with your Apify API token in the `Authorization` header:

```bash
curl -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  "https://unfenced-group--ebay-price-comps-api.apify.actor/comps?query=nintendo%20switch%20oled&market=de"
```

Every response has the shape `{ "count": N, "items": [...] }`, with the same fields as the dataset records below, billed at the same price as a normal run. Errors and searches without matching listings return no data and are never billed. POST with a JSON body works the same as GET.

***

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `queries` | array | (required) | Products to price, one search per line, as typed on eBay. Up to 20 per run. Over HTTP: `query`. |
| `market` | string | `"de"` | eBay site: `us`, `uk`, `de`, `au`, `ca`, `fr`, `it`, `es`, `nl`, `at`, `ch`, `ie`, `be`, `pl`, `sg`, `hk`, `my`. |
| `condition` | string | `"any"` | `any`, `new`, `openBox`, `refurbished`, `used` or `parts`, filtered by eBay itself. |
| `minPrice` | integer | (empty) | Only listings at or above this price, in the site currency. |
| `maxPrice` | integer | (empty) | Only listings at or below this price, in the site currency. |
| `excludeWords` | array | `[]` | Leave out listings whose title contains any of these words. Over HTTP: comma-separated. |
| `buyItNowOnly` | boolean | `false` | Leave out auctions. |
| `domesticOnly` | boolean | `false` | Only listings located in the site's own country. |
| `strictMatch` | boolean | `true` | Use only titles that contain every word of the search. |
| `removeOutliers` | boolean | `true` | Leave out prices far outside the normal band before working out the statistics. |
| `includeListings` | boolean | `false` | Add every listing used in the statistics to the report. |

***

### Output schema

One report per search. Statistics are `null` when no listing qualifies for them.

| Field | Type | Description |
|---|---|---|
| `query` | string | The search. |
| `market` / `marketplace` | string | eBay site key and domain. |
| `currency` | string | Currency of the prices. |
| `searchUrl` | string | The eBay search the report was built from. |
| `filters` | object | The filters that were applied. |
| `totalResults` / `totalResultsText` | integer / string | eBay's own result count for the search (e.g. `3,100+`). |
| `listingsSampled` | integer | Listings read from the results page (up to 240). |
| `listingsUsed` | integer | Listings left after the exclusions below. |
| `excluded` | object | Listings left out, by reason: `priceRange`, `noPrice`, `otherCurrency`, `missingSearchWords`, `excludedWords`, `outliers`. |
| `outlierBand` | object | `low` and `high` price limits used to remove outliers. |
| `price` | object | Item price: `count`, `min`, `p10`, `p25`, `median`, `mean`, `p75`, `p90`, `max`. |
| `priceWithShipping` | object | The same statistics for price plus shipping, for listings with a known shipping cost. |
| `priceAllListings` | object | The same statistics before any exclusion. |
| `byCondition` | object | Per condition (`new`, `openBox`, `refurbished`, `used`, `parts`, `unknown`): `count`, `median`, `p25`, `p75`, `min`, `max`. |
| `byBuyingFormat` | object | Per format (`buyItNow`, `bestOffer`, `auction`): the same fields. |
| `auctions` | object | `count`, `withBids`, `totalBids`, `medianCurrentPrice`. |
| `demand` | object | `listingsWithSoldCounter`, `soldCounterTotal` (sum of eBay's "X sold" counters), `listingsWithWatchers`, `freeShippingSharePct`. |
| `cheapestListings[]` | array | The 5 cheapest listings (price plus shipping): `title`, `price`, `shippingCost`, `totalPrice`, `condition`, `buyingFormat`, `bids`, `soldCount`, `url`. |
| `bestSellingListings[]` | array | Up to 5 listings with the highest "sold" counter, same fields. |
| `listings[]` | array | Only with `includeListings`: every listing used, with `itemId`, `title`, `url`, `price`, `currency`, `shippingCost`, `totalPrice`, `condition`, `conditionClass`, `buyingFormat`, `bids`, `soldCount`, `watchers`. |
| `source` | string | eBay site. |
| `scrapedAt` | string | Time of the lookup (ISO 8601). |

#### Example record

```json
{
  "query": "nintendo switch oled",
  "market": "de",
  "marketplace": "www.ebay.de",
  "currency": "EUR",
  "searchUrl": "https://www.ebay.de/sch/i.html?_nkw=nintendo+switch+oled&_ipg=240",
  "filters": {
    "condition": "any",
    "minPrice": null,
    "maxPrice": null,
    "buyItNowOnly": false,
    "domesticOnly": false,
    "excludeWords": [],
    "strictMatch": true,
    "removeOutliers": true
  },
  "totalResults": 3100,
  "totalResultsText": "3,100+",
  "listingsSampled": 240,
  "listingsUsed": 199,
  "excluded": {
    "priceRange": 0,
    "noPrice": 0,
    "otherCurrency": 0,
    "missingSearchWords": 4,
    "excludedWords": 0,
    "outliers": 37
  },
  "outlierBand": {
    "low": 110.5,
    "high": 300.37
  },
  "price": {
    "count": 199,
    "min": 114.95,
    "p10": 150,
    "p25": 170,
    "median": 189,
    "mean": 192.43,
    "p75": 209.98,
    "p90": 236,
    "max": 300
  },
  "priceWithShipping": {
    "count": 199,
    "min": 114.95,
    "p10": 157.69,
    "p25": 177.68,
    "median": 192.69,
    "mean": 197.56,
    "p75": 213.84,
    "p90": 240.09,
    "max": 307.69
  },
  "priceAllListings": {
    "count": 240,
    "min": 4.49,
    "p10": 90.75,
    "p25": 159.99,
    "median": 180,
    "mean": 178.01,
    "p75": 205.75,
    "p90": 240.7,
    "max": 420
  },
  "byCondition": {
    "refurbished": {
      "count": 6,
      "median": 164.48,
      "p25": 127.21,
      "p75": 202.41,
      "min": 114.95,
      "max": 209.95
    },
    "used": {
      "count": 162,
      "median": 185,
      "p25": 169.99,
      "p75": 200,
      "min": 120,
      "max": 300
    },
    "openBox": {
      "count": 21,
      "median": 219,
      "p25": 190,
      "p75": 230,
      "min": 150,
      "max": 300
    },
    "new": {
      "count": 10,
      "median": 253,
      "p25": 227.25,
      "p75": 290.75,
      "min": 115.34,
      "max": 299.98
    }
  },
  "byBuyingFormat": {
    "buyItNow": {
      "count": 67,
      "median": 184.95,
      "p25": 167.27,
      "p75": 199.99,
      "min": 114.95,
      "max": 250
    },
    "bestOffer": {
      "count": 115,
      "median": 190,
      "p25": 179,
      "p75": 220,
      "min": 140,
      "max": 300
    },
    "auction": {
      "count": 17,
      "median": 151,
      "p25": 149,
      "p75": 180,
      "min": 120,
      "max": 256
    }
  },
  "auctions": {
    "count": 17,
    "withBids": 7,
    "totalBids": 54,
    "medianCurrentPrice": 151
  },
  "demand": {
    "listingsWithSoldCounter": 4,
    "soldCounterTotal": 303,
    "listingsWithWatchers": 19,
    "freeShippingSharePct": 31.7
  },
  "cheapestListings": [
    {
      "title": "Nintendo Switch OLED | V1/V2 🎮 | verschiedene Farben | Auswahl | Zustand \"gut\"✅",
      "price": 114.95,
      "shippingCost": 0,
      "totalPrice": 114.95,
      "condition": "Gut - Refurbished",
      "buyingFormat": "buyItNow",
      "bids": null,
      "soldCount": 21,
      "url": "https://www.ebay.de/itm/388466984208"
    },
    {
      "title": "Nintendo Switch OLED Display Qualitätskontrolle & Versand aus Deutschland",
      "price": 115.34,
      "shippingCost": 0,
      "totalPrice": 115.34,
      "condition": "Neu",
      "buyingFormat": "buyItNow",
      "bids": null,
      "soldCount": null,
      "url": "https://www.ebay.de/itm/236696684471"
    }
  ],
  "bestSellingListings": [
    {
      "title": "Nintendo Switch OLED Modell 🎮 | Weiß | Komplett | TOP Zustand! ✅",
      "price": 209.95,
      "shippingCost": 0,
      "totalPrice": 209.95,
      "condition": "Sehr gut - Refurbished",
      "buyingFormat": "buyItNow",
      "bids": null,
      "soldCount": 215,
      "url": "https://www.ebay.de/itm/388458616694"
    },
    {
      "title": "Nintendo Switch OLED | V1/V2 🎮 | verschiedene Farben | Auswahl | TOP Zustand!✅",
      "price": 119.95,
      "shippingCost": 0,
      "totalPrice": 119.95,
      "condition": "Sehr gut - Refurbished",
      "buyingFormat": "buyItNow",
      "bids": null,
      "soldCount": 42,
      "url": "https://www.ebay.de/itm/388467031004"
    }
  ],
  "source": "ebay.de",
  "scrapedAt": "2026-10-14T08:15:37.006Z"
}
```

***

### Examples

**Price a console on eBay Germany:**

```json
{ "queries": ["nintendo switch oled"], "market": "de" }
```

**Used only, without accessories, on eBay UK:**

```json
{ "queries": ["nintendo switch oled"], "market": "uk", "condition": "used", "excludeWords": ["case", "game", "dock"] }
```

**Several products at once, Buy It Now only, with every listing:**

```json
{ "queries": ["iphone 13 128gb", "iphone 14 128gb", "iphone 15 128gb"], "market": "us", "buyItNowOnly": true, "includeListings": true }
```

**Daily price monitor (schedule this run every day):**

```json
{ "queries": ["lego 10300", "lego 75313", "lego 10294"], "market": "de", "condition": "new" }
```

***

### 💰 Pricing

**$0.02 per comps report** — you only pay for reports returned. Errors and lookups that find nothing are never charged. One search is one report, however many listings it is built from.

| Usage | Cost |
|---|---|
| one search | ~$0.02 |
| 10 searches | ~$0.20 |
| 100 searches | ~$2.00 |
| 1,000 searches | ~$20.00 |

Subscription tiers lower the rate further, down to $0.015 per comps report at the highest tier. A run start costs $0.00005 and each dataset item $0.00001; HTTP requests are billed per comps report only.

***

### Performance

| Request | Typical time |
|---|---|
| One search over HTTP | 30–120 seconds |
| 10 searches as a run | about 10–15 minutes |

***

### Known limitations

- Active listings only: the report shows what sellers ask, not what buyers paid. eBay shows sold and completed listings to signed-in users only.
- One results page (up to 240 listings) per search. For very broad searches, narrow with condition, price limits or exclude words.
- The "sold" counter is eBay's own figure on multi-quantity listings and is not shown on every listing.
- eBay can take a minute or more to answer, so an HTTP request can take up to two minutes.

***

### Technical details

- **Source:** eBay search results on 17 eBay sites
- **Coverage:** every active listing eBay returns for the search, up to 240
- **Retry:** automatic retry on network errors and when eBay answers with a verification page

***

### Rate this actor

If this scraper does its job, a short review on the **Reviews** tab helps other users find it. Something not working? Open an issue on the **Issues** tab instead — issues get fixed.

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

## `queries` (type: `array`):

Products to price, one search per line, as you would type them on eBay. Example: nintendo switch oled. Each search becomes one comps report. Up to 20 per run.

## `market` (type: `string`):

The eBay site to price on. Example: de for ebay.de.

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

Only listings in this condition, filtered by eBay itself. Example: used.

## `minPrice` (type: `integer`):

Only listings at or above this price, in the site's currency. Example: 50.

## `maxPrice` (type: `integer`):

Only listings at or below this price, in the site's currency. Example: 500.

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

Leave out listings whose title contains any of these words, e.g. case, cover, defect. Example: case.

## `buyItNowOnly` (type: `boolean`):

Leave out auctions.

## `domesticOnly` (type: `boolean`):

Only listings located in the site's own country.

## `strictMatch` (type: `boolean`):

Use only listings whose title contains every word of the search.

## `removeOutliers` (type: `boolean`):

Leave out prices far outside the normal band (accessories, bundles, placeholder prices) before the statistics are worked out.

## `includeListings` (type: `boolean`):

Add every listing used in the statistics (up to 240) to the report.

## Actor input object example

```json
{
  "queries": [
    "nintendo switch oled"
  ],
  "market": "de",
  "condition": "any",
  "excludeWords": [],
  "buyItNowOnly": false,
  "domesticOnly": false,
  "strictMatch": true,
  "removeOutliers": true,
  "includeListings": false
}
```

# 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 = {
    "queries": [
        "nintendo switch oled"
    ],
    "market": "de"
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/ebay-price-comps-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 = {
    "queries": ["nintendo switch oled"],
    "market": "de",
}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/ebay-price-comps-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 '{
  "queries": [
    "nintendo switch oled"
  ],
  "market": "de"
}' |
apify call unfenced-group/ebay-price-comps-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unfenced-group/ebay-price-comps-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/3yS15MhOO3UkFDg3K/builds/cFwWVhkEXWkMVWUcT/openapi.json
