eBay Listings & Prices
Pricing
from $1.40 / 1,000 listing scrapeds
eBay Listings & Prices
Search eBay and get one flat row per listing: price, currency, shipping, sold date for completed listings, condition, seller feedback, bids, Buy It Now and image.
Pricing
from $1.40 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
One search in, one flat table out. Give it keywords - or paste an eBay search URL straight from your browser - and it returns the listings eBay would show you, each with its price and currency, shipping, condition, seller and feedback, bid count, Buy It Now flag, image, and, for completed searches, the date it sold on.
Built to be called by an agent or a script: small input, one row per listing, no nested objects, no HTML.
What it is for
soldOnly: false returns the live listings on sale right now. This is the path
that works today, and it is verified on every run of the test suite.
soldOnly: true asks for eBay's completed-listing view - the closest thing to a
public record of what things actually sell for, as opposed to what sellers ask.
Read the next section before relying on it.
The sold view is currently behind eBay's sign-in wall
Measured 2026-08-25, from a Japanese consumer address, from Apify residential exit addresses in the US, and from a datacenter address, with a warmed session and a real browser TLS fingerprint in every case:
| request | answer |
|---|---|
| active search, any address | HTTP 200, full results |
LH_Sold=1&LH_Complete=1, cold session | HTTP 200, "Security Measure" / "Pardon Our Interruption" |
LH_Sold=1&LH_Complete=1, warmed session | HTTP 200, "Sign in or Register" |
The same wall appears for LH_Sold=1 alone, for LH_Complete=1 alone, on
m.ebay.com, and on ebay.de. It is uniform across addresses and it is not a
bot check: eBay has put completed listings behind a login.
So soldOnly: true will report a refusal rather than results, and it says which
one in the run log. It does not silently return zero listings and charge you for
the run's start as if the market were empty - and no row is ever charged for. If
eBay reopens the view, this actor reads it with no change: the parser handles the
sold caption, and the contract test fails loudly on the day the wall comes down.
Input
| field | meaning |
|---|---|
keywords | What you would type into eBay's search box |
searchUrl | A full eBay search URL instead. Filters already on it - seller, price band, sort - are kept; only paging is driven by the actor. Overrides keywords, site, condition and category |
soldOnly | true for sold and completed listings, false (default) for live ones |
site | ebay.com, ebay.co.uk or ebay.de |
condition | new, opened_never_used, refurbished, used, for_parts, or an eBay numeric condition code |
category | eBay numeric category id, the _sacat value from a search URL |
maxResults | Stop after this many listings. eBay serves 240 per page, so anything up to 240 is a single request |
proxyConfiguration | Residential is required. See below |
Output
One item per listing:
| field | meaning |
|---|---|
item_id | eBay's listing id |
title | Listing title, with eBay's "New Listing" badge and screen-reader tail removed |
url | Canonical ebay.com/itm/<id> link, query string stripped |
price | The listing price in currency. For an auction, the current bid; for a completed listing, what it ended at |
currency | ISO 4217 |
price_text | What eBay printed, verbatim - useful when a listing is a price range |
shipping_cost | Shipping in the same currency. 0.0 only when eBay said the shipping is free |
free_shipping | Whether eBay said so in as many words |
shipping_text | The shipping caption, verbatim |
sold_date | ISO date the listing sold, completed searches only |
sold_date_text | The caption eBay printed for it, verbatim |
condition | New, Pre-Owned, Parts Only, and so on, as eBay labels it |
seller_name | eBay user id of the seller |
seller_feedback_percent | Positive feedback, 0-100 |
seller_feedback_count | Feedback score. eBay abbreviates large ones on the search page ("40.5K"), so this is expanded and approximate above 1,000 |
bids | Bid count. Auctions only |
buy_it_now | Whether the listing can be bought outright |
image_url | Gallery image |
query, site, sold_only | The search this row came from, echoed onto every row |
null is not zero
Almost every field above is nullable, and that is deliberate. eBay's search page
is one template rendering several kinds of listing: an auction has bids and no
Buy It Now, a fixed-price listing has the reverse, a completed listing carries a
sold date and a live one never does, and a seller who ships free prints no
shipping figure. A 0 in any of those places would read as a measurement -
"free shipping", "no bids" - when the truth is that eBay did not say. So:
bidsisnullon a fixed-price listing, never0.shipping_costisnullwhen eBay printed no shipping line, and0.0only when it printed "Free shipping".sold_dateisnullon every row of an active search, andnullon a completed one whose caption could not be read as a date - in which casesold_date_textstill holds the words eBay printed.
Currency follows the exit address, not the seller
eBay converts prices for whoever is looking. A residential proxy exiting in
Japan sees JPY 21,154 on a US listing priced in dollars. Every row therefore
carries the currency it was quoted in; do not assume the site's home currency.
To pin the currency, pin the proxy country in proxyConfiguration.
The proxy is not optional
Measured 2026-08-25:
- plain HTTP clients get 403 from eBay's search page regardless of headers. This actor uses a client that presents a real browser's TLS fingerprint, which gets 200.
- the sold and completed view is guarded harder than the active one. From a datacenter address, a sold search returns eBay's bot check ("Pardon Our Interruption") or a sign-in wall, while the identical active search returns full results.
So the actor defaults to RESIDENTIAL and rotates to a new exit address on each
retry rather than re-asking from a refused one. Running it with no proxy, or on
datacenter addresses, will produce a refusal rather than a wrong answer - the
run log names which one.
Billing
Pay per event: one small actor-start charge once the input has parsed, then
one listing-scraped charge per row written. A search that legitimately matches
nothing costs the start event and nothing else, and an item repeated across
eBay's page boundaries is charged once.