← Blog

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.

Epic Scrapers

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.

What data you can scrape from eBay

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.

How to scrape eBay listings without code

  1. Open the eBay Search Results Scraper and click Try for free.
  2. Choose how to search. You have two options, and you can combine them in one run:
    • eBay search URLs (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.
    • Keyword queries (queries): plain search terms, with a marketplace (country) and optional minPrice / maxPrice.
  3. Set Maximum results per search (maxItems). It applies per URL and per query, so three searches at 100 can return up to 300 rows.
  4. Click Start, then open the Output tab and export to JSON, CSV, Excel, XML or RSS.

Keyword search on a specific marketplace

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
}

Filtered search URLs for precise results

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.

Narrow by category

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.

How to scrape an eBay store or seller

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.

Sample output

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.

Scrape eBay through the API

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.

Use cases

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.

FAQ

Is there an official eBay API?

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.

Can I scrape eBay sold or completed listings?

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.

How many listings can I scrape?

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.

Which eBay countries are supported?

Keyword searches support the US, UK, Germany, France, Italy, Spain, Canada and Australia. Search URLs run on eBay US.

Start scraping eBay

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/.