# eBay Scraper — Products, Prices & Sellers (`cryptosignals/ebay-scraper`) Actor

Scrape eBay product listings, prices, and seller data. Extract product titles, current bids, buy-it-now prices, seller ratings, and shipping info. Monitor auction trends and pricing. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/cryptosignals/ebay-scraper.md
- **Developed by:** [Web Data Labs](https://apify.com/cryptosignals) (community)
- **Categories:** E-commerce
- **Stats:** 18 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 result scrapeds

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 Scraper — Products, Prices, Sellers & Item Details

Fast eBay scraper that extracts product titles, prices, conditions, shipping costs, seller information, item specifics, and images. Supports 8 eBay country domains, multiple sort options, condition filtering, and full pagination.

Scrape eBay search results or individual item pages at scale. No browser needed — pure HTTP requests for maximum speed and low cost. Perfect for price monitoring, market research, competitor analysis, and e-commerce intelligence. No eBay API key or developer account needed.

Unlike browser-based eBay scrapers that are slow and expensive to run, this scraper uses lightweight HTTP requests with intelligent parsing. It's 5–10x faster and significantly cheaper per result.

### Key Features

- **Search scraping** — scrape eBay search results for any keyword or product category
- **Item detail pages** — extract full product details from specific eBay item URLs
- **8 eBay domains** — supports US, UK, Germany, France, Italy, Spain, Canada, and Australia
- **Price extraction** — current price, shipping cost, and item condition
- **Seller data** — seller name, feedback score, and feedback percentage
- **Item specifics** — brand, model, color, size, and other product attributes
- **Image URLs** — extract all product images
- **Sort options** — best match, price (low/high), newly listed, ending soonest
- **Condition filter** — new, used, open box, refurbished, or all
- **Proxy support** — built-in Apify proxy configuration for reliable scraping
- **Auto-pagination** — automatically scrapes multiple result pages up to your limit
- **No browser needed** — pure HTTP + BeautifulSoup for speed and efficiency
- **No API key needed** — no eBay developer account or API credentials required
- **Export to JSON, CSV, Excel, XML** — download results in any format via the Apify platform

### Use Cases

| Use Case | Description |
|----------|-------------|
| **Price monitoring** | Track prices for specific products over time. Set up scheduled runs to detect price drops and create alerts for deals. |
| **Competitor pricing** | Monitor how competitors price their products on eBay. Compare pricing strategies across different eBay markets. |
| **Market research** | Analyze product availability, pricing ranges, and demand signals for any product category across 8 countries. |
| **Dropshipping research** | Find profitable products by analyzing price differences between eBay domains. Identify high-demand, low-competition items. |
| **Product sourcing** | Search for wholesale or bulk listings. Track seller inventories and identify reliable suppliers. |
| **Vintage & collectibles** | Monitor listings for rare items, collectibles, and vintage goods. Get notified when specific items are listed. |
| **Arbitrage opportunities** | Compare prices between eBay and other marketplaces. Find products selling below market value. |
| **SEO & listing optimization** | Analyze top-performing listings to understand what titles, descriptions, and images drive sales. |
| **Academic research** | Study e-commerce pricing dynamics, seller behavior, and market efficiency on the world's largest auction platform. |
| **Inventory tracking** | Monitor competitor inventory levels by tracking the number of available items over time. |

### Input Configuration

#### All Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | array | — | List of search terms (e.g., `["vintage watch", "iphone 15 case"]`) |
| `itemUrls` | array | — | Direct eBay item URLs for detail scraping |
| `maxItems` | integer | 50 | Maximum items per search query (1–500) |
| `scrapeDetails` | boolean | true | Visit each item page for full details (slower but more data) |
| `ebayDomain` | string | `www.ebay.com` | eBay country domain (see supported domains below) |
| `sortBy` | string | `best_match` | Sort: `best_match`, `price_asc`, `price_desc`, `newly_listed`, `ending_soonest` |
| `condition` | string | `all` | Filter: `all`, `new`, `used`, `open_box`, `refurbished` |
| `proxyConfiguration` | object | — | Apify proxy settings (recommended for large runs) |

#### Supported eBay Domains

| Domain | Country |
|--------|---------|
| `www.ebay.com` | United States |
| `www.ebay.co.uk` | United Kingdom |
| `www.ebay.de` | Germany |
| `www.ebay.fr` | France |
| `www.ebay.it` | Italy |
| `www.ebay.es` | Spain |
| `www.ebay.ca` | Canada |
| `www.ebay.com.au` | Australia |

### Input Examples

#### Search for products

```json
{
    "searchQueries": ["vintage mechanical watch"],
    "maxItems": 100,
    "sortBy": "newly_listed",
    "condition": "used"
}
```

#### Compare prices across countries

```json
{
    "searchQueries": ["Sony WH-1000XM5"],
    "maxItems": 50,
    "ebayDomain": "www.ebay.co.uk",
    "sortBy": "price_asc",
    "condition": "new"
}
```

#### Scrape specific item URLs

```json
{
    "itemUrls": [
        "https://www.ebay.com/itm/123456789012",
        "https://www.ebay.com/itm/987654321098"
    ],
    "scrapeDetails": true
}
```

#### Multiple search queries

```json
{
    "searchQueries": [
        "iphone 15 pro case",
        "samsung galaxy s24 case",
        "pixel 8 case"
    ],
    "maxItems": 50,
    "sortBy": "best_match",
    "condition": "new"
}
```

#### Quick search without details (faster)

```json
{
    "searchQueries": ["laptop stand"],
    "maxItems": 200,
    "scrapeDetails": false,
    "sortBy": "price_asc"
}
```

### Output Schema

#### Search Result (scrapeDetails: false)

```json
{
    "itemId": "123456789012",
    "title": "Vintage Omega Seamaster Automatic Watch 1960s Cal 565",
    "price": 1249.99,
    "currency": "USD",
    "condition": "Pre-Owned",
    "listingType": "Buy It Now",
    "shipping": "Free shipping",
    "imageUrl": "https://i.ebayimg.com/images/g/.../s-l500.jpg",
    "itemUrl": "https://www.ebay.com/itm/123456789012",
    "sellerName": "vintage_watches_nyc",
    "sellerFeedback": "99.8%",
    "location": "New York, NY"
}
```

#### Full Item Details (scrapeDetails: true)

```json
{
    "itemId": "123456789012",
    "title": "Vintage Omega Seamaster Automatic Watch 1960s Cal 565",
    "price": 1249.99,
    "currency": "USD",
    "condition": "Pre-Owned",
    "conditionDescription": "Light wear consistent with age, keeps excellent time",
    "listingType": "Buy It Now",
    "shipping": "Free shipping",
    "sellerName": "vintage_watches_nyc",
    "sellerFeedbackScore": 4523,
    "sellerFeedbackPercent": "99.8%",
    "location": "New York, NY",
    "itemSpecifics": {
        "Brand": "Omega",
        "Model": "Seamaster",
        "Movement": "Automatic",
        "Case Material": "Stainless Steel",
        "Year": "1965"
    },
    "images": [
        "https://i.ebayimg.com/images/g/.../s-l1600.jpg",
        "https://i.ebayimg.com/images/g/.../s-l1600_2.jpg"
    ],
    "itemUrl": "https://www.ebay.com/itm/123456789012",
    "description": "Beautiful vintage Omega Seamaster from the 1960s..."
}
```

### How to Use with the Apify API

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

## Search eBay for products
run = client.actor("cryptosignals/ebay-scraper").call(run_input={
    "searchQueries": ["mechanical keyboard"],
    "maxItems": 100,
    "sortBy": "price_asc",
    "condition": "new",
    "scrapeDetails": True,
})

## Process results
dataset = client.dataset(run["defaultDatasetId"])
for item in dataset.iterate_items():
    print(f"${item['price']:.2f} — {item['title']}")
    if item.get("sellerFeedbackPercent"):
        print(f"  Seller: {item['sellerName']} ({item['sellerFeedbackPercent']})")
```

#### JavaScript / TypeScript

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

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("cryptosignals/ebay-scraper").call({
    searchQueries: ["vintage vinyl records"],
    maxItems: 50,
    sortBy: "newly_listed",
    ebayDomain: "www.ebay.co.uk",
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.log(`${item.price} ${item.currency}: ${item.title}`);
});
```

#### cURL

```bash
## Start a scraping run
curl -X POST "https://api.apify.com/v2/acts/cryptosignals~ebay-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["drone camera"], "maxItems": 50, "condition": "new"}'

## Get results
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
```

### Integrations

eBay Scraper works with all [Apify integrations](https://apify.com/integrations):

- **Google Sheets** — export product data and prices to a spreadsheet
- **Slack** — get notified when specific items are listed or prices drop
- **Webhooks** — trigger your pipeline when a scrape completes
- **Zapier / Make** — connect to 5,000+ apps for automated price monitoring
- **Schedule** — run daily or hourly for continuous price tracking
- **API** — call programmatically from Python, JavaScript, or any language

### Performance

- **Fast mode** (`scrapeDetails: false`): ~100 items per minute from search results
- **Detail mode** (`scrapeDetails: true`): ~30 items per minute (visits each item page)
- Automatic pagination across multiple search result pages
- Built-in proxy support for large-scale scraping
- Rate limiting and retry logic to handle eBay's protections

### Pricing

**Try it free** — then just **$4.99/month** after April 3, 2026. No per-item fees. Unlimited runs.

Platform compute costs depend on scale — typically $0.50–$2.00 per run depending on item count and whether detail scraping is enabled.

### Legal & Compliance

This scraper accesses only publicly available eBay listing data through public web pages. It does not require authentication, log in to any account, or bypass any access controls. It respects eBay's server resources with built-in rate limiting and delays between requests. Users are responsible for complying with eBay's Terms of Service and all applicable laws when using scraped data. This scraper is intended for legitimate use cases such as market research, price monitoring, and competitive analysis.

### FAQ

**Which eBay sites are supported?**
8 domains: US (.com), UK (.co.uk), Germany (.de), France (.fr), Italy (.it), Spain (.es), Canada (.ca), and Australia (.com.au).

**Do I need an eBay API key?**
No. This scraper works without any eBay credentials or developer accounts.

**What's the difference between fast mode and detail mode?**
With `scrapeDetails: false`, the scraper only parses search result pages — faster but with less data. With `scrapeDetails: true`, it visits each item page for full details including item specifics, all images, and full descriptions.

**Can I monitor prices over time?**
Yes. Set up a scheduled run on Apify and export results to Google Sheets. Compare results across runs to track price changes.

**Can I scrape completed/sold listings?**
Currently, the scraper focuses on active listings. Sold listing support may be added in future updates.

**Does it handle eBay's anti-scraping measures?**
Yes. The scraper includes proxy support, User-Agent rotation, and intelligent rate limiting. For large-scale runs, enable Apify's residential proxies for best results.

### Proxy Configuration for Large Scrapes

eBay blocks IPs that make too many requests. For large-scale scraping, use residential proxies from [ThorData](https://thordata.partnerstack.com/partner/0a0x4nzjr3ky) to rotate IPs and avoid detection.

ThorData provides affordable residential proxies with global coverage — ideal for scraping eBay product listings, prices, and seller data without getting blocked.

# Actor input Schema

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

List of search terms to find items on eBay (e.g., 'vintage watch', 'iphone 15 case')

## `itemUrls` (type: `array`):

Direct eBay item URLs to scrape details from (e.g., https://www.ebay.com/itm/123456789)

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

Maximum number of items to scrape per search query

## `scrapeDetails` (type: `boolean`):

Whether to visit each item page for full details (slower but more data)

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

eBay country domain to search

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

How to sort search results

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

Filter by item condition

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

Apify proxy configuration

## Actor input object example

```json
{
  "searchQueries": [
    "vintage watch"
  ],
  "maxItems": 50,
  "scrapeDetails": true,
  "ebayDomain": "www.ebay.com",
  "sortBy": "best_match",
  "condition": "all"
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchQueries": [
        "vintage watch"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cryptosignals/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 watch"] }

# Run the Actor and wait for it to finish
run = client.actor("cryptosignals/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 watch"
  ]
}' |
apify call cryptosignals/ebay-scraper --silent --output-dataset

```

## MCP server setup

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