# eBay Scraper & API - Search Listings, Prices & Sellers (`rel8ble/ebay-search-scraper`) Actor

eBay scraper and eBay search API: active listings from 18 eBay sites (US, UK, DE, AU ...) by keyword or eBay URL, with price, condition, auction / Buy It Now and shipping filters. One result = one listing: price, shipping, bids, sold count, seller, URL. $0.60 per 1,000, no start fee.

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

## Pricing

$0.60 / 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

## eBay Scraper & API - Search Listings, Prices & Sellers

**eBay Scraper & API** is an eBay search scraper and unofficial eBay search API for **price research, product monitoring and resale**. Give it search phrases or eBay search URLs and get clean JSON, CSV or Excel: one row per listing with **item id, title, price and currency, original price and discount, shipping cost, condition, Buy It Now / auction, bids and time left, item location, sold count, watchers, seller name and feedback, sponsored flag, category, image and item URL**. It works on **18 eBay country sites** (ebay.com, ebay.co.uk, ebay.de, ebay.com.au, ebay.ca, ebay.fr, ebay.it, ebay.es, ebay.nl, ebay.be, ebay.at, ebay.ch, ebay.ie, ebay.pl, ebay.com.sg, ebay.com.my, ebay.ph, ebay.com.hk) and supports eBay's own filters: **price range, condition, buying format, free shipping, item location, category and sort order**.

It reads eBay's server-rendered search pages over plain HTTP (240 listings per request, no browser, no eBay developer account, no login). Use it for **competitor and market pricing**, tracking **new listings** of a model you want to buy or flip, building **price-drop alerts**, checking **seller feedback** at scale, feeding product data into a spreadsheet or a dashboard, or as a data source for an AI agent.

**Sold / completed listings:** eBay now shows its *Sold Items* filter only to signed-in visitors in most regions and sends everyone else to a sign-in page. The actor accepts `listingType: "sold"` and retries with a warmed-up session, but in testing (home IP and Apify residential proxy, October 2026) eBay asked for a login every time. Treat sold / completed as experimental: if eBay keeps asking for a login the search is reported as failed and **not charged**. Active listings are what this actor is built and tested for.

### Sample output

5 real rows from the demo search (`wireless earbuds`, ebay.com, 2026-10-20). Every row also carries `itemId`, `itemUrl`, `imageUrl`, `originalPrice`, `discountPercent`, `bidCount`, `timeLeft`, `watchers`, `itemLocation` and more (full JSON under "Output example").

| Title | Price | Condition | Format | Shipping | Sold | Seller (feedback) |
|---|---|---|---|---|---|---|
| NEW Skullcandy Riff Wireless Bluetooth On-Ear He... | USD 39.95 | Brand New | Buy It Now | +$55.39 delivery | 340 | alphadailydeals (99.8%) |
| Cleer ARC 4 Open-Ear Sport Headphones with Dolby... | USD 79.99 | Brand New | Buy It Now | +$33.63 delivery | - | cleer-audio (99.1%) |
| Original Samsung Galaxy Buds2 SM-R177 -Right, Le... | USD 29.99 | Pre-Owned | Buy It Now | +$30.96 delivery | - | electrified_deals (99.5%) |
| Bluetooth Earbuds Airbuds Air Pods Headphones Wi... | USD 10.99 | Brand New | Buy It Now | - | 22 | smart_choice2 (99%) |
| TWS Bluetooth 5.0 Headset Wireless Headphones In... | USD 5.66 | Brand New | Buy It Now | Free International Shipping | 67 | liquid05 (98.9%) |

### Use cases

- **Price research and repricing**: what a model sells for right now, new vs used, per country site.
- **Deal and new-listing alerts**: schedule a "newly listed" search every hour, dedupe on `itemId`, alert below a price.
- **Resale and flipping**: auctions ending soonest with low bid counts, items listed below a price band.
- **Seller and competitor checks**: who sells a product, their feedback score and how many units they have sold.
- **Feeds for spreadsheets, dashboards and AI agents**: clean JSON / CSV through the API, Make, Zapier, n8n or MCP.

### Why this one

- **$0.60 per 1,000 listings, no start fee**: the most-used eBay scrapers charge $3.00-$5.00 per 1,000 (memo23 $3.00-$5.00 + $0.02 start, automation-lab $3.45 + $0.001 start, delicious_zebu $3.00) and the cheapest search scraper with real users charges $0.70.
- **18 eBay country sites** and eBay's own filters (price band, condition, Buy It Now / auction / best offer, free shipping, location, category, sort).
- **240 listings per request** over plain HTTP: a full page in a few seconds, about 1-2 pages a second.
- **No login, no cookies, no eBay developer key.** Failed requests, skipped sponsored rows and duplicates are never charged.

### How to use

1. Type one or more **Search phrases** (`wireless earbuds`, `iphone 13 128gb unlocked`, `lego 75192`), or paste eBay **search URLs** copied from your browser.
2. Pick the **eBay site** (default ebay.com) and, if you want, filters: **Minimum / Maximum price**, **Condition** (new, open box, refurbished, used, for parts), **Buying format** (Buy It Now, auction, best offer), **Free shipping only**, **Item location**, **Category id** and **Sort order** (best match, newly listed, ending soonest, price low to high, price high to low).
3. Set **Max listings per search** (default 240 = one page) and **Max listings in total** (default 1,000). 0 = no cap.
4. Leave **Proxy configuration** on Apify Proxy, group RESIDENTIAL (the default) and click **Start**. Download results from the **Output** tab as JSON, CSV, Excel or HTML, or pull them through the API, Make, Zapier, n8n or an MCP client.

### What you get

One dataset item per listing:

- **Listing**: `itemId`, `title`, `subtitle` (product attributes such as "Apple iPhone 13 · Unlocked · 128 GB"), `condition`, `itemUrl`, `imageUrl`, `thumbnailUrl`, `categoryId`, `variantId`.
- **Price**: `price`, `priceText` (exactly as eBay printed it), `currency`, `priceTo` (ranges), `originalPrice`, `discountPercent`, `discountText`, `unitPriceText`.
- **Format**: `buyingFormat` ("Buy It Now" or "Auction"), `acceptsBestOffer`, `bidCount`, `timeLeft`.
- **Shipping and location**: `shippingText`, `shippingCost` (0 = free), `freeShipping`, `itemLocation`.
- **Demand and seller**: `soldCount`, `watchers`, `sellerName`, `sellerType` (private / business on European sites), `sellerFeedbackPercent`, `sellerFeedbackCount`, `isSponsored`, `extraInfo` ("Free returns", "Last one", "Import fees paid at checkout" ...).
- **Sold searches**: `soldDate`, `soldDateText` (when eBay serves them).
- **Where it came from**: `site`, `listingType`, `sourceSearch`, `searchUrl`, `page`, `rank`, `scrapedAt`.

The run also writes a **RUN_SUMMARY** record (Output tab > Storage) with, per search, how many results eBay lists, how many were saved, pages read and the stop reason, plus blocked / challenge / sign-in counts, the proxy exit country used and the currencies seen.

### Input example

| Field | Default | Description |
|---|---|---|
| `queries` | - | Search phrases, one search each |
| `startUrls` | - | eBay search URLs (any country site); their own filters are used |
| `site` | `ebay.com` | eBay country site for the phrases |
| `listingType` | `active` | `active`, `sold`, `completed` (sold / completed: see the note above) |
| `categoryId` | - | Numeric eBay category id, e.g. `9355` cell phones |
| `priceMin` / `priceMax` | - | Price band in the site currency |
| `conditions` | any | `new`, `open-box`, `refurbished`, `used`, `for-parts` |
| `buyingFormat` | `all` | `buy-it-now`, `auction`, `best-offer` |
| `freeShippingOnly` | false | Free shipping to the site country only |
| `itemLocation` | `any` | `domestic`, `worldwide` |
| `sort` | `best-match` | `newly-listed`, `ending-soonest`, `price-asc`, `price-desc`, `ended-recently` |
| `searchInDescription` | false | Match descriptions too |
| `includeSponsored` | true | Keep promoted listings (flagged `isSponsored`) |
| `maxItemsPerSearch` | 240 | Per search; 0 = all eBay serves (about 10,000) |
| `maxItems` | 1000 | Whole run; 0 = no total cap |
| `proxyConfiguration` | Apify RESIDENTIAL | Keep it: eBay blocks datacenter IPs |

#### Example inputs for common jobs

Used iPhone 13 models on eBay UK between 100 and 400 pounds, Buy It Now with free delivery, cheapest first:

```json
{
    "queries": ["iphone 13"],
    "site": "ebay.co.uk",
    "conditions": ["used"],
    "buyingFormat": "buy-it-now",
    "priceMin": "100",
    "priceMax": "400",
    "freeShippingOnly": true,
    "sort": "price-asc",
    "maxItemsPerSearch": 500
}
```

Every LEGO auction ending soonest on eBay Germany, straight from a URL:

```json
{
    "startUrls": ["https://www.ebay.de/sch/i.html?_nkw=lego&LH_Auction=1&_sop=1"],
    "maxItemsPerSearch": 240
}
```

Monitor new listings of three products every hour (schedule the actor, dedupe on `itemId`; about $0.11 a run at most):

```json
{
    "queries": ["sony wh-1000xm5", "airpods pro 2", "bose quietcomfort ultra"],
    "sort": "newly-listed",
    "conditions": ["new", "open-box"],
    "maxItemsPerSearch": 60
}
```

### Output example

From a real run on 2026-10-20 (`wireless earbuds`, ebay.com):

```json
{
    "itemId": "126409498277",
    "title": "NEW Skullcandy Riff Wireless Bluetooth On-Ear Headphones with Mic Black",
    "subtitle": null,
    "condition": "Brand New",
    "price": 39.95,
    "priceText": "$39.95",
    "currency": "USD",
    "priceTo": null,
    "originalPrice": null,
    "discountPercent": null,
    "discountText": null,
    "unitPriceText": null,
    "buyingFormat": "Buy It Now",
    "acceptsBestOffer": false,
    "bidCount": null,
    "timeLeft": null,
    "soldDate": null,
    "soldDateText": null,
    "shippingText": "+$55.39 delivery",
    "shippingCost": 55.39,
    "freeShipping": false,
    "itemLocation": "United States",
    "soldCount": 340,
    "watchers": null,
    "sellerName": "alphadailydeals",
    "sellerType": null,
    "sellerFeedbackPercent": 99.8,
    "sellerFeedbackCount": 59300,
    "isSponsored": true,
    "categoryId": "112529",
    "variantId": null,
    "extraInfo": [],
    "imageUrl": "https://i.ebayimg.com/images/g/5p4AAOSwzAZjYuC9/s-l500.jpg",
    "thumbnailUrl": "https://i.ebayimg.com/images/g/5p4AAOSwzAZjYuC9/s-l500.jpg",
    "itemUrl": "https://www.ebay.com/itm/126409498277",
    "site": "ebay.com",
    "listingType": "active",
    "sourceSearch": "\"wireless earbuds\", on ebay.com",
    "searchUrl": "https://www.ebay.com/sch/i.html?_nkw=wireless+earbuds&_ipg=240",
    "page": 1,
    "rank": 1,
    "scrapedAt": "2026-10-20T18:03:03.172Z"
}
```

A marked-down listing from the same run came back with `"price": 79.99, "originalPrice": 99.99, "discountPercent": 20`. An auction row on ebay.de looks like `"price": 15, "priceText": "EUR 15,00", "currency": "EUR", "buyingFormat": "Auction", "bidCount": 1, "timeLeft": "33 Min", "shippingText": "+EUR 4,19 Lieferung", "shippingCost": 4.19, "condition": "Gebraucht", "sellerType": "private"`.

### Pricing

| Listings | Price |
|---|---|
| 20 (the demo search) | $0.012 |
| 240 (one eBay page) | $0.14 |
| 1,000 | $0.60 |
| 10,000 | $6.00 |

**$0.60 per 1,000 listings** (event `result`, $0.0006 per row), no start fee, no per-request fee. Every row saved is charged once; failed requests, skipped sponsored listings and duplicates within a search are free. Apify's platform usage (compute and residential proxy bandwidth, about 0.5 MB per 240 listings) is billed by Apify on top, as with every actor.

Apify gives every account **$5 of free usage credit each month**, enough for about 8,000 listings a month at no cost (residential proxy usage on a full page is about $0.004). Set **Max listings in total** as a hard cap on spend: 1,000 listings = $0.60, 10,000 = $6.00.

### Integrations

- **API**: `POST https://api.apify.com/v2/acts/rel8ble~ebay-search-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>` with the input JSON as the body returns the listings directly; or start a run and read `/v2/datasets/<datasetId>/items?format=csv`.
- **Python**: `pip install apify-client`, then `ApifyClient(token).actor("rel8ble/ebay-search-scraper").call(run_input={...})` and `client.dataset(run["defaultDatasetId"]).iterate_items()`.
- **Node.js**: `npm install apify-client`, `new ApifyClient({ token }).actor("rel8ble/ebay-search-scraper").call({...})`.
- **No-code**: Make, Zapier, n8n and Google Sheets through the Apify integrations; schedule runs from the Apify console and get a webhook when they finish.
- **AI agents / MCP**: usable through the Apify MCP server; every input field description says what goes in and what comes out.

### Limits (read before large runs)

- **Residential proxy is required.** eBay answers datacenter IPs, including Apify's shared datacenter proxies, with an HTTP 403 error page, and starts challenging a plain home IP after a few dozen requests. The default proxy setting handles this; do not switch it off.
- **Prices follow the visitor's country.** eBay converts prices and shipping into the local currency of the IP it sees. The actor first uses residential exits in the eBay site's own country; when eBay rejects that pool it switches to exits anywhere, and rows may then carry another currency. Always read `price` together with `currency` / `priceText`; the run summary lists `currenciesSeen` and the exit country used.
- **About 10,000 results per search** is eBay's own ceiling (42 pages of 240). For more, split the search into price bands, categories or conditions.
- **Sponsored listings** are mixed into results by eBay; they are flagged (`isSponsored`) and can be skipped with `includeSponsored: false`.
- **Seller name and feedback** show mainly on ebay.com and ebay.co.uk fixed-price results; auction cards and most European sites do not print them.
- **Sold / completed listings** are gated behind eBay's sign-in in most regions (see above). No login, cookies or accounts are ever used by this actor.
- **Speed**: about 1-2 pages a second with the default concurrency; a residential request takes 2-8 seconds. One page = up to 240 listings. 512 MB memory is the minimum: eBay pages are about 4 MB of HTML each.
- Search-page data only: no descriptions, item specifics, seller contact data or buyer data. Personal data is limited to the public seller username and feedback score shown in search results.

### FAQ

**How much does it cost?** $0.60 per 1,000 listings, no start fee. A 240-listing page is $0.14; the demo search is about a cent.

**Does it scrape sold listings?** Only where eBay serves them without a login, which in October 2026 testing was nowhere. Active listings are what this actor is built for; a sold search that hits eBay's sign-in page is not charged.

**Which eBay sites work?** ebay.com, ebay.co.uk, ebay.de, ebay.com.au, ebay.ca, ebay.fr, ebay.it, ebay.es, ebay.nl, ebay.be, ebay.at, ebay.ch, ebay.ie, ebay.pl, ebay.com.sg, ebay.com.my, ebay.ph and ebay.com.hk. Pick one in `site`, or paste URLs from any of them into `startUrls`.

**Can I use my own eBay URL with all its filters?** Yes. Paste it into `startUrls`; everything in the URL (keywords, category, `_udlo`/`_udhi` price, `LH_ItemCondition`, `LH_BIN`, `LH_Auction`, `LH_FS`, `_sop` sort and so on) is used as it is. The actor only sets the page size and page number.

**Why do I get fewer rows than eBay's "results" number?** eBay's count is an estimate ("200,000+"), it includes listings it never serves past page 42, and the actor drops eBay's placeholder cards and stops at the "results matching fewer words" tail unless `includeFewerWordMatches` is on. Duplicates within a search are also removed.

**Does it get item descriptions or item specifics?** No; search pages only. The `itemUrl` and `itemId` let you pair it with an item-page scraper if you need those.

**Why did a search fail with "sign-in wall" or "challenge page"?** eBay decided not to serve that request without a login (sold / completed searches) or challenged the IP. Sign-in walls on sold searches are an eBay policy, not a bug; challenges are retried on fresh residential sessions automatically. Failed searches are never charged.

**Is this legal?** The actor reads public search result pages, like a visitor without an account, at a polite rate, and stores no personal data beyond the public seller username and feedback score. You are responsible for how you use the data and for complying with eBay's terms and the laws that apply to you.

**Something broke or a field is empty?** eBay changes its markup from time to time. Open an issue on the actor's Issues tab with your input and I will fix it.

# Actor input Schema

## `queries` (type: `array`):

What to search for, one search per line, exactly as you would type it into the eBay search box: "wireless earbuds", "iphone 13 128gb unlocked", "lego 75192", "vintage seiko watch". Each line is a separate search; results are merged, duplicates within a search are removed. Typical: 1-50 lines. Leave empty when you give startUrls instead.

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

Optional. eBay search results URLs copied from the browser, one per line, e.g. "https://www.ebay.com/sch/i.html?\_nkw=pixel+8\&LH_Sold=1\&LH_Complete=1&\_udlo=200". Any eBay country site works. The filters inside the URL are used as they are (the filter fields below are NOT applied to URLs); only page size and page number are added. Category URLs like ".../sch/Cell-Phones-Smartphones/9355/i.html?\_nkw=..." work too.

## `site` (type: `string`):

Which eBay country site to search. Default "ebay.com" (United States, prices in USD). "ebay.co.uk" = UK in GBP, "ebay.de" = Germany in EUR, "ebay.com.au" = Australia in AUD, "ebay.ca" = Canada in CAD, and so on. Titles, conditions and shipping texts come in the site's language. Applies to every line in queries, not to startUrls (those carry their own site).

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

Default "active": listings for sale right now - this is what the actor is built and tested for. "sold" = eBay's Sold Items filter (LH_Sold=1\&LH_Complete=1, what buyers actually paid, with the sold date); "completed" = every ended listing (LH_Complete=1). WARNING: since 2025 eBay shows sold / completed results only to signed-in visitors in most regions and answers everyone else with a sign-in page; the actor retries with a warmed-up residential session, but if eBay keeps asking for a login the search is reported as failed (no charge). Use "sold" only if you have confirmed it works for your site; otherwise stay on "active".

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

Optional. Numeric eBay category id to search inside, e.g. "9355" (cell phones and smartphones), "15032" (cell phone accessories), "11450" (clothing, shoes and accessories), "267" (books), "293" (consumer electronics), "220" (toys and hobbies). Find it in the eBay URL after "/sch/<name>/" or as \_sacat. Empty = all categories. With queries empty, the whole category is scraped (best match order).

## `priceMin` (type: `string`):

Optional. Lowest item price, in the site's currency (USD on ebay.com, GBP on ebay.co.uk, EUR on ebay.de ...), e.g. "25" or "19.99". Shipping is not included in the filter.

## `priceMax` (type: `string`):

Optional. Highest item price, in the site's currency, e.g. "200". Combine with priceMin for a band. Splitting a big search into several price bands is also the way past eBay's ~10,000-results-per-search limit.

## `conditions` (type: `array`):

Optional. Keep only these item conditions (any of them): "new", "open-box", "refurbished" (certified and seller refurbished), "used" (pre-owned), "for-parts" (for parts or not working). Empty = any condition. Sent to eBay as LH_ItemCondition, so the filtering is done by eBay itself.

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

Optional. "all" (default), "buy-it-now" (fixed price only, LH_BIN=1), "auction" (auctions only, with bid counts and time left, LH_Auction=1), or "best-offer" (listings that accept offers, LH_BO=1).

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

Optional. true = only listings with free shipping to the site's country (LH_FS=1). Default false.

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

Optional. "any" (default: what eBay shows by default for the site), "domestic" (items located in the site's own country only, LH_PrefLoc=1), "worldwide" (LH_PrefLoc=2).

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

Optional. Order eBay returns results in, which matters when you cap maxItemsPerSearch: "best-match" (default), "newly-listed" (newest first - good for monitoring new listings), "ending-soonest" (auctions), "price-asc" / "price-desc" (price + shipping, lowest / highest first), "ended-recently" (sold and completed searches: most recently ended first).

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

Optional. true = match the search phrase in item descriptions as well as titles (LH_TitleDesc=1). Finds more, less precise. Default false (titles only).

## `includeSponsored` (type: `boolean`):

Optional. eBay mixes promoted ("Sponsored") listings into results. Default true keeps them, marked with isSponsored: true. false = skip them (they are not charged when skipped).

## `includeFewerWordMatches` (type: `boolean`):

Optional. When a search has few exact matches, eBay appends looser results that match only some of the words. Default false stops at the exact matches. true = keep those looser results too.

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

Optional. Maximum listings saved per search phrase or URL, integer >= 0. Default 240 (= one eBay page, one request). 0 = every result eBay will serve (up to about 10,000 per search, 240 per request). Together with maxItems this sets the cost: you pay per listing saved ($0.0015 each), so 1,000 listings = $0.60.

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

Optional. Maximum listings saved by the whole run across all searches, integer >= 0. Default 1,000; 0 = no total cap (each search still stops at maxItemsPerSearch). A hard stop on spend: 1,000 listings = $0.60.

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

Optional, advanced. Number of parallel requests, integer 1-10. Default 3. Requests are also spaced at least 0.4 s apart whatever this is set to. Lower it if the run log shows challenge pages. Leave unset.

## `maxRequestRetries` (type: `integer`):

Optional, advanced. How many times a blocked or failed page is retried on a new session, integer 0-20. Default 6. Leave unset.

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

Apify Proxy settings object. Default {"useApifyProxy": true, "apifyProxyGroups": \["RESIDENTIAL"]} and leave it there: eBay answers datacenter IPs (including Apify's shared datacenter proxies) with an HTTP 403 error page; only residential IPs are served. The run first uses exits in the eBay site's own country (so prices come in the site currency) and switches to residential exits anywhere if eBay rejects that pool - eBay then shows prices in the visitor's local currency, which the currency and priceText fields record. Residential bandwidth is billed by Apify on top of the per-result price: a 240-listing page is about 0.5 MB, so 1,000 listings cost roughly 2 MB (a few cents).

## Actor input object example

```json
{
  "queries": [
    "wireless earbuds"
  ],
  "site": "ebay.com",
  "listingType": "active",
  "buyingFormat": "all",
  "freeShippingOnly": false,
  "itemLocation": "any",
  "sort": "best-match",
  "searchInDescription": false,
  "includeSponsored": true,
  "includeFewerWordMatches": false,
  "maxItemsPerSearch": 20,
  "maxItems": 20,
  "maxConcurrency": 3,
  "maxRequestRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

All listings found: item id, title, condition, price and currency, original price and discount, shipping cost, buying format, best-offer flag, bids and time left, sold date (sold searches), item location, sold count, watchers, seller name and feedback, sponsored flag, category id, image and item URL, plus the search each row came from.

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

Per-search counts, the total eBay shows for each search, pages read, stop reasons, blocked / challenge / sign-in answers and anything that failed, with a hint on how to fix it.

# 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 = {
    "queries": [
        "wireless earbuds"
    ],
    "maxItemsPerSearch": 20,
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/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 = {
    "queries": ["wireless earbuds"],
    "maxItemsPerSearch": 20,
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/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 '{
  "queries": [
    "wireless earbuds"
  ],
  "maxItemsPerSearch": 20,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call rel8ble/ebay-search-scraper --silent --output-dataset

```

## MCP server setup

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