Guides

How to Scrape eBay Prices and Sold Listings

eBay is two markets in one, fixed-price Buy It Now listings and live auctions, and that split changes what a scraped price even means. On top of that, the number most sellers actually want, what an item really sold for, is not on the live listing at all. This guide covers what data lives on an eBay listing, the things specific to eBay that trip up a scrape, how to capture it on a schedule, and the honest line between building an eBay scraper yourself and having the feed delivered.

DADataScrape TeamSeptember 2, 2026Updated October 17, 20265 min read
Target site
Render + bypass anti-bot
Extract fields
Clean + normalize
Deliver: sheet or API
How every DataScrape feed runs, end to end.

What data is on an eBay listing

Each eBay listing carries the item ID you track it by, the title, the condition (new, pre-owned, refurbished), and crucially the buying format, whether it is a fixed-price Buy It Now or an auction. For a Buy It Now listing the price is what the seller is asking right now. For an auction the price is the current highest bid, which keeps climbing until the auction ends, so you read it alongside the bid count rather than treating it as a settled price.

Around the price you get the seller's username, their feedback score and percentage, the quantity sold, the number of watchers, the item location and a shipping note, plus the marketplace it came from (eBay US, UK, and so on). In detail mode you also get item specifics like brand, model, and color, and the full image set.

The field most people are really after is the sold price, what an item actually changed hands for, and that is not on a live listing. You get it from sold or completed listings, and eBay only keeps that history for roughly the last 90 days, so if you want real comps you have to collect them while they are there.

The challenges specific to eBay

eBay has a few traps that quietly poison a dataset if you do not plan for them.

Auction and fixed-price are not the same number. Dump an auction's live bid into the same price column as a Buy It Now asking price and your comparisons are meaningless. Always split by buying format first.

Asking is not sold. Most scrapers, and eBay's own live data, give you what sellers are asking, not what buyers paid. For real market value you need sold-listings data, and again that only goes back about 90 days.

Shipping is text, not a number. You get 'Free shipping' or '+$12.00' or 'Shipping not specified', so the true landed cost needs parsing, and plenty of sellers bake the shipping into a free-shipping price.

Expect a lot of blanks. Units sold, watchers, bid count, and location only appear when eBay prints them on the card, so a blank means not shown, not zero. Sponsored listings sit mixed into the organic results and will skew a price read unless you filter them out with the sponsored flag. And eBay throttles and challenges scrapers, so reliable collection leans on residential proxies and sensible pacing, and every run is a one-off snapshot with no built-in history, so tracking a price over time means scheduling repeat runs and storing the timestamped rows yourself.

Skip the build, get the feed

Send us your eBay target and we will scrape a real sample and send it back, no signup.

Get a free sample

Capturing it on a schedule

What you schedule depends on the question. To watch competitors' live prices, keep a fixed list of item IDs or searches, re-check them on a cadence, split auctions from fixed-price, and append each run to a history so you can see movement. To build real comps, run a sold-listings collection regularly and bank those sold prices before the roughly 90-day window drops them, because once they are gone you cannot get them back.

Either way, store the buying format, the seller, and the shipping note next to the price, so a cheap auction bid or a free-shipping price does not get mistaken for a like-for-like fixed-price offer. Diff each run against the last to emit the events that matter, price changed, sold out, a new was price appeared, and deliver it as a clean feed keyed on the item ID with a timestamp on every row. Leave genuine blanks blank, because on eBay a missing watcher or sold count is information, not a zero.

Build it yourself or have it delivered

For a short watchlist of fixed-price listings, a scheduled script will do. The cost shows up when you need sold-price comps banked before the 90-day window closes, auctions and Buy It Now split cleanly, shipping parsed into a real landed cost, sponsored rows filtered out, and the whole thing kept alive through eBay's throttling and markup changes. Each is small. Together it is a standing job.

That is what we do at DataScrape. You tell us the listings, searches, or sold-item comps you want, and we deliver a clean, structured feed on your schedule, split correctly by buying format and keyed on the item ID, then maintain it as eBay changes. We run scheduled retail monitoring at scale, around 3,000 products on a 10-minute cycle with instant alerts for one reseller, and we run collection through heavy anti-bot on sites like Booking.com and Expedia, so eBay's defenses are familiar ground. You work directly with the people building it, and we hand you the data, not proxies to manage.

The easiest way to see if it is any good is to look at it. Send us a few eBay listings or a sold-items search and we will scrape a real sample and send it back, no signup.

Fields worth capturing from eBay

  • Item ID
  • Title
  • Buying format (auction / Buy It Now)
  • Current price or live bid
  • Sold price (completed listings)
  • Was / strikethrough price (when shown)
  • Condition
  • Seller and feedback score
  • Quantity sold and watchers
  • Shipping note
  • Item location and marketplace
  • Sponsored flag
  • Scrape timestamp

Frequently asked questions

Want an eBay feed without the build?

Send us the products or pages you need, and we will deliver a clean feed and maintain it. Start with a free sample.

Get a Free Sample