eBay Search Scraper & API - Listings, Prices, Sold Items avatar

eBay Search Scraper & API - Listings, Prices, Sold Items

Pricing

$1.50 / 1,000 results

Go to Apify Store
eBay Search Scraper & API - Listings, Prices, Sold Items

eBay Search Scraper & API - Listings, Prices, Sold Items

Use this to get eBay listings and prices from 18 eBay sites (US, UK, DE, AU ...). Input: search phrases or eBay URLs, active or sold listings, price, condition, auction / Buy It Now filters. One result = one listing: title, price, shipping, condition, bids, seller, URL. $1.50 per 1,000.

Pricing

$1.50 / 1,000 results

Rating

0.0

(0)

Developer

Giovanni Rich

Giovanni Rich

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

eBay Search Scraper & API - eBay listings, prices and search results as JSON

eBay Search Scraper is an eBay 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.

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

FieldDefaultDescription
queries-Search phrases, one search each
startUrls-eBay search URLs (any country site); their own filters are used
siteebay.comeBay country site for the phrases
listingTypeactiveactive, 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
conditionsanynew, open-box, refurbished, used, for-parts
buyingFormatallbuy-it-now, auction, best-offer
freeShippingOnlyfalseFree shipping to the site country only
itemLocationanydomestic, worldwide
sortbest-matchnewly-listed, ending-soonest, price-asc, price-desc, ended-recently
searchInDescriptionfalseMatch descriptions too
includeSponsoredtrueKeep promoted listings (flagged isSponsored)
maxItemsPerSearch240Per search; 0 = all eBay serves (about 10,000)
maxItems1000Whole run; 0 = no total cap
proxyConfigurationApify RESIDENTIALKeep it: eBay blocks datacenter IPs

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

{
"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:

{
"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):

{
"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):

{
"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

$1.50 per 1,000 listings (event result, $0.0015 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 3,000 listings a month at no cost. Set Max listings in total as a hard cap on spend: 1,000 listings = $1.50, 10,000 = $15.

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

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.