# eBay Product Scraper · 8 Marketplaces (`santamaria-automations/ebay-scraper`) Actor

Scrape eBay active listings by keyword or URL. Returns 20+ fields: price, condition, shipping, bids, sold count, images. Supports all 8 eBay marketplaces. HTTP-only, 128MB RAM.

- **URL**: https://apify.com/santamaria-automations/ebay-scraper.md
- **Developed by:** [NanoScrape](https://apify.com/santamaria-automations) (community)
- **Categories:** E-commerce
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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.

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

Scrape active eBay listings by keyword or URL across 8 marketplaces. Returns price, condition, listing type, bids, shipping, images, and 20+ more fields per listing. No browser required.

***

### What It Does

- Search by keyword or pass direct eBay search and category URLs
- Filter by listing type: Buy It Now, Auction, or Accepts Offers
- Filter by condition: New, Used, Refurbished, Open Box, For Parts
- Price range filter (`minPrice`, `maxPrice`) and free shipping filter
- Sort by Best Match, Price, Newly Listed, or Ending Soonest
- Run multiple queries in one actor run
- Results capped per query with `maxResults`, no runaway crawls

***

### Sample Output

```json
{
  "itemId": "256184730291",
  "title": "Apple iPhone 15 Pro 256GB Natural Titanium Unlocked Excellent",
  "url": "https://www.ebay.com/itm/256184730291",
  "marketplace": "ebay.com",
  "price": 749.99,
  "currency": "USD",
  "originalPrice": 849.99,
  "discountPercent": 12,
  "condition": "Refurbished",
  "listingType": "buy_it_now",
  "bidsCount": null,
  "timeLeft": null,
  "bestOfferAvailable": true,
  "shippingCost": 0.0,
  "freeShipping": true,
  "itemLocation": "Austin, Texas, US",
  "soldCount": 38,
  "watcherCount": 204,
  "isSponsored": false,
  "imageUrl": "https://i.ebayimg.com/images/g/abc123/s-l500.jpg",
  "searchQuery": "iphone 15 pro",
  "scrapedAt": "2026-06-13T08:14:22Z"
}
```

***

### Pricing

**$0.001 per actor start + $0.003 per listing. About $3 per 1,000 results.**

You only pay for listings that successfully return data. Failed fetches aren't charged.

**New to Apify?** Every account gets a $5 free monthly platform credit, enough for around 1,600 results on this actor before you commit to paying anything. Test extensively first.

***

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `searchQueries` | array of strings | — | Search terms to run (e.g. `["iphone 15 pro", "macbook air m2"]`). |
| `startUrls` | array of `{url}` | — | Direct eBay search or category page URLs. |
| `marketplace` | string | `"ebay.com"` | eBay marketplace to target. See supported values below. |
| `maxResults` | integer | `100` | Total result cap across all queries. |
| `listingType` | string | `"all"` | `"all"`, `"buy_it_now"`, `"auction"`, `"accepts_offers"` |
| `condition` | array of strings | — | One or more of: `"new"`, `"used"`, `"refurbished"`, `"open_box"`, `"for_parts"` |
| `sortBy` | string | `"best_match"` | `"best_match"`, `"ending_soonest"`, `"newly_listed"`, `"price_low"`, `"price_high"` |
| `minPrice` | float | — | Minimum listing price (in the marketplace currency). |
| `maxPrice` | float | — | Maximum listing price. |
| `freeShippingOnly` | boolean | `false` | When `true`, only returns listings with free shipping. |
| `concurrency` | integer | `5` | Parallel workers. Advanced: increase for faster runs on large result sets. |

At least one of `searchQueries` or `startUrls` is required.

#### Example Input

```json
{
  "searchQueries": ["iphone 15 pro", "iphone 15 pro max"],
  "marketplace": "ebay.com",
  "maxResults": 50,
  "listingType": "buy_it_now",
  "condition": ["new", "refurbished"],
  "sortBy": "price_low",
  "maxPrice": 900,
  "freeShippingOnly": true
}
```

***

### Output Fields

One row per listing. All monetary values are in the marketplace currency.

| Field | Type | Description |
| --- | --- | --- |
| `itemId` | string | eBay item ID. |
| `title` | string | Full listing title. |
| `url` | string | Direct link to the listing. |
| `marketplace` | string | eBay marketplace the listing was scraped from. |
| `price` | float | Current listing price. For auctions, this is the current bid. |
| `currency` | string | Currency code (USD, GBP, EUR, CAD, AUD). |
| `originalPrice` | float or null | Struck-through original price, when shown. |
| `discountPercent` | integer or null | Discount percentage when `originalPrice` is present. |
| `condition` | string | Seller-reported condition (New, Used, Refurbished, etc.). |
| `listingType` | string | `"buy_it_now"`, `"auction"`, or `"accepts_offers"`. |
| `bidsCount` | integer or null | Current bid count (auctions only). |
| `timeLeft` | string or null | Time remaining on auction (e.g. `"2d 4h"`). Auctions only. |
| `bestOfferAvailable` | boolean | Whether the seller accepts Best Offer. |
| `shippingCost` | float | Shipping cost. `0` when free. |
| `freeShipping` | boolean | `true` when shipping is free. |
| `itemLocation` | string | Seller's item location as shown on eBay. |
| `soldCount` | integer or null | Units sold by this listing, when shown. |
| `watcherCount` | integer or null | Number of watchers, when shown. |
| `isSponsored` | boolean | `true` if eBay tagged the listing as sponsored. |
| `imageUrl` | string | Primary listing image URL. |
| `searchQuery` | string | The query or URL that produced this result. |
| `scrapedAt` | string | ISO 8601 timestamp of when the item was scraped. |

`originalPrice`, `discountPercent`, `bidsCount`, `timeLeft`, `soldCount`, and `watcherCount` are `null` when eBay doesn't surface them on the listing card.

***

### Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

**Apify MCP server URL:**

`https://mcp.apify.com?tools=santamaria-automations/ebay-scraper`

**Example prompt once connected:**

> "Use `ebay-scraper` to find the 20 cheapest refurbished iPhone 15 Pro listings on ebay.com under $800. Return results as a table with price, condition, and link."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically.

***

### Why This Scraper

No browser, no headless Chrome. The actor runs HTTP-only and fits in 128MB RAM, which keeps per-result cost low. All 8 major eBay regional sites work with a single `marketplace` parameter. Per-result pricing means you don't pay for pages that fail to load.

***

### Common Use Cases

- **Resale sourcing**: Find underpriced Buy It Now listings before competitors do
- **Competitor pricing**: Monitor what a specific item sells for across multiple sellers
- **Auction monitoring**: Use `sortBy: "ending_soonest"` with `listingType: "auction"` to track closing auctions
- **Price alerting**: Run on a schedule and diff results to catch drops or spikes

***

### Supported Marketplaces

| `marketplace` value | Site |
| --- | --- |
| `ebay.com` | eBay United States |
| `ebay.co.uk` | eBay United Kingdom |
| `ebay.de` | eBay Germany |
| `ebay.fr` | eBay France |
| `ebay.it` | eBay Italy |
| `ebay.es` | eBay Spain |
| `ebay.ca` | eBay Canada |
| `ebay.com.au` | eBay Australia |

***

### Related Actors

- [eBay Sold Listings Scraper](https://apify.com/santamaria-automations/ebay-sold-scraper): Scrapes completed eBay sales for real transaction prices plus built-in price analytics (avg, median, recommended). Use it alongside this actor to compare asking prices against what items actually sell for.

***

### Support

For bugs, feature requests, or marketplace issues, open a ticket on the [Issues tab](https://apify.com/santamaria-automations/ebay-scraper/issues). We typically respond within 24 hours.

Contact: contact@nanoscrape.com

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on eBay (e.g. 'vintage rolex', 'iphone 15 pro'). Each keyword is scraped separately.

## `startUrls` (type: `array`):

eBay search or category page URLs to scrape directly. Overrides searchQueries if both provided.

## `marketplace` (type: `string`):

Which eBay regional site to scrape. Each marketplace returns listings in the local currency.

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

Maximum total listings to return across all queries.

## `condition` (type: `array`):

Filter by item condition. Leave empty for all.

## `listingType` (type: `string`):

Filter by listing format. 'All' returns both auctions and fixed-price listings.

## `sortBy` (type: `string`):

Sort order for results.

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

Minimum listing price filter.

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

Maximum listing price filter.

## `freeShippingOnly` (type: `boolean`):

Only return listings with free shipping.

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

Number of parallel requests. Increase for faster scraping of many queries.

## Actor input object example

```json
{
  "searchQueries": [
    "vintage camera"
  ],
  "marketplace": "ebay.com",
  "maxResults": 100,
  "listingType": "all",
  "sortBy": "best_match",
  "freeShippingOnly": false,
  "concurrency": 5
}
```

# Actor output Schema

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

Dataset of scraped eBay active listings. Each row contains itemId, title, price, condition, listingType, shippingCost, soldCount, imageUrl, and more.

# 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 = {
    "searchQueries": [
        "vintage camera"
    ],
    "maxResults": 100,
    "concurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/ebay-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 = {
    "searchQueries": ["vintage camera"],
    "maxResults": 100,
    "concurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/ebay-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 '{
  "searchQueries": [
    "vintage camera"
  ],
  "maxResults": 100,
  "concurrency": 5
}' |
apify call santamaria-automations/ebay-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santamaria-automations/ebay-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/sH2ej61eNFoUGc3ym/builds/YjJdcwppg4vbNMPHG/openapi.json
