# eBay Listings Scraper - Prices, Bids, Sellers & Item Specifics (`topapi/ebay-listings-scraper`) Actor

Scrape active eBay listings by keyword, search URL, category, seller or item link: price, bids, time left, shipping, condition, seller score, sold count and sponsored flag; add item specifics, images, quantity and returns. 13 eBay sites, monitor mode. $0.09 per 1,000 listings, no start fee.

- **URL**: https://apify.com/topapi/ebay-listings-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Security:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.09 / 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.

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 Listings Scraper do?

**eBay Listings Scraper** returns active eBay listings as structured rows: the price or price range, buying format, bids and time left, shipping, condition, item location, the seller and their feedback, sold count, watchers and whether eBay marked the listing as sponsored. Search by keyword, paste any eBay search, category, store or seller link, or give item numbers. Resellers, price trackers, brand-protection teams and market researchers use it to watch what is for sale right now.

eBay search scraper - eBay product scraper - eBay listings API - eBay auction tracker

- **Every search card as a row:** title, price (and price range), original price, discount, format, bids, time left, shipping cost, total price, returns, location, sold count, watchers, seller, feedback score and positive %
- **Sponsored flag eBay hides:** eBay scrambles the visible "Sponsored" label; the actor reads the accessibility label it points at, so each row carries `isSponsored` and an `organicRank` among non-sponsored listings
- **Keyword, URL, category, store, seller or item number:** combine any of them in one run
- **Item details add-on:** item specifics, all images, quantity available, exact watchers, returns policy, delivery estimate, seller details, listing start and end time, and the seller's own description
- **13 eBay sites:** US, UK, Germany, France, Italy, Spain, Canada, Australia, Austria, Switzerland, Ireland, Netherlands and Poland, each in its own currency
- **Monitor mode:** scheduled runs deliver only listings earlier runs did not, and can re-deliver listings whose price changed
- **Free price summary:** count, min, median, percentiles and max per search, plus auction, free-shipping and sponsored shares
- **No eBay account, cookies or API key**
- **Export anywhere:** JSON, CSV, Excel; schedules, webhooks, Make, Zapier, n8n, Google Sheets; the Apify API and MCP server

### What data can you get from eBay listings?

<table>
<tr><td>💲 Price and price range (<code>price</code>, <code>priceMax</code>)</td><td>🏷️ Original price and discount</td><td>💱 Currency</td></tr>
<tr><td>🔨 Format, bids and time left</td><td>🤝 Accepts offers (<code>bestOffer</code>)</td><td>🚚 Shipping cost and total price</td></tr>
<tr><td>↩️ Free returns, import fees</td><td>📍 Item location</td><td>📦 Sold count and watchers</td></tr>
<tr><td>👤 Seller, feedback score, positive %</td><td>🏅 Top Rated, eBay Refurbished, Authenticity Guarantee</td><td>📢 Sponsored flag and organic rank</td></tr>
<tr><td>📝 Title, subtitle, condition</td><td>🧩 Product chips (<code>itemAttributes</code>)</td><td>⭐ Catalog rating and count</td></tr>
<tr><td>🗂️ Category id and eBay product id (<code>epid</code>)</td><td>🖼️ Image (500 and 1600 px)</td><td>🔗 Item link and number</td></tr>
<tr><td>📋 Item specifics (details)</td><td>📸 All gallery images (details)</td><td>⏱️ Start and end time (details)</td></tr>
</table>

On 568 listing rows from four test runs (keywords "iphone 13", "nintendo switch", "ps5 console"), every row had the item id, link, title, price, currency, condition, format, shipping line, location, image and seller; 97% had the seller's feedback score, 97% the category id, 81% product chips, 65% the eBay product id, 52% a catalog rating, 26% a sold count and 21% a watcher count (eBay prints those two only on some cards).

### How to scrape eBay listings

1. Open the actor and type one or more **Keywords**, for example `iphone 13`.
2. Choose the **eBay site** (ebay.com by default) and any **Filters**: condition, format, price range, sort, free shipping, location.
3. Set **Max listings**. Turn on **Item details** if you need item specifics, all images and start/end times.
4. Click **Start**. Rows appear in the dataset as each search page is read; download them as JSON, CSV or Excel.

### ⬇️ Input

| Field | What it does |
|---|---|
| `keywords` | One search per keyword, e.g. `["iphone 13", "rtx 4080"]` |
| `startUrls` | eBay search URLs (`/sch/i.html?...`, filters read from the URL), category pages (`/b/...` or `/sch/9355/i.html`), store pages (`/str/...`), seller pages (`/usr/...`), item links (`/itm/...`) |
| `sellers` + `sellersMode` | Each seller's listings (`inventory`), a keyword search limited to these sellers (`only`), or without them (`exclude`) |
| `itemUrls` | Item links or numbers; each gives one full row from the item page |
| `ebaySite` | `ebay.com`, `ebay.co.uk`, `ebay.de`, `ebay.fr`, `ebay.it`, `ebay.es`, `ebay.ca`, `ebay.com.au`, `ebay.at`, `ebay.ch`, `ebay.ie`, `ebay.nl`, `ebay.pl` |
| `categoryId` | eBay category id; with no keyword it lists the whole category |
| `itemCondition` / `conditionId` | New, used, open box, refurbished, for parts, or exact eBay condition ids |
| `buyingFormat` | All, auction, Buy It Now, accepts offers, classified ads |
| `minPrice` / `maxPrice` | eBay's price filter, in the site's currency |
| `sortBy` | Best match, ending soonest, newly listed, price + shipping low/high, distance |
| `freeShipping`, `returnsAccepted` | eBay's own filters |
| `itemLocation`, `locatedIn`, `availableTo` | Domestic or worldwide, items located in a country, items shipped to a country |
| `keywordMatch`, `excludeKeywords`, `searchInDescription` | All / any / exact words, words to leave out, match descriptions too |
| `aspectFilter` | Item-specific filters, e.g. `{"Brand": "Apple", "Storage Capacity": "128 GB"}` |
| `titleMustMatchQuery`, `titleMustInclude` | Keep only titles with every keyword word / every given word |
| `excludeSellers`, `skipSponsored` | Drop listings from these sellers / drop sponsored listings |
| `minSellerFeedbackScore`, `minSellerPositivePercent` | Drop sellers below these |
| `minBids`, `endingWithinHours` | Auctions with at least N bids / ending within N hours |
| `includePartialMatches`, `dedupeItemIds` | Keep eBay's "fewer words" matches / one row per listing across searches |
| `includeItemDetails`, `includeDescription` | The paid item-details add-on; the seller's description text with it |
| `monitorMode`, `trackPriceChanges`, `monitorStoreName`, `resetMonitorState` | Deliver only new listings (and price changes) between scheduled runs |
| `maxItems`, `maxItemsPerSearch`, `maxPages`, `itemsPerPage` | Run size; 0 = no limit |
| `includeSummary`, `compact` | Free price summary; 25 core fields per row for AI agents |
| `proxyConfiguration`, `maxConcurrency` | Your own proxy groups; parallel item pages |

Filters marked "eBay's" change the search itself. The refine filters (`titleMustMatchQuery`, `excludeSellers`, `skipSponsored`, seller score, bids, ending window) run on every row before it is delivered, and a row they remove is not charged.

#### Input JSON

```json
{
    "keywords": ["iphone 13"],
    "ebaySite": "ebay.com",
    "itemCondition": "used",
    "buyingFormat": "buyItNow",
    "maxPrice": 300,
    "sortBy": "priceLowest",
    "skipSponsored": true,
    "maxItems": 200
}
```

#### Track auctions that end soon

```json
{
    "keywords": ["pokemon card psa 10"],
    "buyingFormat": "auction",
    "sortBy": "endingSoonest",
    "endingWithinHours": 6,
    "minBids": 1,
    "maxItems": 300
}
```

With **Sort = ending soonest**, the run stops reading pages once listings end after the window.

#### A seller's whole inventory, or a pasted search

```json
{
    "sellers": ["backinthebox"],
    "startUrls": [
        { "url": "https://www.ebay.com/sch/i.html?_nkw=lego+42115&LH_BIN=1&_sop=15" },
        { "url": "https://www.ebay.com/str/backinthebox" }
    ],
    "maxItemsPerSearch": 100
}
```

A store page is read for the seller account it belongs to, then that seller's listings are searched. A pasted search URL keeps its own filters.

### ⬆️ Output

One row per listing. A real row from a test run for "nintendo switch" (selected fields, values as delivered):

```json
{
    "itemId": "147654623841",
    "url": "https://www.ebay.com/itm/147654623841",
    "title": "Nintendo Switch 32GB Handheld System - Gray",
    "price": 115,
    "currency": "USD",
    "condition": "Pre-Owned",
    "listingType": "buyItNow",
    "shippingCost": 8.15,
    "totalPrice": 123.15,
    "itemLocation": "United States",
    "sellerUsername": "ab_577251",
    "sellerFeedbackScore": 1100,
    "sellerFeedbackPercentage": 99.9,
    "isSponsored": false,
    "rank": 6,
    "organicRank": 1,
    "categoryId": "139971",
    "searchQuery": "nintendo switch"
}
```

With **Item details** on, the same row also carries `listingStatus`, `listingStartedAt`, `listingEndsAt`, `currentBid`, `quantityAvailable` and `quantityAvailableText`, `outOfStock`, `purchaseLimit`, `hasVariations`, `itemSpecifics`, `brand`, `model`, `mpn`, `upc`, `gtin`, `color`, `category`, `categoryPath`, `breadcrumbs`, `images`, `conditionDescription`, `returnPolicy`, `returnsAccepted`, `shippingText`, `deliveryText`, `sellerItemsSold`, `sellerJoined`, `sellerResponseTime`, `storeName` and, with **Seller description text**, `description`; `detailsScraped` is `true`.

#### Fields

- **Listing:** `itemId`, `url`, `title`, `subtitle`, `condition`, `conditionId`, `itemAttributes`, `epid`, `categoryId`, `image`, `fullResImage`
- **Price:** `price`, `priceMax`, `priceText`, `currency`, `originalPrice`, `discount`, `totalPrice`, `couponText`, `volumeDiscountText`
- **Format:** `listingType` (`auction`, `auctionWithBIN`, `buyItNow`, `buyItNowOrBestOffer`), `buyItNowAvailable`, `bestOffer`, `bidCount`, `timeLeft`, `timeLeftSeconds`, `auctionEndText`
- **Shipping and returns:** `shipping`, `shippingCost` (0 = free), `shippingType`, `freeReturns`, `importFees`, `itemLocation`
- **Demand:** `quantitySold`, `watchers`, `urgency`, `isNewListing`, `signals`
- **Seller:** `sellerUsername`, `sellerFeedbackScore`, `sellerFeedbackPercentage`, `sellerType`, `topRatedSeller`, `programBadges`, `authenticityGuarantee`, `ebayRefurbished`
- **Search:** `isSponsored`, `rank`, `organicRank`, `page`, `searchQuery`, `searchTarget`, `searchType`, `marketplace`, `scrapedAt`
- **Monitor:** `changeType` (`new` or `priceChanged`), `previousPrice`

Fill on 36 rows with item details (local and platform test runs): status, start and end time, item specifics, brand, model, images, returns, shipping and delivery lines, seller score, items sold and join date 100%; watchers 97%; store name 89%; category path 72%; sold count and seller notes 64%; colour 58%; MPN 42%; UPC/GTIN 19% (only where the seller filled them).

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

Pay per event, no start fee:

| Event | Price | When |
|---|---|---|
| `listing` | **$0.00009** ($0.09 per 1,000 listings) | each delivered row |
| `item-details` | **$0.0013** | each row that got its item page (Item details on, or an item link) |

Examples: 1,000 listings = $0.09. 100 listings with item details = $0.009 + $0.13 = $0.139. An item link = $0.00139. Listings your filters remove are not charged, rows whose item page could not be read are delivered without details and without the add-on charge, and the run stops at your **maximum cost per run** without going over it.

### Run it on a schedule (monitor mode)

Turn on **Monitor mode**, set **Sort = newly listed**, and schedule the actor hourly or daily in Apify Schedules. Each run remembers what it delivered (per search, in the named store `monitorStoreName`) and delivers only listings no earlier run did; with **Also deliver price changes**, a known listing whose price moved comes back with `changeType: "priceChanged"` and `previousPrice`. A poll that finds nothing new is not charged for any row. Through the API:

```bash
curl -X POST "https://api.apify.com/v2/acts/TopApi~ebay-listings-scraper/runs?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["leica m6"],"sortBy":"newlyListed","monitorMode":true,"trackPriceChanges":true,"maxItems":200}'
```

Use a webhook on `ACTOR.RUN.SUCCEEDED` to push new rows to Slack, Google Sheets or your own endpoint, or call the actor from an AI agent through the Apify MCP server.

### How can I use eBay listings data?

- 🏷️ **Price monitoring:** track what a product sells for right now, by condition and format, with the free price summary
- 🔨 **Auction sniping lists:** auctions ending in the next hours with bids, time left and shipping
- 🛡️ **Brand protection:** listings of your products by seller, with location, condition and sponsored placement
- 📈 **Market research:** sold counts, watchers and how many listings are sponsored in a category
- 🧾 **Reseller sourcing:** below-market listings filtered by seller score and returns

### Integrations, API & MCP

Run it from the Apify Console, the [Apify API](https://docs.apify.com/api/v2), the JavaScript and Python clients, Make, Zapier, n8n or the Apify MCP server. Results export as JSON, CSV, Excel, XML or RSS.

### More marketplace scrapers from TopApi

- 🧾 [eBay Sold Listings Scraper](https://apify.com/TopApi/ebay-sold-listings-scraper) - what eBay listings actually sold for (this actor returns listings for sale now)
- 🛍️ [Facebook Marketplace Scraper](https://apify.com/TopApi/facebook-marketplace-scraper) - listings, prices and price drops
- 🌎 [MercadoLibre Scraper](https://apify.com/TopApi/mercadolibre-scraper) - products, prices, reviews and sellers
- 🏭 [1688.com Wholesale Scraper](https://apify.com/TopApi/alibaba-1688-scraper) - wholesale prices, MOQ and suppliers
- 👗 [SHEIN Product Scraper](https://apify.com/TopApi/shein-product-scraper) - prices, discounts and ratings

See every actor on the [TopApi profile](https://apify.com/TopApi).

### Limits & empty runs

- **Results per search:** eBay shows up to about 10,000 results per search; split big searches by price range, condition or category.
- **eBay's browser check:** eBay sometimes answers a page with its "Checking your browser" page. The actor never answers it and never retries it from another address of the same kind; that page type moves to the next route (datacenter, the platform's own address, residential, Apify's unblocker) for the rest of the run, within a per-run proxy budget. When the budget runs out the run ends **SUCCEEDED with a warning** saying how many pages it read; rows already delivered are kept. On test runs, searches of up to 2-3 pages finished on free routes; deeper runs often stopped after 3 pages (about 180 listings), and item details after the first few item pages.
- **Seller on the card:** eBay hides the seller on search cards in some categories (trading cards, LEGO auctions, non-US auctions); turn on Item details to read it from the item page.
- **Category pages** (`/b/...`) show about 30 listings per page and no seller.
- **Empty runs:** a search that matches nothing ends SUCCEEDED with a status that says which search and what to change; a run where eBay refused every request ends FAILED with nothing charged.
- **Sold listings** are not here; use [eBay Sold Listings Scraper](https://apify.com/TopApi/ebay-sold-listings-scraper).

### FAQ

#### How much does eBay Listings Scraper cost?

$0.09 per 1,000 listings and $0.0013 per listing with item details; no start fee.

#### How many listings can eBay Listings Scraper return?

Up to eBay's ~10,000 results per search. Set `maxItems` (0 = no limit) and `maxItemsPerSearch`. Long runs can stop earlier when eBay shows its browser check (see Limits).

#### Can it scrape auctions with bids and time left?

Yes. Rows carry `bidCount`, `timeLeft`, `timeLeftSeconds` and the card's end day and time; item details add the exact `listingEndsAt` and `currentBid`.

#### Does it tell me which listings are sponsored?

Yes, `isSponsored` on every search row, plus `organicRank` among non-sponsored listings. `skipSponsored` drops them before they are charged.

#### Can I scrape a seller's whole store?

Yes: add the username to `sellers`, or paste their store (`/str/...`) or `/usr/...` link.

#### Which eBay sites are supported?

ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca, ebay.com.au, ebay.at, ebay.ch, ebay.ie, ebay.nl and ebay.pl, each in its own currency.

#### Can eBay Listings Scraper run on a schedule?

Yes. Monitor mode delivers only new listings (and, if asked, price changes) on each scheduled run.

#### Do I need an eBay account, cookies or an API key?

No. It reads eBay's public search, category and item pages.

#### Can AI agents use it through MCP?

Yes, through the Apify MCP server; `compact: true` returns 25 core fields per row.

#### Why did I get fewer listings than I asked for?

Your filters removed some (the SUMMARY record counts each filter), the search had fewer results, or eBay's browser check ended the run early (the status message says so).

#### Your feedback

Found a problem or need a field? Open an issue on the actor's Issues tab and we will look at it.

# Actor input Schema

## `keywords` (type: `array`):

What to search on eBay, one search per keyword, e.g. "iphone 13", "rtx 4080", "lego 42115". Each row says which keyword found it.

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

eBay search URLs (/sch/i.html?\_nkw=..., keyword and filters read from the URL), category pages (/b/... or /sch/9355/i.html), store pages (/str/...), seller pages (/usr/...) or item links (/itm/...).

## `sellers` (type: `array`):

eBay usernames, e.g. "backinthebox". See "Seller mode" for how they are used. Empty = any seller.

## `sellersMode` (type: `string`):

Inventory = each seller's own listings (with keywords: only those words). Only = one keyword search limited to these sellers. Exclude = keyword search without them.

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

Item URLs or item numbers, e.g. "https://www.ebay.com/itm/145829369846" or "145829369846". Each gives one full row from the item page (listing + item details).

## `ebaySite` (type: `string`):

Which eBay marketplace to search. Prices come in that site's currency.

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

eBay category id, e.g. "9355" (Cell Phones & Smartphones). With no keyword it lists the whole category. Empty = all categories.

## `itemCondition` (type: `string`):

Only listings in this condition.

## `conditionId` (type: `string`):

Exact eBay condition ids instead, "|"-separated, e.g. "1000|1500" (1000 new, 1500 open box, 2000-2500 refurbished, 3000 used, 7000 for parts).

## `buyingFormat` (type: `string`):

Only listings in this format.

## `minPrice` (type: `number`):

Lowest item price, in the site's currency (eBay's price filter).

## `maxPrice` (type: `number`):

Highest item price, in the site's currency (eBay's price filter).

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

eBay's sort order. Newly listed suits monitor mode; ending soonest suits auction tracking.

## `freeShipping` (type: `boolean`):

Only listings with free shipping.

## `returnsAccepted` (type: `boolean`):

Only listings whose seller accepts returns.

## `itemLocation` (type: `string`):

Where the listed items are, as on eBay's search.

## `locatedIn` (type: `string`):

Only items located in this country, e.g. GB on ebay.com. Overrides Item location.

## `availableTo` (type: `string`):

Only items the seller ships to this country.

## `keywordMatch` (type: `string`):

How eBay matches the keyword words.

## `excludeKeywords` (type: `array`):

Listings whose title has any of these words are left out (eBay's own exclude filter, then checked again), e.g. "case", "broken".

## `searchInDescription` (type: `boolean`):

Match the keyword in the listing description too, not only the title.

## `aspectFilter` (type: `object`):

eBay item-specific filters, e.g. {"Brand": "Apple", "Storage Capacity": "128 GB"} or for cars {"Model Year": "2018|2019"}. Use the site's language (ebay.de: "Marke").

## `titleMustMatchQuery` (type: `boolean`):

Keep only listings whose title has every word of the keyword (4+ word keywords allow one miss). Drops accessories eBay adds to a search.

## `titleMustInclude` (type: `array`):

Keep only listings whose title has every one of these words, ignoring case and punctuation (18V-55 = 18v 55), e.g. "256GB".

## `excludeSellers` (type: `array`):

eBay usernames whose listings are skipped.

## `skipSponsored` (type: `boolean`):

Leave out listings eBay marks as Sponsored (each row carries isSponsored either way).

## `minSellerFeedbackScore` (type: `integer`):

Skip sellers below this feedback count, e.g. 100. Cards that show no seller are kept (item details read it).

## `minSellerPositivePercent` (type: `number`):

Skip sellers below this positive-feedback percentage, e.g. 98.5.

## `minBids` (type: `integer`):

Only auctions with at least this many bids.

## `endingWithinHours` (type: `integer`):

Only auctions that end within N hours. Pair it with Sort = ending soonest: the run stops paging past the window.

## `includePartialMatches` (type: `boolean`):

eBay pads small searches with "Results matching fewer words". Off (default) leaves them out.

## `dedupeItemIds` (type: `boolean`):

A listing found by two keywords or pages is delivered once.

## `includeItemDetails` (type: `boolean`):

Also read each listing's page: item specifics, all images, quantity available, watchers, returns, seller details, start and end time. +$0.0013 per listing that gets them.

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

With item details: add the seller's own description as plain text (one more request per item, no extra charge).

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

Deliver only listings no earlier run delivered for the same search. Pairs with a schedule (hourly or daily).

## `trackPriceChanges` (type: `boolean`):

In monitor mode, a known listing whose price changed is delivered again with changeType "priceChanged" and previousPrice.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers delivered listings. Use one name per schedule.

## `resetMonitorState` (type: `boolean`):

Forget what earlier runs delivered for these searches and start over.

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

Most rows this run delivers, across all searches. eBay shows up to about 10,000 results per search. 0 = no limit.

## `maxItemsPerSearch` (type: `integer`):

Most rows per keyword, URL, seller or category. 0 = no per-search limit.

## `maxPages` (type: `integer`):

Most search pages read per search. 0 = until Max listings or the last page.

## `itemsPerPage` (type: `string`):

eBay page size. Auto = 60, which eBay answers most reliably past page 1 (it refuses deep 240-per-page paging far more often).

## `includeSummary` (type: `boolean`):

Write count, min, median, percentiles and max of prices per search, plus auction / free-shipping / sponsored shares, to the SUMMARY record. Free.

## `compact` (type: `boolean`):

Core fields only (25), sized for AI agents and MCP.

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

Default: Apify datacenter sessions first, residential in the site's country next. Choose groups here to use your own instead.

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

Item pages read at the same time when item details are on (each on its own paced session).

## Actor input object example

```json
{
  "keywords": [
    "iphone 13"
  ],
  "sellersMode": "inventory",
  "ebaySite": "ebay.com",
  "itemCondition": "any",
  "buyingFormat": "all",
  "sortBy": "bestMatch",
  "freeShipping": false,
  "returnsAccepted": false,
  "itemLocation": "default",
  "keywordMatch": "all",
  "searchInDescription": false,
  "titleMustMatchQuery": false,
  "skipSponsored": false,
  "includePartialMatches": false,
  "dedupeItemIds": true,
  "includeItemDetails": false,
  "includeDescription": false,
  "monitorMode": false,
  "trackPriceChanges": false,
  "monitorStoreName": "ebay-listings-monitor",
  "resetMonitorState": false,
  "maxItems": 50,
  "itemsPerPage": "auto",
  "includeSummary": true,
  "compact": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

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

One item per active eBay listing: price, currency, format, bids, time left, shipping, condition, seller, sponsored flag, and item details when requested.

## `summary` (type: `string`):

Per search and currency: count, min, 10th/25th percentile, median, 75th/90th percentile, max and mean of listing prices, auction / free-shipping / sponsored shares; plus pages read, rows skipped by each filter and route changes.

# 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 = {
    "keywords": [
        "iphone 13"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/ebay-listings-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 = {
    "keywords": ["iphone 13"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/ebay-listings-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 '{
  "keywords": [
    "iphone 13"
  ],
  "maxItems": 50
}' |
apify call topapi/ebay-listings-scraper --silent --output-dataset

```

## MCP server setup

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