# eBay Category Scraper — Every Listing In A Category (`thenetaji/ebay-category-products-scraper`) Actor

Export the listings in any eBay category. Paste a category link and page through the whole thing — useful for sizing a niche or tracking what a category carries. Turn on item details to add price, condition, brand and specs to every row.

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

## Pricing

from $1.70 / 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 Category Products Scraper

The Actor pages through an eBay category browse listing and saves the items it contains, recording for each one its item ID, its link, and the page it was found on. Enabling `enrichItemDetails` adds the full item page to every row, which turns a list of IDs into a list of priced, described products at the cost of one extra request per item.

```json
{
  "category": "https://www.ebay.com/b/Womens-Shoes/3034/bn_740022",
  "startPage": 1,
  "maxItems": 100,
  "enrichItemDetails": false
}
```

### Accepted input

`category` is required and takes an eBay category browse link of the form `https://www.ebay.com/b/<slug>/<category_id>/bn_<bn_id>`. A link is the input rather than a category ID because the listing is identified by three values together — the slug, the category ID, and the browse-node ID — and those three appear side by side only inside the browse URL. A value that is not a browse link is rejected before any request is made rather than resolved to a guess. The [eBay Category Tree Scraper](https://apify.com/thenetaji/ebay-category-tree-scraper) publishes a usable link for every category eBay lists.

`startPage` defaults to `1` and sets the page the walk begins on. `maxItems` bounds the number of records saved and defaults to `100`; a value of `0` disables the bound. `enrichItemDetails` defaults to `false`.

### Result fields

Without enrichment each row carries `item_id`, `url`, and `page`. A category browse listing publishes only identifiers and links; the title, price, and condition are not present on it and are not inferred.

With `enrichItemDetails` enabled each row additionally carries `title`, `price`, `currency`, `image_url`, `images`, `condition`, `availability`, `brand`, `mpn`, `gtin`, `model`, `breadcrumbs`, `seller`, `store_name`, and `item_detail`. `page` is preserved through enrichment, since only the listing knows which page a row came from.

```json
{
  "item_id": "157392565949",
  "url": "https://www.ebay.com/itm/157392565949",
  "page": 1,
  "title": "adidas women Grand Court 2.0 Shoes",
  "price": 24,
  "currency": "USD",
  "condition": "New",
  "brand": "adidas",
  "store_name": "adidas"
}
```

### How the walk advances, and where it stops

Pages are independent fetches rather than steps along a cursor. A page number requested twice can come back composed differently, and consecutive pages overlap by a handful of promoted listings, so the run keeps every item ID it has already saved and yields each one only once. The walk ends when `maxItems` is reached, when a page comes back empty, or when two consecutive pages contain nothing that has not already been saved. That last condition matters because the listing publishes no end-of-results flag; without it an exhausted category would be requested indefinitely.

Page size is set by eBay and is not uniform. Large categories return roughly 65 to 70 items per page, but a narrow category can return far fewer — a single-digit page is normal near the end of one, and is not a sign the run failed. A run that saves fewer rows than `maxItems` has reached the end of the category, not an error.

### Resuming a long category

`startPage` exists for categories too large to walk in one run. A run that stops at page 40 can be continued by starting the next at 41. Because pages are independent fetches, a resumed run does not share the earlier run's record of what it has already saved, so a small overlap between two runs is expected; deduplicating the combined dataset on `item_id` removes it.

### What enrichment costs

Enrichment is one additional request per item and is charged per item as a separate event, billed only after the item page has been read successfully. An item whose page cannot be read keeps its listing row unchanged and is not charged. Enriching a run of 1,000 items therefore means 1,000 extra requests, which is why the setting is off by default; where a full product record is needed for a known list of IDs rather than a whole category, the [eBay Product Scraper](https://apify.com/thenetaji/ebay-product-scraper) is the direct route.

### Related Actors

The [eBay Category Tree Scraper](https://apify.com/thenetaji/ebay-category-tree-scraper) supplies the `category` links this Actor takes and is the natural first run. For a seller's catalogue rather than a category, use the [eBay Store Scraper](https://apify.com/thenetaji/ebay-store-scraper); for eBay's current promotions, the [eBay Deals Scraper](https://apify.com/thenetaji/ebay-deals-scraper). The [eBay Keyword Tool](https://apify.com/thenetaji/ebay-keyword-suggestions-scraper) covers keyword research, which this Actor does not do.

# Actor input Schema

## `category` (type: `string`):

An eBay category browse link, for example https://www.ebay.com/b/Womens-Shoes/3034/bn\_740022. Run the Category Tree Scraper to list every category and its link.

## `startPage` (type: `integer`):

Which category page to start from. Use this to resume a large category walk where a previous run stopped.

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

Maximum number of records to save. Set 0 for no limit.

## `enrichItemDetails` (type: `boolean`):

Add the full item page to every row — condition, availability, all images, brand, MPN, GTIN, model, the category path, and the seller's store. This makes one extra request per item.

## Actor input object example

```json
{
  "category": "https://www.ebay.com/b/Womens-Shoes/3034/bn_740022",
  "startPage": 1,
  "maxItems": 20,
  "enrichItemDetails": false
}
```

# 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 = {
    "category": "https://www.ebay.com/b/Womens-Shoes/3034/bn_740022",
    "startPage": 1,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("thenetaji/ebay-category-products-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 = {
    "category": "https://www.ebay.com/b/Womens-Shoes/3034/bn_740022",
    "startPage": 1,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("thenetaji/ebay-category-products-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 '{
  "category": "https://www.ebay.com/b/Womens-Shoes/3034/bn_740022",
  "startPage": 1,
  "maxItems": 20
}' |
apify call thenetaji/ebay-category-products-scraper --silent --output-dataset

```

## MCP server setup

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