# eBay Product Scraper — Prices, Condition & Specs (`thenetaji/ebay-product-scraper`) Actor

Get full details for any eBay listing. Paste one link or a whole list and each one comes back with its title, price, condition, stock state, every image, brand, MPN, GTIN, model, the category path it sits in, and the seller's store name.

- **URL**: https://apify.com/thenetaji/ebay-product-scraper.md
- **Developed by:** [The Netaji](https://apify.com/thenetaji) (community)
- **Categories:** E-commerce, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.10 / 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/platform/actors/running/actors-in-store#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

The Actor reads one or more eBay listings and saves each as a structured record containing the title, price and currency, condition, stock state, every image on the page, the manufacturer identifiers the seller filled in, the category path the listing sits in, and the seller's eBay Store name. Listings that have been removed produce no dataset record rather than an error.

```json
{
  "item_ids": [
    "https://www.ebay.com/itm/157392565949",
    "146334712345"
  ]
}
```

### Accepted input

`item_ids` is required and accepts a list in which each entry is either a full item page link or the bare numeric item ID; the two forms can be mixed in one run. eBay appends a tracking query to nearly every link it hands out, and older links place a title slug before the ID; both shapes are reduced to the numeric ID before the request is made, so a link copied from anywhere on eBay is accepted as-is.

### Result fields

`item_id`, `url`, `title`, `price`, and `currency` describe the listing itself. `condition` is eBay's own wording, such as `New` or `Pre-owned`, and `availability` reports the stock state as `InStock` or `OutOfStock`. `images` holds every image on the page at full resolution, and `image_url` repeats the first of them so the dataset preview has a thumbnail column.

`brand`, `mpn`, `gtin`, and `model` come from the listing's structured product data. These four are filled in by the seller rather than by eBay, and a listing whose seller left them blank returns `null` for each; this is common on used and single-item listings and is not an error.

`breadcrumbs` is the listing's own category path as an ordered array from eBay's home page down to the leaf category, each entry carrying `position`, `name`, and `url`. `seller` holds the seller summary, and `store_name` repeats the store name at the top level where the seller runs an eBay Store; sellers without one return `null`. `item_detail` carries the complete record for anything not broken out into its own field.

```json
{
  "item_id": "157392565949",
  "url": "https://www.ebay.com/itm/157392565949",
  "title": "adidas women Grand Court 2.0 Shoes",
  "price": 24,
  "currency": "USD",
  "condition": "New",
  "availability": "InStock",
  "brand": "adidas",
  "mpn": null,
  "gtin": null,
  "model": null,
  "images": [
    "https://i.ebayimg.com/images/g/3XEAAeSwJtNqdX3T/s-l1600.jpg",
    "https://i.ebayimg.com/images/g/BgYAAeSwXudqdX3T/s-l1600.jpg"
  ],
  "breadcrumbs": [
    { "position": 1, "name": "eBay", "url": "https://www.ebay.com" },
    { "position": 4, "name": "Women's Shoes", "url": "https://www.ebay.com/b/Womens-Shoes/3034/bn_740022" }
  ],
  "seller": { "store_name": "adidas" }
}
```

This is a trimmed, live-verified result; `images` and `breadcrumbs` are shown with two entries each and returned in full.

### Behaviour on partial results

Each item is a separate page and therefore a separate request. A listing that has been removed, or an ID that never existed, is reported by the source as an empty response rather than as a failure; the Actor records that the item was not found, saves no row for it, and continues with the rest of the list. A request that fails outright is treated the same way. A run of ten IDs in which two are dead finishes normally with eight rows saved, so one bad entry in a pasted list does not cost the other nine.

A run whose `item_ids` list is empty is rejected before any request is made.

### Prices are the listed price only

`price` is the price shown on the listing page in the listing's own currency. Auction listings therefore report the current bid at the moment of the run rather than a final sale price, and no shipping, tax, or best-offer adjustment is included. The Actor does not read sold or completed listings.

### Related Actors

`store_name` from any result is the exact input the [eBay Store Scraper](https://apify.com/thenetaji/ebay-store-scraper) takes, so the two chain directly: read an item, then list everything else that seller carries. To collect item IDs in bulk before enriching them here, use the [eBay Category Products Scraper](https://apify.com/thenetaji/ebay-category-products-scraper) or the [eBay Deals Scraper](https://apify.com/thenetaji/ebay-deals-scraper); both offer the same item detail as an optional per-row add-on, which avoids exporting IDs and re-importing them. The [eBay Category Tree Scraper](https://apify.com/thenetaji/ebay-category-tree-scraper) lists the categories those runs accept, and the [eBay Keyword Tool](https://apify.com/thenetaji/ebay-keyword-suggestions-scraper) expands seed terms into the phrases shoppers actually search.

# Actor input Schema

## `item_ids` (type: `array`):

One or more eBay items to fetch. Paste item page links, or numeric item IDs — both work, and you can mix them.

## Actor input object example

```json
{
  "item_ids": [
    "157392565949"
  ]
}
```

# Actor output Schema

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

All records scraped by this run

# 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 = {
    "item_ids": [
        "https://www.ebay.com/itm/157392565949"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thenetaji/ebay-product-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 = { "item_ids": ["https://www.ebay.com/itm/157392565949"] }

# Run the Actor and wait for it to finish
run = client.actor("thenetaji/ebay-product-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 '{
  "item_ids": [
    "https://www.ebay.com/itm/157392565949"
  ]
}' |
apify call thenetaji/ebay-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thenetaji/ebay-product-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/4ngO4DrA0bwmYKkeV/builds/zXJmXK9G2mX52j9cS/openapi.json
