# eBay Search Scraper (`dtrungtin/ebay-search-scraper`) Actor

Unofficial eBay API to extract data from eBay based on keywords or categories. Scrape prices, product descriptions, images, location, availability, brand, and more. Download extracted data in structured format and use it in reports, spreadsheets, databases, and applications.

- **URL**: https://apify.com/dtrungtin/ebay-search-scraper.md
- **Developed by:** [Tin](https://apify.com/dtrungtin) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 154 total users, 11 monthly users, 92.2% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $18.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?

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

### What does eBay Items Scraper do?

Scrape and download product information without the limitations of the [eBay API](https://developer.ebay.com), including but not limited to **prices, product descriptions, images, item specifics, seller feedback, and sold/completed listing history**.

eBay Items Scraper extracts all and any items from any category or search page on [eBay](https://www.ebay.com) — just copy\&paste the search URL. It also supports **sold and completed listings** (`LH_Sold=1` / `LH_Complete=1` search filters), giving you the sold date, sold price, and bid count for finished auctions. Download your data as an HTML or Excel table, as well as in JSON, CSV, or XML format.

Running on the [Apify platform](https://apify.com) gives you API access to results, scheduling, monitoring, integrations, and residential proxy rotation out of the box.

### Why use eBay Items Scraper?

- **Establish automated price and bidding monitoring** - scan dozens of e-commerce items and products in real time to adjust your own buying or pricing strategies.
- **Research realized prices** - scrape *sold* listings to see what items actually sold for (not just asking prices), including the sold date and the number of bids — invaluable for resellers, collectors, and appraisers.
- **Track competitors' prices** - track listings, product, and sales data from various online stores to compare with competitors' and bidders' prices, and back up your decision-making process with real data.
- **Facilitate market analysis** - scan and analyze eBay for images, products, related keywords, whole new categories and more to stay ahead of emerging trends and consumer habits.
- **Optimize performance and implement lightweight automation** - collect data about products easily, non-manually, be it for market research, machine learning or new product development.

For more ideas on how to use data extracted from eBay, check out our [industries pages](https://apify.com/industries) which describe **at least 12 ways** of how web scraping data is used across the projects and businesses of various scale and direction, specifically in the area of [retail and e-commerce](https://apify.com/industries/ecommerce-and-retail).

### How to scrape eBay listings

1. Open any eBay search or category page in your browser and set up your query and filters (keyword, category, price range, item condition, ...).
2. Copy the page URL and paste it into the **Start URLs** field of the Actor input. You can add multiple URLs, including direct item (`/itm/...`) URLs.
3. Optionally adjust **Max items**, **Scrape detail pages**, and the **Proxy configuration**.
4. Click **Start** and wait for the run to finish.
5. Download your data from the **Output** tab in JSON, CSV, Excel, HTML, or XML format.

#### How to scrape sold and completed items

To get **sold prices, sold dates, and bid counts**, tick eBay's **Sold items** / **Completed items** filters on the search page (the URL will contain `LH_Sold=1` and/or `LH_Complete=1`) and use that URL as a start URL, for example:

```
https://www.ebay.com/sch/i.html?_nkw=thinkpad+x1+carbon&LH_Sold=1&LH_Complete=1
```

For these searches, every item additionally includes `soldDate`, `soldPrice`, `soldPriceString`, and `bidCount`. With detail pages enabled (default) you also get the seller's feedback score and positive-feedback percentage, shipping cost, and full item data. Note that eBay does not show seller information on sold-search result cards, so with **Scrape detail pages** disabled the seller fields stay empty.

### Input

The Actor needs at least one start URL and a proxy:

- **startUrls** *(required)*: eBay search/category pages or individual item (`/itm/`) URLs to scrape. Sold/completed search URLs (`LH_Sold=1` / `LH_Complete=1`) are supported.
- **maxItems**: Maximum number of items to scrape (0 = unlimited).

#### Example

```json
{
  "startUrls": [
    {
      "url": "https://www.ebay.com/sch/i.html?_nkw=massage+recliner+chair&_sacat=6024"
    },
    {
      "url": "https://www.ebay.com/sch/i.html?_nkw=thinkpad+x1+carbon&LH_Sold=1&LH_Complete=1"
    }
  ],
  "maxItems": 10
}
```

### Output

After the Actor finishes the run, it stores the scraped results in a dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Output example (sold auction item)

```json
{
  "url": "https://www.ebay.co.uk/itm/398129661375",
  "categories": ["iPods & MP3 Players"],
  "itemNumber": "398129661375",
  "title": "Apple iPod classic 1st Generation 2001 M8541-",
  "endedDate": "11 Jul, 2026 11:00:02 BST",
  "soldDate": "11 Jul 2026",
  "soldPrice": 175.45,
  "soldPriceString": "£175.45",
  "bidCount": 61,
  "condition": "Used",
  "price": 206,
  "priceWithCurrency": "EUR 206.00",
  "image": "https://i.ebayimg.com/images/g/K0MAAeSwBoBqS~xK/s-l1000.webp",
  "images": ["https://i.ebayimg.com/images/g/nm0AAeSwCOdqRYzO/s-l1000.webp"],
  "seller": "jaymail2843",
  "sellerFeedbackCount": "289",
  "sellerFeedbackPercent": "100%",
  "sellerFeedbacks": [
    {
      "rating": "positive",
      "username": "7***7",
      "feedbackScore": 69,
      "date": "Past month",
      "verifiedPurchase": true,
      "comment": "Alles super, sehr netter Verkäufer, kann nur weiterempfehlen."
    }
  ],
  "itemLocation": "Selters, Germany",
  "statusMessage": "Item sold on Sat, 11 Jul at 11:00 AM.",
  "shippingCost": 14.49,
  "shippingCostWithCurrency": "EUR 14.49",
  "shipsTo": "Worldwide",
  "itemSpecifics": { "Marke": "Apple iPod", "Speicherkapazität": "5 GB" },
  "descriptionHtml": "<html>...</html>"
}
```

#### Main data fields

| Field | Description |
|---|---|
| `url` / `itemNumber` | Listing URL and eBay item ID |
| `title`, `subTitle`, `condition` | Listing title, subtitle, and item condition |
| `price`, `priceWithCurrency` | Current/final price shown on the listing page |
| `wasPrice`, `wasPriceWithCurrency` | Strikethrough "was" price, if discounted |
| `soldDate` | Date the item sold (sold/completed searches only) |
| `soldPrice`, `soldPriceString` | Final sold price (sold/completed searches only) |
| `bidCount` | Number of bids for auctions |
| `seller` | Seller username |
| `sellerFeedbackCount`, `sellerFeedbackPercent` | Seller's feedback score and positive-feedback percentage |
| `sellerFeedbacks` | Recent feedback entries left for the seller |
| `shippingCost`, `shippingCostWithCurrency` | Shipping cost (0 = free shipping) |
| `shipsTo`, `excludesShipping`, `itemLocation` | Shipping destinations, exclusions, and item location |
| `available`, `sold` | Quantity available and quantity sold |
| `image`, `images` | Main image and full image gallery |
| `itemSpecifics` | All item-specific attributes as key/value pairs (also `brand`, `mpn`, `ean`, `upc`, `type`) |
| `descriptionHtml` | Full HTML of the seller's description |

Note that the search results may vary if you're executing scraping from different locations, and prices are shown in the currency eBay picks for the proxy location. We recommend using proxies from a single country for consistent results.

### How much does it cost to scrape eBay?

Keep in mind that it is much more efficient to run one longer scrape (at least one minute) than a few shorter ones because of the startup time. On average, this scraper will cost you around **0.63 USD per 1,000 items**. For more details, see the [platform pricing page](https://apify.com/pricing/actors).

To lower the cost per item, disable **Scrape detail pages** — the Actor then reads everything from the search-results pages and doesn't open each listing, which is many times faster and cheaper (at the cost of fewer fields per item).

If you're not sure how many compute units you have left on your plan, you can always check your limits in the **Settings → Usage and Billing** tab in [your Console](https://console.apify.com/). The easiest way to know how many CUs you will need is to perform a test run.

### Proxy usage

This Actor, like many scrapers in the [retail industry](https://apify.com/industries/ecommerce-and-retail), requires **proxy servers** to function properly. We don't recommend running it on a free account for more complicated tasks than getting a sample of results. If you are planning to scrape more than a few results, subscribing to the [Apify platform](https://console.apify.com/sign-up) will provide you with access to a large pool of residential proxies.

### Supported countries

This Actor supports scraping eBay in the following countries and domains:

- 🇺🇸 **US** - https://www.ebay.com
- 🇬🇧 **GB** - https://www.ebay.co.uk
- 🇩🇪 **DE** - https://www.ebay.de
- 🇪🇸 **ES** - https://www.ebay.es
- 🇫🇷 **FR** - https://www.ebay.fr
- 🇮🇹 **IT** - https://www.ebay.it
- 🇮🇳 **IN** - https://www.ebay.in
- 🇨🇦 **CA** - https://www.ebay.ca
- 🇯🇵 **JP** - https://www.ebay.co.jp
- 🇦🇪 **AE** - https://www.ebay.ae
- 🇸🇦 **SA** - https://www.ebay.sa
- 🇧🇷 **BR** - https://www.ebay.com.br
- 🇲🇽 **MX** - https://www.ebay.com.mx
- 🇸🇬 **SG** - https://www.ebay.sg
- 🇹🇷 **TR** - https://www.ebay.com.tr
- 🇳🇱 **NL** - https://www.ebay.nl
- 🇦🇺 **AU** - https://www.ebay.com.au
- 🇸🇪 **SE** - https://www.ebay.se

If you'd like any more countries and domains to be added to this scraping list, please email <dtrungtin@gmail.com> with your request.

### Related Actors you might like

Speed up your whole scraping workflow with these companion tools from the same developer:

- **[AI Dataset Search](https://apify.com/dtrungtin/ai-dataset-search)** — Search and explore your scraped datasets in plain English. Ask questions and instantly surface the profiles or records you need from the output of this and other Actors, without writing manual filters.
- **[AI Scraper Input Generator](https://apify.com/dtrungtin/ai-scraper-input-generator)** — Turn a plain-language description of what you want to scrape into a ready-to-run input configuration, so you can set up Actor runs in seconds instead of hand-editing JSON.

Together with **eBay Search Scraper**, they cover the full loop: generate the input, run the scrape, then search the results.

### Tutorial, FAQ, and support

If you want to know more about how the eBay Scraper works, here's a detailed explanation and [step-by-step guide](https://blog.apify.com/how-to-scrape-ebay-and-extract-listings-data/) with screenshots and examples.

Scraping publicly available data is generally legal, but you should always respect the target website's Terms of Service and never scrape or store personal data you are not permitted to. If you run into any issues or have a feature request, please open an issue in the Actor's **Issues** tab — and if you need a custom scraping solution, [get in touch](https://apify.com/custom-solutions).

### Other e-commerce scrapers

We have many more e-commerce and retail scrapers in stock for you; to see the list of those, check out the [E-commerce Category in Apify Store](https://apify.com/store?category=ECOMMERCE).

### Need to find product pairs between eBay and another online shop?

Use the [AI Product Matcher](https://apify.com/equidem/ai-product-matcher). This AI model allows you to compare items from different web stores, identifying exact matches and comparing real-time data obtained via web scraping. With the AI Product Matcher, you can use scraped product data to monitor product matches across the industry, implement dynamic pricing for your website, replace or complement manual mapping, and obtain realistic estimates against your competition for upcoming promo campaigns.

Most importantly, it is relatively easy to get started with (just follow [this guide](https://blog.apify.com/product-matching-ai-pricing-intelligence-web-scraping/)) and is able to match thousands of product pairs.

# Actor input Schema

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

List of URLs that will be scraped or crawled.

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

Limit of items to be scraped

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2499334.m570.l1313&_nkw=massage%2Brecliner%2Bchair&_sacat=6024"
    }
  ],
  "maxItems": 2
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2499334.m570.l1313&_nkw=massage%2Brecliner%2Bchair&_sacat=6024"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dtrungtin/ebay-search-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 = { "startUrls": [{ "url": "https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2499334.m570.l1313&_nkw=massage%2Brecliner%2Bchair&_sacat=6024" }] }

# Run the Actor and wait for it to finish
run = client.actor("dtrungtin/ebay-search-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 '{
  "startUrls": [
    {
      "url": "https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2499334.m570.l1313&_nkw=massage%2Brecliner%2Bchair&_sacat=6024"
    }
  ]
}' |
apify call dtrungtin/ebay-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dtrungtin/ebay-search-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/foLOXkh7CHxvi5tLi/builds/0G83sCxgU52Q3iXtp/openapi.json
