# Listing Scraper for eBay - Prices, Item Details & Seller Leads (`scrapesage/ebay-scraper`) Actor

Scrape active eBay listings by keyword, link or seller on 10 marketplaces: price, condition, shipping, bids, units sold, seller feedback. Add item details (specifics, GTIN, photos, returns) and seller leads with EU/UK business contacts. Monitor mode. Independent tool, not affiliated with eBay.

- **URL**: https://apify.com/scrapesage/ebay-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** E-commerce, Lead generation, Agents
- **Features:** Limited permissions
- **Stats:** 44 total users, 11 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.86 / 1,000 listings

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

## Listing Scraper for eBay - Prices, Item Details & Seller Leads

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by eBay Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "eBay" is referenced only to describe the publicly available website this Actor collects data from.

Extract **active listings, full item details and seller leads** from [eBay](https://www.ebay.com), the world's largest auction and marketplace site. Search by keyword, paste any eBay search, item, seller or store link, or list seller usernames, on **10 marketplaces** (US, UK, DE, AU, CA, FR, IT, ES, NL, IE).

Every listing comes with its **price, condition, shipping cost, auction bids and time left, sold count, watchers, item location, the seller and their feedback**, a full-size photo and whether it is a sponsored placement. Turn on item details for **every item specific** (brand, model, MPN, UPC/EAN, size, colour and the rest), the **return policy, payment methods, category path, listing dates and the seller's own description**. Seller leads add feedback, items sold, followers, location and member-since, and for business sellers on the European and UK sites, the **business contact details eBay publishes** (company, contact name, address, phone, e-mail, VAT number).

No login and no API key: eBay's own public pages, parsed into clean, structured JSON.

> **This Actor does not scrape sold / completed listings.** eBay shows that view only to signed-in accounts, so it is not offered here. The demand signal you do get is **`soldQuantity`**: how many units a live listing has already sold, plus `watchers`.

### Why this scraper for eBay data?

- **70+ fields per item**: every item specific, condition notes, return policy, payment methods, location, category path, listing dates, description
- **The full Item specifics table** exactly as the listing shows it, plus brand, model, MPN, GTIN and colour as their own columns
- **10 marketplaces parsed in their own language**: German, French, Italian, Spanish and Dutch conditions, shipping, bids and seller lines, prices read with the right decimal mark
- **`sponsored`** flag from eBay's own placement data, and carousel cards that are not search results are left out
- **Seller leads** with feedback, items sold, location, member since, Top Rated and a 0-100 lead score, plus **published business contacts** for EU/UK business sellers
- **Every filter in a pasted eBay link is kept** (condition, price, format, item location, aspects), and the form's filters are added where the link sets none
- **Monitoring mode** delivers only listings and sellers not delivered before

### What you get

**Listing** (`type: "listing"`), from search results:

| Field | What it is |
| --- | --- |
| `title`, `subtitle`, `url`, `listingUrl`, `itemId`, `epid` | The listing (`listingUrl` repeats `url` on listing rows, so the listing views leave seller leads out) and its eBay catalogue product id when it has one |
| `price`, `originalPrice`, `buyItNowPrice`, `currency` | Asking price (current bid on an auction), the struck-through "was" price, an auction's Buy It Now price |
| `condition`, `conditionGroup` | eBay's condition label in the site's language, plus `new` / `open_box` / `refurbished` / `used` / `parts` for every language |
| `listingType`, `buyItNow`, `auction`, `bestOffer`, `bids`, `timeLeft` | Format and auction state |
| `shipping`, `deliveryEstimate`, `pickup`, `freeReturns`, `returns` | Shipping cost (`free`, `cost`, `currency`), delivery window, click-and-collect, free returns |
| `itemLocation`, `importFees` | Where the item ships from (shown for every listing on ebay.com, for imports on the other sites) and eBay's import-charges note |
| `soldQuantity`, `watchers`, `stockNote`, `coupon`, `newListing`, `signals` | Demand and promotion signals eBay prints on the card |
| `seller`, `sellerUsername`, `sellerType`, `topRatedPlus` | Seller username, positive-feedback %, feedback count, private / business where the site shows it, and eBay's Top Rated Plus badge (called eBay Premium Service on ebay.co.uk) |
| `sponsored`, `position`, `categoryId`, `image` | Paid placement, rank in the search, leaf category, full-size photo |

**Item details** (`type: "itemDetail"` in Item detail mode, or a listing with `enriched: true` when details are switched on) add:

| Field | What it is |
| --- | --- |
| `itemSpecifics` | Every row of the listing's Item specifics table, as `{ "Brand": "Nintendo", "Storage Capacity": "64 GB", ... }` |
| `brand`, `model`, `mpn`, `gtin13`, `color` | The key specifics as their own columns (blank when the seller entered "Does not apply") |
| `conditionDescription`, `sellerNotes`, `description` | eBay's condition text, the seller's condition notes and the seller's full item description |
| `returnPolicy`, `returns` | `{ accepted, days, returnShippingPaidBy }` and the policy text, for buyers in the listing's own country |
| `paymentMethods`, `shippingDetails`, `shippingNote` | Accepted payment methods, every shipping quote with its destination, and eBay's shipping text when it gives no price (for example local pickup only) |
| `categoryPath`, `categoryPathText`, `categoryId` | Where eBay files the item (eBay prints the path on about half of item pages; the others take it from a listing of the same category in the run) |
| `images`, `rating` | All photos in full size; the catalogue product's star rating when eBay has one |
| `availability`, `quantityAvailable`, `availabilityText` | Stock state and how many are left |
| `listedAt`, `endsAt`, `updatedAt` | Listing start, end and last revision |
| `seller` | Adds items sold, member since, response time, private / business registration and the VAT number business sellers publish |

**Seller lead** (`type: "seller"`): `username`, `storeName`, `storeUrl`, `positiveFeedbackPercent`, `feedbackScore`, `itemsSold`, `followers`, `location`, `memberSince`, `memberSinceYear`, `responseTime`, `about`, `topRatedSeller`, `leadScore` (0-100) and, for business sellers on the EU and UK sites, `businessName`, `contactName`, `businessAddress`, `businessPhone`, `businessEmail`, `vatNumber` and the full `businessDetails` block.

### Use cases

- **Reselling and sourcing**: what is listed, at what asking price, in what condition, and how many units each listing has already sold.
- **Price and competitor monitoring**: asking prices, list-price discounts and shipping across conditions and 10 marketplaces, on a schedule.
- **Deal alerts**: monitor a saved search (for example "vintage Omega Seamaster under $1,500") and get only newly listed items each run.
- **Product data and catalogues**: full item specifics, GTINs, category paths and descriptions for matching and enrichment.
- **B2B lead generation**: power sellers, stores, refurbishers and liquidators with feedback, volume and, for EU/UK business sellers, their published business contacts.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up); the free plan is enough to try this actor.
2. Open **Listing Scraper for eBay**, enter keywords (or paste eBay links, or seller usernames), pick a marketplace and filters, and click **Start**.
3. Results stream into the dataset page by page. The run's status line says what happened, including anything eBay refused.
4. **Export** as JSON, CSV, Excel, XML or RSS, or pull results with the [Apify API](https://docs.apify.com/api/v2).

> No proxy setup needed: the actor uses Apify's shared proxies and opens a fresh session whenever eBay refuses a page.

### Input

```json
{
  "searchQueries": ["nintendo switch oled", "iphone 15 pro 256gb"],
  "marketplace": "US",
  "condition": "used",
  "priceMin": 50,
  "priceMax": 400,
  "sort": "newest",
  "enrichItemDetails": true,
  "emitSellerLeads": true,
  "maxItems": 200,
  "maxSellers": 50
}
```

- **mode**: `search` (active listings, the default), `itemDetail` (full item data for every listing found or linked) or `seller` (each seller in `sellerNames` as a lead plus their listings).
- **searchQueries**: keywords such as `pokemon booster box`, `vintage rolex`, `dyson v15`, combined with the filters. Several keywords share **maxItems** fairly.
- **startUrls**: eBay search links (every filter in the link is kept), item links or item numbers, seller (`/usr/`) and store (`/str/`) links, from any of the 10 marketplaces. A list can also be imported from a file with **urlsFromFile**.
- **sellerNames**: seller usernames. Add keywords to search inside their listings.
- **marketplace / categoryId / condition / listingType / priceMin / priceMax / freeShippingOnly / sort**: narrow keyword and seller searches. `categoryId` needs at least one keyword.
- **enrichItemDetails** (+ **includeDescription**): open each item page for the full record.
- **emitSellerLeads** / **maxSellers**: one lead record per unique seller found.
- **monitorMode** / **monitorKey**: deliver only what was not delivered before.

### Output

A listing:

```json
{
  "type": "listing",
  "marketplace": "US",
  "itemId": "820246797256",
  "url": "https://www.ebay.com/itm/820246797256",
  "title": "Nintendo Switch OLED Model White Console w/ White Joy-Con & Dock",
  "subtitle": "Nintendo Switch · Nintendo Switch (OLED Model)",
  "condition": "Pre-Owned",
  "conditionGroup": "used",
  "price": { "raw": "$170.00", "currency": "USD", "value": 170 },
  "currency": "USD",
  "listingType": "fixed_price",
  "buyItNow": true,
  "bestOffer": true,
  "shipping": { "raw": "+$15.65 delivery", "free": false, "cost": 15.65, "currency": "USD" },
  "itemLocation": "United States",
  "watchers": 11,
  "seller": { "username": "example_games", "url": "https://www.ebay.com/usr/example_games", "positiveFeedbackPercent": 100, "feedbackScore": 17 },
  "sellerUsername": "example_games",
  "image": "https://i.ebayimg.com/images/g/mY8AAeSwlY5q0qoU/s-l1600.jpg",
  "newListing": true,
  "sponsored": true,
  "categoryId": "139971",
  "position": 3,
  "searchQuery": "nintendo switch oled",
  "scrapedAt": "2026-10-17T19:59:49.903Z"
}
```

With item details on, the same listing also carries, for example:

```json
{
  "enriched": true,
  "itemSpecifics": { "Brand": "Nintendo", "Platform": "Nintendo Switch", "Model": "Nintendo Switch (OLED Model)", "Storage Capacity": "64 GB", "Connectivity": "HDMI", "Country of Origin": "Japan" },
  "brand": "Nintendo",
  "model": "Nintendo Switch (OLED Model)",
  "mpn": "115461",
  "conditionDescription": "An item that has been used previously. The item may have some signs of cosmetic wear, but is fully operational...",
  "returnPolicy": { "accepted": true, "days": 30, "returnShippingPaidBy": "buyer" },
  "paymentMethods": ["PayPal", "Venmo", "Google Pay", "Visa", "Mastercard", "Discover"],
  "itemLocation": "Phoenix, Arizona, United States",
  "categoryPathText": "Electronics > Video Games & Consoles > Video Game Consoles",
  "listedAt": "2026-10-12T22:03:01.000Z",
  "endsAt": "2026-10-19T22:03:01.000Z",
  "seller": { "username": "example_pawnshop", "name": "Example Pawn Shop", "feedbackScore": 11166, "itemsSold": 23000, "memberSince": "May 2010" },
  "description": "Nintendo Switch OLED Model HEG-001 in white, tested and working, with the dock and both Joy-Cons ..."
}
```

A seller lead from a German business store:

```json
{
  "type": "seller",
  "marketplace": "DE",
  "username": "beispiel_retro",
  "storeName": "Beispiel Retro Games",
  "storeUrl": "https://www.ebay.de/str/beispielretrogames",
  "positiveFeedbackPercent": 100,
  "feedbackScore": 61795,
  "itemsSold": 161678,
  "followers": 5074,
  "location": "Deutschland",
  "memberSince": "15. Apr. 2004",
  "responseTime": "innerhalb 12 Stunden",
  "topRatedSeller": true,
  "sellerType": "business",
  "businessName": "Beispiel Retro Games GmbH",
  "contactName": "Max Mustermann",
  "businessAddress": "Musterstr. 1, 10115, Berlin, Germany",
  "businessPhone": "+49 30 0000000",
  "businessEmail": "kontakt@example.de",
  "vatNumber": "DE 000000000",
  "leadScore": 97,
  "profileUrl": "https://www.ebay.de/usr/beispiel_retro"
}
```

The dataset opens on an **Overview** table; the **Listings**, **Item details**, **Seller leads** and **Business contacts** views show one record type's columns each.

### Good to know

- **Sold / completed listings are not available**: eBay serves that view only to signed-in accounts. `soldQuantity` and `watchers` are the public demand signals.
- **Fields appear when eBay shows them**: bids and time left exist only on auctions, a "was" price only on discounted listings, `sellerType` only on sites that label private and business sellers, `rating` only for catalogue products with reviews, `mpn` and `gtin13` only when the seller entered them.
- **Item location** is printed on every ebay.com card; on the European, UK and Australian sites eBay prints it on the card for imported items only, and the item page always has it (turn on item details).
- **Shipping, returns and import charges on item pages** are shown by eBay for the visitor's country. When a page is read from outside the listing's own country, a row keeps only what applies to buyers in that country: the search page's domestic shipping quote for listings found by a search, and eBay's domestic quote and return policy from the listing data (ebay.com always has them, most ebay.de listings too). A policy eBay shows only to foreign visitors is never reported as the listing's policy. `shipping.destination` names the country a quote is for.
- **Business contacts** come from the business details eBay publishes for business sellers on its European and UK sites. Private sellers and US sellers have none.
- **A category on its own** cannot be browsed: eBay refuses whole-category browsing to automated requests, so add at least one keyword and use `categoryId` to narrow it.
- **ebay.ca** checks every automated visitor, so its search pages go through a slower unblocking route and take one to three minutes each (240 listings per page). Item details for ebay.ca listings are read from the same listing on www.ebay.com: a row found by a search keeps the Canadian price and the search page's shipping and returns notes for Canadian buyers, a pasted item link keeps the listing's own price and currency, and `returnPolicy` stays empty because that page names only US return policies. If eBay still refuses a page, the run says so and bills no results for it.
- **Monitoring**: the first run is the baseline. It delivers up to `maxItems` and remembers the rest of what it saw, so later runs never bill older listings as new. Every run, including a monitoring run that finds nothing new, pays any run-start fee listed on the Pricing tab, so a schedule every hour or so is usually plenty.

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

This Actor uses Apify's **pay-per-event** pricing: you pay for the results it delivers, at the prices on the **Pricing** tab of this page (which also lists any run-start fee). The result events are:

- **Listing**: one active eBay listing with title, condition, price, shipping, bids, quantity sold, location and seller.
- **Item detail**: one listing with its full item page: every item specific, return policy, payment methods, photos, description and the seller's details.
- **Seller lead**: one seller profile as a lead: feedback, items sold, followers, location, member since, Top Rated status, lead score and any published business contacts.

A run that finds nothing, or that eBay refuses, bills no results. Set a maximum total charge on the run for a hard cap on spend, and use **maxItems** / **maxSellers** to control how much the Actor fetches.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)**: start runs, fetch datasets, manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)**: official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)**: run it on a cron to keep your data fresh.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)**: trigger downstream actions the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/ebay-scraper').call({
    searchQueries: ['nintendo switch oled'],
    condition: 'used',
    monitorMode: true,
    monitorKey: 'switch-oled-listings',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} new listings`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps, no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)**: multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)**: push new records into your CRM, sheet or repricer.
- **[Slack](https://docs.apify.com/platform/integrations/slack)**: get notified when a run finds something new.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)**: auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)**: pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)**: trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)**: ask your assistant to "find used Nintendo Switch OLED listings under $200 on eBay and tell me the asking-price range by condition" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready**: AI agents can discover it, run it and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)**: an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp), with no account and no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)**: agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Pair eBay with other marketplace, price and lead-gen scrapers:

- [reverb-scraper](https://apify.com/scrapesage/reverb-scraper): musical-instrument marketplace listings, prices & seller leads
- [shopify-store-scraper](https://apify.com/scrapesage/shopify-store-scraper): Shopify storefront products, variants & prices
- [made-in-china-scraper](https://apify.com/scrapesage/made-in-china-scraper): B2B supplier products & manufacturer leads
- [tradeindia-scraper](https://apify.com/scrapesage/tradeindia-scraper): India B2B suppliers, manufacturers & leads
- [importyeti-scraper](https://apify.com/scrapesage/importyeti-scraper): US import records, suppliers & B2B leads
- [craigslist-scraper](https://apify.com/scrapesage/craigslist-scraper): classifieds listings, prices & contact leads
- [sgcarmart-used-car-scraper](https://apify.com/scrapesage/sgcarmart-used-car-scraper): used-vehicle marketplace prices & dealer leads
- [steam-scraper](https://apify.com/scrapesage/steam-scraper): game store prices, reviews & charts

### Tips

- For demand signal, read **`soldQuantity`** and **`watchers`** on each listing; sort by **newest** to see what just came in.
- Narrow with **condition**, **priceMin/priceMax**, **listingType** and **categoryId** to avoid unrelated items, or paste a search link you already filtered on eBay.
- Turn on **enrichItemDetails** when you need item specifics, return policies, descriptions or the seller's details; it adds one request per listing.
- For seller leads with business contacts, search a European or UK marketplace and turn on **emitSellerLeads**.
- Use a distinct **monitorKey** per saved search so each watch keeps its own memory.

### FAQ

- **Does it need my eBay login or an API key?** No. It reads eBay's public pages: no account, cookies or developer key.
- **Can I get *sold* prices?** No. eBay serves its sold / completed-listings view only to signed-in accounts, so this Actor does not offer it. The nearest public signal is **`soldQuantity`**, the number of units a live listing has already sold.
- **Do I need to configure a proxy?** No. The actor manages proxy sessions for you. You can override it under Proxy configuration, but you do not need to.
- **Which marketplaces?** US, UK, DE, AU, CA, FR, IT, ES, NL and IE, set with **marketplace**. Pasted links keep their own site, and prices use the local currency.
- **How do I get seller contact details?** eBay publishes business details (company, contact name, address, phone, e-mail, VAT number) for business sellers on its European and UK sites, and the seller leads include them. Private sellers and US sellers have no published contact details.
- **Why did a run return fewer listings than maxItems?** The search had fewer results, the filters were narrow, or eBay refused part of it; the run's status line says which.
- **Are there exports?** Yes: JSON, CSV, Excel, XML and RSS, plus the API and 5,000+ integrations.

### Data & lawful use

This Actor reads public listings and the seller information shown on them, including the business details eBay publishes for business sellers on its European and UK sites. Sellers on eBay include private individuals and sole traders, so seller names, usernames and any contact details are personal data. If you are in the EU or UK you are the data controller for what you do with them: have a lawful basis, use the data for market research, price monitoring, lawful sourcing or business contact that the law allows, honour deletion requests, and do not send unsolicited marketing where the e-privacy rules forbid it, in particular never to private sellers.

Under [Apify's Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract), which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by eBay Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"eBay" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense, to identify the publicly accessible website from which this Actor collects data. This Actor is not an official eBay product, is not authorised or certified by eBay Inc., and does not distribute eBay software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome; this actor is actively maintained.

# Actor input Schema

## `mode` (type: `string`):

<b>Active listings</b> = items currently for sale (the default). <b>Item detail</b> = full data for every listing: item specifics, return policy, payment methods, location, description, seller (also works on searches and sellers). <b>Seller</b> = each seller in <b>Seller usernames</b> as a lead profile plus their listings; without seller names it turns the sellers found by your keywords into leads. Sold / completed listings are not available: eBay shows that view only to signed-in accounts (the option stays so older saved settings still start; such a run ends with a note and bills no listings).

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

Keywords to search on eBay, e.g. <code>nintendo switch oled</code>, <code>iphone 15 pro</code>, <code>vintage rolex</code>, <code>pokemon booster box</code>. Each is combined with the filters below. With <b>Seller usernames</b> filled in, the keywords search inside those sellers' listings.

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

Paste eBay links: search pages (<code>ebay.com/sch/i.html?\_nkw=...</code>, every filter in the link is kept, and the form's filters are added where the link sets none), item pages (<code>ebay.com/itm/123...</code>, or just the item number), seller pages (<code>ebay.com/usr/\<name></code>) and stores (<code>ebay.com/str/\<store></code>). Links from any of the 10 marketplaces work in one run. Used in addition to the keywords above.

## `sellerNames` (type: `array`):

eBay seller usernames (or their /usr/ or /str/ links), e.g. <code>musicstore_official</code>. In <b>Seller</b> mode each one becomes a lead profile plus its listings; in the other modes you get the sellers' listings only. Add keywords to search inside their listings.

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

Which eBay site to search. Controls the domain, the currency and the language of the listings. Pasted links keep their own site.

## `categoryId` (type: `string`):

Optional eBay category id (<code>\_sacat</code>) that narrows your keyword or seller searches, e.g. <code>139971</code> (Video Game Consoles). Find it in any eBay search URL. eBay does not serve a whole category without a keyword, so add at least one keyword.

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

Filter by item condition.

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

Restrict to auctions or fixed-price (Buy It Now) listings.

## `priceMin` (type: `integer`):

Only items at or above this price (in the marketplace currency).

## `priceMax` (type: `integer`):

Only items at or below this price.

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

Only return listings that ship for free.

## `sort` (type: `string`):

How eBay orders the results. Monitoring mode reads the newest listings first unless you choose another order.

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

Open each listing's item page and add every item specific (brand, model, MPN, UPC/EAN, size, colour and the rest), the condition notes, the return policy, payment methods, item location, category path, product rating, all photos in full size, quantity sold / available, watchers, listing dates and the seller's details. Adds one request per listing.

## `includeDescription` (type: `boolean`):

With item details on, also add the seller's own item description as plain text (up to 5,000 characters).

## `emitSellerLeads` (type: `boolean`):

Output one deduplicated seller-lead record (type = "seller") for every unique seller found: positive-feedback %, feedback score, items sold, followers, location, member since, Top Rated status and a 0-100 lead score. Business sellers on the European and UK sites also carry the business details eBay publishes for them (company, contact name, address, phone, e-mail, VAT number).

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

Maximum number of listings to scrape across all keywords, links and sellers. Several searches share it fairly.

## `maxSellers` (type: `integer`):

Maximum number of seller-lead profiles (Seller mode, or when "Also emit seller-lead records" is on).

## `deduplicateResults` (type: `boolean`):

Skip a listing already delivered by another keyword or link in this run (recommended).

## `monitorMode` (type: `boolean`):

Remember item and seller ids across runs in a named key-value store and deliver ONLY listings and sellers not delivered before. The first run is the baseline: it delivers up to Max items and remembers what else it saw, so later runs never bill older listings as new. Pairs with Apify Schedules for deal alerts and price watching.

## `monitorKey` (type: `string`):

Names the memory used by monitoring mode. Use a distinct key per saved search so different watches keep separate state.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests per marketplace. 3-6 is a good balance of speed and reliability.

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

Leave as is: the actor uses Apify's shared proxies and opens a fresh session whenever eBay refuses a page, which keeps runs fast and cheap. Choose a proxy group (for example Residential) or your own proxies here only if you need to; your choice is then used for every request.

## `urlsFromFile` (type: `string`):

Paste a list of eBay links (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "nintendo switch oled"
  ],
  "marketplace": "US",
  "condition": "any",
  "listingType": "all",
  "freeShippingOnly": false,
  "sort": "best_match",
  "enrichItemDetails": false,
  "includeDescription": true,
  "emitSellerLeads": false,
  "maxItems": 100,
  "maxSellers": 50,
  "deduplicateResults": true,
  "monitorMode": false,
  "monitorKey": "default",
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "urlsFromFile": ""
}
```

# Actor output Schema

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

All scraped records as JSON items in the default dataset.

# 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": [
        "nintendo switch oled"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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": ["nintendo switch oled"],
    "proxyConfiguration": { "useApifyProxy": True },
    "urlsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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": [
    "nintendo switch oled"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "urlsFromFile": ""
}' |
apify call scrapesage/ebay-scraper --silent --output-dataset

```

## MCP server setup

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