eBay Listings Scraper - Search Results to CSV/JSON
Pricing
from $1.40 / 1,000 listings
eBay Listings Scraper - Search Results to CSV/JSON
[💵 $2 / 1K] Scrape eBay search results at scale: title, price, shipping, total price paid, condition, item aspects, bids, location, seller and image. 5 markets, condition and price filters, no start fee. Clean rows, no empty carousel tiles.
Pricing
from $1.40 / 1,000 listings
Rating
0.0
(0)
Developer
WebData Labs
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
eBay Listings Scraper - Search Results to CSV, JSON and Excel
Turn any eBay search into a clean structured dataset - with the shipping-inclusive total price already computed, and none of the empty filler rows.
This eBay scraper pages through eBay search results and returns every listing as a row: title, price, shipping, total price, condition, item aspects, bids, location, item ID and a direct link. It runs on residential proxies, retries on eBay's challenge pages instead of reporting an empty result, and works across 5 eBay markets.
✅ What you get
- ✅ Every listing from a search, paged automatically up to your limit
- ✅
totalPrice= price + shipping - the number people forget to compare on - ✅ Normalized condition - eBay's dozen labels collapsed to
new,open_box,refurbished,used,for_parts - ✅ Item aspects - size, brand, model, straight off the listing card
- ✅ Auction detail - listing type, bid count, Best Offer availability
- ✅ 5 markets - US, UK, DE, AU, CA, with the right currency per market
- ✅ eBay-side filters - condition, auction vs Buy It Now, price range, free shipping, seller location
- ✅ No empty rows. eBay pads results with "shop by model" carousel tiles that carry a title and no price. Those are dropped, so you are never billed for a row with no data in it.
- ✅ No Actor start fee. You pay per listing, nothing else.
🔎 Why use this eBay scraper
- Total price, not just price. A $69.99 listing with $14.95 shipping loses to a $79 listing with free delivery.
totalPricemakes the comparison correct by default. - Clean rows only. Competing scrapers emit eBay's carousel tiles as listings - rows with a title and nothing else, which you pay for and then filter out. We drop them at parse time.
- It does not lie about being blocked. eBay serves its bot challenge and its sign-in redirect as HTTP 200. A naive scraper parses that as "0 listings found". This one detects the wall, rotates the proxy session and retries; a query it truly cannot fetch is reported in the run's
OUTPUTand skipped, never billed. - Filters pushed to eBay. Price, condition and listing-type filters are applied by eBay before we scrape, so you are not billed for rows you would have thrown away.
📊 What data you get
| Field | Type | Description |
|---|---|---|
query | string | The search this row came from |
market | string | US, UK, DE, AU or CA |
page | integer | Results page the listing appeared on |
position | integer | Position within that page |
itemId | string | eBay item number |
title | string | Listing title |
price | number | Listing price (low end of a variant range) |
priceRaw | string | The price exactly as eBay printed it |
shippingCost | number | Shipping (0 for free delivery, null if not stated) |
totalPrice | number | price + shippingCost |
currency | string | ISO currency of the market |
condition | string | eBay's condition label |
conditionGroup | string | Normalized: new, open_box, refurbished, used, for_parts |
itemAspects | array | Remaining subtitle facts (size, brand, model) |
listingType | string | auction or buy_it_now |
bidsCount | integer | Number of bids (auctions only) |
bestOfferAvailable | boolean | Seller accepts Best Offer |
itemLocation | string | Where the item ships from |
authenticityGuarantee | boolean | Covered by eBay Authenticity Guarantee |
url | string | Direct link, tracking parameters stripped |
image | string | Thumbnail URL |
👥 Who it's for
- Resellers and arbitrage buyers scanning a category for underpriced listings.
- Pricing and e-commerce teams tracking what competitors ask for a SKU, week over week.
- Brand and IP teams monitoring who is listing their product and from where.
- Market researchers measuring supply, condition mix and price spread in a category.
- Developers who need eBay search as a JSON endpoint without an eBay developer account.
⚙️ How to scrape eBay search results
- Click Try for free.
- Put your keywords into Search queries - one line per search.
- Pick the eBay market you care about.
- Set Max listings per query (100 is a good first run) and any filters - condition, price range, auction vs Buy It Now.
- Run it.
- Open the Listings view, then export to CSV, JSON or Excel, or pull it from the API.
🚀 Ready-made tasks
Prefilled versions of this Actor for common jobs. Open one, hit run, adjust the keyword - no configuration needed.
| Task | What it does |
|---|---|
| Monitor sneaker prices on eBay | New sneaker listings over $40, with size and total cost, for resale sourcing |
| Track used electronics prices on eBay | Used Buy It Now electronics - what headphones, vacuums and gadgets go for now |
| Find eBay auctions ending soon | Auctions sorted by ending soonest, with current bid and bid count |
| Export eBay UK listings to CSV | eBay.co.uk results in GBP with delivery cost and seller location |
| Scrape trading card listings on eBay | Graded and raw card listings with asking price, condition and seller |
📥 Input
{"searchQueries": ["nike dunk low panda", "sony wh-1000xm4"],"market": "US","maxListingsPerSearch": 100,"condition": "new","listingType": "buy_it_now","minPrice": 40,"freeShippingOnly": false,"sort": "best_match"}
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | array | required | Keywords to search |
market | string | US | US, UK, DE, AU, CA |
maxListingsPerSearch | integer | 100 | Listings per query. 0 = no limit |
condition | string | any | new, open_box, refurbished, used, for_parts |
listingType | string | all | auction or buy_it_now |
minPrice / maxPrice | integer | unset | Price filters applied by eBay |
freeShippingOnly | boolean | false | Only free-delivery listings |
sellerLocation | string | any | domestic or worldwide |
sort | string | best_match | newly_listed, ending_soonest, price_low, price_high |
📤 Output
{"query": "nike dunk low panda","market": "US","page": 1,"position": 6,"itemId": "356739122665","title": "Nike Dunk Low Retro MEN'S White Black Panda DD1391-100 Sneakers Shoes","price": 69.99,"priceRaw": "$69.99","shippingCost": 5.93,"totalPrice": 75.92,"currency": "USD","condition": "Brand New","conditionGroup": "new","itemAspects": ["US M 11 + more", "Nike"],"listingType": "buy_it_now","bidsCount": null,"bestOfferAvailable": false,"itemLocation": "United States","authenticityGuarantee": false,"url": "https://www.ebay.com/itm/356739122665","image": "https://i.ebayimg.com/images/g/IHQAAOSwJk9n8DLx/s-l140.webp"}
💵 How much does it cost to scrape eBay?
You are billed per listing returned, with no Actor start fee.
| Apify plan | Price per listing |
|---|---|
| Free | $0.0020 |
| Bronze / Silver | $0.0017 |
| Gold | $0.0014 |
| Platinum / Diamond | $0.0010 |
Costed example: the default run - one query, 100 listings - costs $0.20 on the Free plan and $0.10 on Platinum. Ten queries at 100 listings each is $2.00 / $1.00.
The levers that change your bill: maxListingsPerSearch, the number of searchQueries, and using the price/condition filters so eBay drops irrelevant listings before we ever return them.
🔁 Run it on the Apify platform
Schedule it daily or weekly to track a category over time, call it from the REST API or the JavaScript and Python clients, pipe results into Make, Zapier, Google Sheets, Airtable or a webhook, and get alerted if a run fails.
⚠️ Limits and caveats
- eBay paginates to roughly 8,000 results per search. Past that, narrow the query or add a price band.
- No
sponsoredflag. eBay renders the Sponsored badge as a transparent reversed string plus a base64 SVG, on every card. We could not read a reliable organic/promoted split, and would rather omit the field than ship a boolean that istruefor every row. - Some listings omit a condition. Those come back with
condition: nullandconditionGroup: "unknown"rather than a guess.
🧩 Related Actors
- Mercari Sold Comps Scraper - real sold prices and median comps for Mercari.
- Poshmark Sold Comps Scraper - sold prices for fashion resale.
- Website Contact Extractor, Google Maps lead scrapers - the rest of the WebData Labs lane.
❓ FAQ
How many listings can I get per search?
Up to roughly 8,000, which is eBay's own pagination limit. Set maxListingsPerSearch to whatever you need under that.
Why is shippingCost sometimes null?
Because eBay did not state a shipping price on that card - usually calculated-at-checkout shipping. 0 means genuinely free; null means unknown, and those rows are left out of any total you compute.
Is scraping eBay legal? The Actor collects publicly visible listing data only, with no login and no personal data. You are responsible for how you use the data in your jurisdiction.
Does it work outside the US?
Yes - UK, Germany, Australia and Canada via the market input.
🛠️ Support
Something wrong with a run? Open an issue on the Actor and include the run URL, the input JSON you used, and what you expected.