eBay
eBay Scraper: How to Scrape eBay Listings and Stores (2026)
Scrape eBay listings, prices, sellers and auction data with no code. Copy-paste input JSON, sample output, API code and use cases for resellers and analysts.
eBay
Scrape eBay listings, prices, sellers and auction data with no code. Copy-paste input JSON, sample output, API code and use cases for resellers and analysts.
eBay search pages hold a lot of useful data: live prices, discounts, shipping offers, seller feedback, bid counts, auction end times and how many units a listing has already sold. Copying that by hand stops working after about twenty rows. An eBay scraper turns any search into a clean table you can sort, chart or feed into your own tools.
This guide shows how to scrape eBay listings with the eBay Search Results Scraper on Apify. You can run it from the browser with no code, or call it through the API from Python, JavaScript or cURL. You should have your first dataset within five minutes.
Each dataset row is one live eBay listing returned for one search. The main fields:
| Group | Fields |
|---|---|
| Listing | listingId, variationId, title, url, image, condition, hasVariations |
| Price | price, currency, priceText, originalPrice, discountText |
| Shipping and returns | shippingText, deliveryText, location, freeReturns |
| Demand | quantityRemaining, quantitySold, rating, reviewCount |
| Auction | bidCount, auctionEndTime |
| Seller and placement | sellerText, sponsored, bestOfferAvailable |
| Search | query |
quantitySold is the quiet star here. On fixed-price listings it tells you how many units a seller has moved, which is a fast way to spot products that actually sell.
This actor covers live listings that are for sale right now. If you need completed sales and real sold prices, use the companion eBay Sold Listings API, covered in our eBay sold listings guide.
startUrls): run a search on ebay.com, apply any filters you like (Buy It Now, condition, category, seller), then paste the URL from your address bar. Each URL must contain an _nkw search term.queries): plain search terms, with a marketplace (country) and optional minPrice / maxPrice.maxItems). It applies per URL and per query, so three searches at 100 can return up to 300 rows.Keyword queries can target eight eBay sites: ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca and ebay.com.au. Prices come back in that site’s currency.
{
"queries": ["nintendo switch oled", "steam deck oled"],
"country": "ebay.co.uk",
"minPrice": 150,
"maxPrice": 450,
"maxItems": 100
}
URL mode is the recommended route when you need eBay’s own filters. Set them on eBay, then copy the URL. This example asks for new and refurbished MacBooks, Buy It Now only:
{
"startUrls": [
{
"url": "https://www.ebay.com/sch/i.html?_nkw=macbook&_sacat=0&LH_BIN=1&LH_ItemCondition=1000%7C2010"
}
],
"maxItems": 200,
"delaySecs": 1
}
Search URLs run on eBay US with the filters inside the URL. country, minPrice and maxPrice only apply to keyword queries, so put price limits into the URL itself when you use this mode.
The _sacat parameter in an eBay search URL is the category ID. To find the right number for “Wristwatches” or “CCG Individual Cards”, use our free eBay category ID lookup and drop the ID into the URL, for example https://www.ebay.com/sch/i.html?_nkw=seiko&_sacat=31387. Category searches cut out accessories, lots and other noise that a bare keyword pulls in.
eBay lets you filter any search to one seller: on a search results page open the seller filter, enter the username, and the URL gains an _ssn= parameter. Paste that URL into startUrls and the scraper collects that seller’s matching listings, complete with prices, quantitySold, bestOfferAvailable and shipping text.
{
"startUrls": [
{ "url": "https://www.ebay.com/sch/i.html?_nkw=lego&_ssn=example-seller" },
{ "url": "https://www.ebay.com/sch/i.html?_nkw=lego+star+wars&_ssn=example-seller" }
],
"maxItems": 500
}
Since every URL needs a search term, use one URL per product line you care about. This is how resellers keep an eye on a competitor’s catalog: schedule it daily and compare prices and sold counts between runs.
A trimmed record from a keyword search:
{
"query": "macbook pro",
"listingId": "123456789012",
"title": "Apple MacBook Pro 14-inch Laptop",
"url": "https://www.ebay.com/itm/123456789012",
"condition": "Used",
"price": 899.99,
"currency": "USD",
"originalPrice": 999.99,
"discountText": "10% off",
"shippingText": "Free shipping",
"location": "Located in United States",
"quantityRemaining": 2,
"quantitySold": 58,
"bidCount": null,
"auctionEndTime": null,
"sellerText": "example-seller (1000) 99.8%",
"sponsored": false,
"bestOfferAvailable": true,
"freeReturns": true
}
eBay doesn’t show every field on every card, so some values come back as null. Auction fields are filled for auctions; originalPrice only when there’s a markdown.
Every run can be started from code. The cURL call below runs the actor and returns the dataset in one request:
curl -X POST "https://api.apify.com/v2/acts/epicscrapers~ebay-search-results-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries": ["rtx 4070"], "country": "ebay.com", "maxPrice": 600, "maxItems": 50}'
In Python with apify-client:
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("epicscrapers/ebay-search-results-scraper").call(run_input={
"queries": ["rtx 4070", "rx 7800 xt"],
"country": "ebay.com",
"maxPrice": 600,
"maxItems": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["sponsored"]:
continue
print(item["query"], item["price"], item["quantitySold"], item["url"])
Note that duplicate listing IDs are removed within a query, not across queries. If two keywords overlap, dedupe on listingId after you download.
Resellers and sourcing. Run broad keyword searches with a maxPrice cap and sort by quantitySold to find products with proven demand. Then check what those items actually sell for with the sold listings actor before buying stock.
Pricing and repricing. Track live competitor prices for the products you list. price, originalPrice, discountText and shippingText together show the real offer a buyer sees, not just the sticker.
Dealers and auction buyers. Filter auction listings by bidCount and auctionEndTime to find auctions ending soon with few bids. Schedule hourly runs on a narrow search URL for categories where deals go fast.
Market research. Compare the same keyword across ebay.com, ebay.co.uk and ebay.de to see price levels by country, measure how many results are sponsored, and see how common Best Offer and free returns are in a category.
Seller research. Scrape a competitor’s store with _ssn URLs to see their range, pricing, and which lines sell (quantitySold).
For scheduled monitoring, save your input as a Task and attach an Apify Schedule. Each run lands in a new dataset, which you can push to Google Sheets, a webhook or your own database. The same pattern is covered in our Vinted price tracking guide if you track several marketplaces.
Yes. eBay’s Browse API covers live listings, but it requires a developer account, OAuth setup and rate limits, and sold-price data is restricted to approved partners. The scraper needs no eBay account or keys and returns the fields buyers see on the search page.
Not with this actor; it returns live listings only. Use the eBay Sold Listings API for completed sales, sold dates and price statistics.
The scraper collects publicly visible listing data. You are responsible for how you use it: follow eBay’s terms and data protection laws such as GDPR, and don’t use seller information to profile or spam individuals. This isn’t legal advice.
maxItems sets the cap per URL or query, and the run returns fewer if eBay has fewer matches. Check the Pricing tab on the actor page for current costs.
Keyword searches support the US, UK, Germany, France, Italy, Spain, Canada and Australia. Search URLs run on eBay US.
Pick one search you check by hand today, paste it into the eBay Search Results Scraper, and set maxItems to 50 for a first run. Once the output looks right, save it as a task and put it on a schedule. You can also read the actor overview at /actors/ebay-search-results-scraper/.