← All articles

Scrape eBay Search Results as JSON With the eBay Search Plugin

eBay is one of the largest structured datasets of real-world pricing on the internet. For any product you can name, there are live listings with a price, a condition, a seller reputation score, and a shipping cost attached. That data is gold for price monitoring, resale arbitrage, market research, and building “what is this worth” tools. The hard part has always been getting it out.

Scraping eBay by hand means fighting a heavy JavaScript search page, rotating IPs to avoid blocks, and writing selectors that break the moment eBay ships a layout change. And that is before you deal with the fact that eBay runs 19 regional marketplaces, each with its own domain, currency, and quirks.

The new eBay Search plugin removes that whole layer. You send a keyword, you get back a clean JSON array of listings. This post explains what the plugin returns, how to call it, how to filter and sort results, and how to build something useful on top of it.

What the eBay Search Plugin Does

The plugin takes a search keyword - the same thing you would type into the eBay search box, like mechanical keyboard or vintage omega watch - and returns the search results page as structured JSON. No HTML parsing, no headless browser, no proxy rotation on your side.

It works across 19 regional marketplaces, from ebay.com in the US to ebay.com.au in Australia, so you can compare the same product across countries and currencies with the same call.

For each listing in the results, you get fields like:

  • title - the listing title
  • price - the numeric price, plus a separate currency code
  • condition - the human-readable condition, with a normalized conditionCode
  • seller - the seller username and their feedback score
  • shipping - the shipping cost (or that it ships free)
  • sold, watchers, bids - demand signals for the listing
  • image - the listing thumbnail URL
  • url - a clean, canonical item URL

Because the numeric price and conditionCode are normalized, you can sort, filter, and aggregate the results directly without parsing strings like “$1,299.99” or guessing what “Pre-owned - Excellent” means.

The Request

The endpoint is a single POST call to /marketplace/ebay-search. The only required parameter is your keyword. Authentication is a header, x-scrapeunblocker-key, with your API key.

Here is the simplest possible call with curl:

curl -X POST "https://api.scrapeunblocker.com/marketplace/ebay-search" \
  -H "x-scrapeunblocker-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "mechanical keyboard", "domain": "ebay.com"}'

The domain parameter is how you pick a regional marketplace. Leave it as ebay.com for the US, or set it to ebay.co.uk, ebay.de, ebay.com.au, and so on to search a different country. The returned currency follows the marketplace, so a ebay.de search comes back in EUR.

Filtering the Results

Most real use cases need more than a raw keyword search. The plugin exposes the same filters you would reach for in the eBay sidebar, as plain request fields:

  • condition - restrict to new, used, refurbished, and so on
  • listing_type - auction versus fixed-price (Buy It Now)
  • min_price / max_price - a price band
  • free_shipping - only listings that ship free
  • seller - listings from one specific seller
  • category - restrict to an eBay category

For example, to find used mechanical keyboards under 80 EUR on the German marketplace, with free shipping:

curl -X POST "https://api.scrapeunblocker.com/marketplace/ebay-search" \
  -H "x-scrapeunblocker-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mechanical keyboard",
    "domain": "ebay.de",
    "condition": "used",
    "max_price": 80,
    "free_shipping": true
  }'

Sorting and Pagination

By default eBay returns its “Best Match” order. You can override that with the sort parameter - for example newly_listed to see the freshest listings first, which is what you want if you are watching for new inventory rather than browsing.

Pagination is controlled with page and page_size. The page size options mirror eBay’s own: 60, 120, or 240 results per page. If you are pulling a full snapshot of a category, use page_size: 240 and walk page until you run out of results, rather than making many small requests.

import requests

URL = "https://api.scrapeunblocker.com/marketplace/ebay-search"
HEADERS = {"x-scrapeunblocker-key": "YOUR_API_KEY"}

def search_ebay(query, domain="ebay.com", **filters):
    body = {"query": query, "domain": domain, "page_size": 240, **filters}
    resp = requests.post(URL, headers=HEADERS, json=body, timeout=60)
    resp.raise_for_status()
    return resp.json()

data = search_ebay("vintage omega watch", domain="ebay.com", sort="newly_listed")
for item in data["results"]:
    print(item["price"], item["currency"], "-", item["title"])

A Note on Loose Matches

One detail worth calling out: when eBay has no exact match for your query, it does not return an empty page. It serves a page of loosely related suggestions instead. That is fine for a human browsing, but it can quietly pollute a dataset if you assume every result is a real match.

The plugin handles this honestly. When the results are not exact matches, the response sets exactMatches: false and includes a notice explaining what happened, instead of dressing the suggestions up as real hits. In your code, check that flag before trusting the results:

data = search_ebay("some very specific model number")

if not data.get("exactMatches", True):
    print("No exact matches:", data.get("notice"))
else:
    process(data["results"])

This one check saves you from silently building a price index out of “you might also like” filler.

What You Can Build With It

Once eBay listings are clean JSON, a lot of small, useful tools become an afternoon of work instead of a project:

  • Price monitoring - run the same query on a schedule, store the median price, and alert when it moves. Because price is numeric, the aggregation is trivial.
  • Resale and arbitrage - compare sold counts and asking prices across ebay.com and ebay.co.uk to spot regional gaps.
  • Market research - pull a whole category with page_size: 240, then group by condition and seller feedback to understand who is selling what, and at what price.
  • Deal bots - filter by max_price and free_shipping, sort by newly_listed, and poll for new listings under a threshold.

Each of these is just the plugin plus a few lines of your own logic - no scraping infrastructure to babysit.

FAQ

Do I need an eBay developer account or API key? No. The plugin does not use eBay’s official Finding or Browse API, so there is no eBay app registration, OAuth flow, or per-marketplace approval. You call the ScrapeUnblocker endpoint with your own key.

Which marketplaces are supported? 19 regional eBay sites, from ebay.com through ebay.co.uk, ebay.de, ebay.com.au, and more. Set the domain parameter to choose one. Prices come back in that marketplace’s native currency.

How many results can I get per call? Up to 240 listings per page via page_size, and you can paginate with page to pull deeper into a category.

Can I filter by auction versus Buy It Now? Yes. Use listing_type to restrict to auctions or fixed-price listings, and combine it with min_price, max_price, condition, and free_shipping to narrow the set.

What happens if there are no exact matches? The response comes back with exactMatches: false and a notice field, and the results contain eBay’s loosely related suggestions. Check the flag before treating them as real matches.

Wrapping Up

The eBay Search plugin turns the messiest part of eBay data collection - the search results page - into a single JSON call. You skip the headless browser, the proxy rotation, and the brittle selectors, and go straight to normalized fields you can sort, filter, and aggregate.

If you want to try it, the endpoint is available through the dashboard and documented alongside the other ready-made scrapers in the developer docs. It is one of a growing set of plugins on ScrapeUnblocker that return clean, structured data from sites that would otherwise take real scraping work to crack.

Try ScrapeUnblocker free

95%+ success rate · from 0.55€ per 1,000 calls · 500 free requests on signup.

Try it free → See pricing