~ / endpoints / Search API

eBay Search Scraper API

Our eBay search scraper turns any keyword or search URL into structured JSON: the full result page as an array of listings, each with title, price, condition, shipping, sold count, watchers, and buying format, from one request.

Get a free API keyBrowse endpoints
1,000
free requests / mo
2.6s
median response
JSON
structured output
~60
listings per page
the sticking point

Why eBay Search data is hard to pull

eBay serves a keyword search over a bot-gated page whose listing markup (the s-card classes) gets renamed on a regular cadence, so a hand-written parser breaks within weeks. eBay has no public Browse API for arbitrary keyword search without an OAuth app and developer registration, and prices localise to the request IP's country, so a raw fetch from a datacenter range returns a challenge instead of results.

make a call

Your first eBay Search Scraper API call

cURL
curl "https://api.ebayscraperapi.com/api/v1/ebay/search?query=coffee+maker&api_key=$API_KEY"
Python
import requests

BASE = "https://api.ebayscraperapi.com"
API_KEY = "YOUR_API_KEY"

# Pass a keyword (query) or a full eBay search URL.
data = requests.get(
    f"{BASE}/api/v1/ebay/search",
    params={"query": "coffee maker", "api_key": API_KEY},
    timeout=30,
).json()

print(data["query"], "-", data["total_results"], "listings")

for item in data["results"]:
    print(item["position"], item["price"], item["condition"], item["title"])
    print("  ", item["url"])

# Page deeper with the page parameter (1-100).
page2 = requests.get(
    f"{BASE}/api/v1/ebay/search",
    params={"query": "coffee maker", "page": 2, "api_key": API_KEY},
    timeout=30,
).json()
request inputs

Parameters

ParameterRequiredDefaultNotes
queryrequired-The search keyword, e.g. coffee maker. Required. Pass a full eBay search URL instead if you already have one.
urloptional-A full eBay search-results URL (…/sch/i.html?_nkw=…). Use it in place of query to scrape a pre-built search, filtered link, or category page as-is.
pageoptional1Page number of results, 1 to 100. Each page returns roughly 60 listings (items-per-page is set to 60 server side).
domainoptionalcomeBay marketplace TLD, e.g. com, co.uk, de, com.au. Controls which regional eBay site is searched.
countryoptional-Optional two-letter country code for the proxy egress, so prices and shipping render as seen from that region.
api_keyrequired-Your API key, passed as a query parameter. Get one free at signup.
what returns

The JSON the eBay Search Scraper API returns

200 OK
{
  "query": "coffee maker",
  "page": 1,
  "total_results": 56,
  "results": [
    {
      "position": 1,
      "id": "117247270687",
      "title": "Nespresso VertuoPlus Deluxe Coffee and Espresso Machine - Black (ENV155BAE)",
      "url": "https://www.ebay.com/itm/117247270687",
      "price": 45,
      "currency": "USD",
      "price_raw": "$45.00",
      "rating": 5,
      "reviews_count": 12,
      "thumbnail": "https://i.ebayimg.com/images/g/ze4AAeSwZVNqLbzb/s-l140.webp",
      "subtitle": null,
      "condition": "Pre-Owned",
      "shipping": "+$117.65 delivery",
      "returns": null,
      "quantity_sold": null,
      "extracted_quantity_sold": null,
      "buying_format": "accepts_offers",
      "buying_format_text": "or Best Offer",
      "extensions": null,
      "watchers": null,
      "extracted_watchers": null,
      "stock_status": null,
      "epid": "26047541878",
      "new_listing": null,
      "bids": null
    },
    {
      "position": 2,
      "id": "127757820251",
      "title": "Single Serve One Cup Coffee Maker K Cup/Grounds, Mini 6-12oz Portable, Black",
      "url": "https://www.ebay.com/itm/127757820251",
      "price": 32.99,
      "currency": "USD",
      "price_raw": "$32.99",
      "rating": null,
      "reviews_count": null,
      "thumbnail": "https://i.ebayimg.com/images/g/ukcAAeSwdVZpK5BX/s-l140.webp",
      "condition": "Brand New",
      "shipping": "+$20.23 delivery",
      "quantity_sold": "169 sold",
      "extracted_quantity_sold": 169,
      "buying_format": "buy_it_now",
      "buying_format_text": "Buy It Now",
      "epid": null,
      "bids": null,
      "old_price": { "raw": "$59.99", "extracted": 59.99, "discount": "$32.99" }
    }
  ]
}
FieldTypeDescription
querystringThe search term the results were fetched for.
pageintegerThe result page returned, starting at 1.
total_resultsintegerNumber of listings parsed on this page.
resultsarrayThe listings on this page, each an object with the fields below.
positionintegerRank of the listing within the result page, starting at 1.
idstringThe eBay item id, parsed from the stable /itm/{id} link.
titlestringThe listing title.
urlstringCanonical /itm/{id} URL for the listing. Feed it straight into the product endpoint.
pricenumber | objectThe current price as a number, or a { from, to } object for range-priced (multi-variation) listings.
currencystringCurrency of the price, e.g. USD.
price_rawstringThe price exactly as shown on the card, e.g. $45.00.
old_priceobjectStrikethrough list price when a listing is discounted: { raw, extracted, discount }. Absent when there is no markdown.
conditionstringItem condition, e.g. Brand New, Pre-Owned, Open Box, Excellent - Refurbished.
shippingstringShipping line as shown, e.g. +$20.23 delivery or Free delivery.
returnsstringReturns note when present, e.g. Free returns.
quantity_soldstringSold-count label, e.g. 169 sold. extracted_quantity_sold holds the parsed integer.
buying_formatstringOne of buy_it_now, accepts_offers, or auction, derived from the card's format row.
watchersstringWatcher label, e.g. 12 watchers. extracted_watchers holds the parsed integer.
ratingnumberProduct star rating out of 5 when the card shows one, else null.
reviews_countintegerNumber of product ratings backing the star rating, when present.
extensionsarrayProgram or trust badges on the card, e.g. eBay Refurbished, Authenticity Guarantee.
stock_statusstringScarcity label when eBay shows one, e.g. Last one, Almost gone.
epidstringeBay product id from the listing link when the item maps to a catalog product.
bidsobjectFor auctions, a { count, time_left } object with the bid count and time remaining.
thumbnailstringListing image URL, normalised to a stable s-l140 size.
ways to use it

What sellers and buyers build with eBay data

>

Price and market research

Pull a keyword on a schedule and read price, condition, and sold count across the page to see the going rate and demand for a product before you list or buy.
>

Competitor and reseller tracking

Watch how rival listings for the same keyword move on price, buying format, and watchers over time, straight from the results array.
>

Deal and arbitrage sourcing

Scan Buy It Now listings with an old_price markdown or high sold count to surface underpriced inventory worth flipping.
>

Catalog and feed building

Turn a set of keywords into clean rows of id, title, url, price, and thumbnail to seed a comparison site or product feed.
>

Auction monitoring

Filter results to auction listings and read the bids object to track bid count and time left on the items you care about.
>

Demand signals for pricing tools

Feed extracted_quantity_sold and price into a repricing or forecasting model so it reacts to what is actually selling on eBay.
the edge

Why run on our eBay Search Scraper API

Pass a keyword or a full eBay search URL and we return the whole result page as parsed JSON, no OAuth app, no developer registration, and no selector maintenance. Every request runs through rotating proxies, anti-bot handling, and retries, with prices localised to the region you pick, returning a stable schema in about 2.6 seconds.

*

Keyword or URL input

Send a plain query or a complete /sch/i.html search URL, so a filtered or category link scrapes exactly as you built it.
*

Anti-bot and proxy rotation

Rotating datacenter and residential proxies plus anti-bot handling keep eBay search requests from hitting the Pardon Our Interruption wall.
*

Resilient listing parser

We anchor on the stable /itm/{id} links, not eBay's churny card classes, so results keep parsing after eBay renames its markup.
*

Auto-retry across pools

Failed fetches escalate through free, datacenter, and residential tiers before a response is returned, so transient blocks stay invisible.
*

Geo-aware pricing

Pick the marketplace domain and proxy country so prices and shipping render as a shopper in that region would see them.
*

Full page, one call

One request returns roughly 60 listings with all card fields, and the page parameter walks deeper without any scrolling logic.
side by side

eBay Search Scraper API versus the eBay Browse API

Our APIDIY (requests / headless)eBay Browse API
Keyword searchYes, query or full search URLManual fetch and parse per pageRequires an OAuth app and registration
SetupAPI key onlyProxies, headless browser, parsersDeveloper account, app keys, OAuth token
Card fields parsedPrice, condition, shipping, sold, watchers, formatYou write a selector for eachCatalog fields, not the live SERP card
Anti-bot and proxiesBuilt in, geo-awareYou build and maintain itNot applicable
Resilience to markup changeAnchored on /itm/ linksBreaks when eBay renames classesStable, but not the public SERP
Rate limitsBy plan, no OAuth quotaBound by your proxy poolPer-app call quotas and throttling
what it costs

Start free, scale by usage

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

What is an eBay search scraper?

An eBay search scraper is a tool that reads an eBay keyword search and returns each listing as structured data. Our eBay search scraper API takes a keyword or a full search URL and returns the result page as JSON: position, id, title, url, price, currency, condition, shipping, sold count, watchers, buying format, rating, and badges for every listing, from a single request.

How do I scrape eBay search results without writing a parser?

Send one GET request to our ebay/search endpoint with your query and API key. We render nothing you have to manage: we rotate proxies, handle eBay's anti-bot checks, retry on failure, and parse the cards into JSON, so you skip maintaining selectors against eBay's s-card markup, which it renames periodically.

Can I scrape a specific eBay search URL or category?

Yes. Pass a full eBay search URL to the url parameter instead of query and we scrape it exactly as built, including your filters, sort order, or category. That means a link like /sch/i.html with condition, price, or Buy It Now filters already applied comes back parsed the same way a plain keyword search does.

How many results does one call return, and how do I get more?

One call returns a full first page, about 60 listings, because we set eBay's items-per-page to 60 server side rather than the smaller default. To go deeper, pass the page parameter (1 to 100); each value fetches the next page of results. The response echoes the page and total_results so you know how many listings came back.

Does it return the exact price and currency?

Yes. Each listing carries price as a number, price_raw as the exact on-card string, and currency. Discounted items also include an old_price object with the strikethrough list price and discount, and range-priced multi-variation listings return price as a { from, to } object. Note that eBay localises prices to the egress IP's country, so use the domain and country parameters to control which region's pricing you get.

Can I get seller feedback from the search results?

Not from the search endpoint. eBay does not put the seller username, feedback score, or positive percentage in the search-results HTML; those fields only appear on the item page and the seller's store. To get them, take the listing url or the seller and call our ebay/product or ebay/seller endpoint, which read the surfaces that carry that data.

How fast is the eBay search scraper API?

Median end-to-end response is about 2.6 seconds, which includes proxy routing, anti-bot handling, retries, and parsing the whole result page. You get the full first page of listings from one request, so there is no need to chain calls just to assemble a single SERP.

Pull search api data as JSON
Start free with 1,000 requests. No card needed.
Get a free API key Browse endpoints