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.
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.
Your first eBay Search Scraper API call
curl "https://api.ebayscraperapi.com/api/v1/ebay/search?query=coffee+maker&api_key=$API_KEY" 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() Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
query | required | - | The search keyword, e.g. coffee maker. Required. Pass a full eBay search URL instead if you already have one. |
url | optional | - | 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. |
page | optional | 1 | Page number of results, 1 to 100. Each page returns roughly 60 listings (items-per-page is set to 60 server side). |
domain | optional | com | eBay marketplace TLD, e.g. com, co.uk, de, com.au. Controls which regional eBay site is searched. |
country | optional | - | Optional two-letter country code for the proxy egress, so prices and shipping render as seen from that region. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
The JSON the eBay Search Scraper API returns
{
"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" }
}
]
} | Field | Type | Description |
|---|---|---|
query | string | The search term the results were fetched for. |
page | integer | The result page returned, starting at 1. |
total_results | integer | Number of listings parsed on this page. |
results | array | The listings on this page, each an object with the fields below. |
position | integer | Rank of the listing within the result page, starting at 1. |
id | string | The eBay item id, parsed from the stable /itm/{id} link. |
title | string | The listing title. |
url | string | Canonical /itm/{id} URL for the listing. Feed it straight into the product endpoint. |
price | number | object | The current price as a number, or a { from, to } object for range-priced (multi-variation) listings. |
currency | string | Currency of the price, e.g. USD. |
price_raw | string | The price exactly as shown on the card, e.g. $45.00. |
old_price | object | Strikethrough list price when a listing is discounted: { raw, extracted, discount }. Absent when there is no markdown. |
condition | string | Item condition, e.g. Brand New, Pre-Owned, Open Box, Excellent - Refurbished. |
shipping | string | Shipping line as shown, e.g. +$20.23 delivery or Free delivery. |
returns | string | Returns note when present, e.g. Free returns. |
quantity_sold | string | Sold-count label, e.g. 169 sold. extracted_quantity_sold holds the parsed integer. |
buying_format | string | One of buy_it_now, accepts_offers, or auction, derived from the card's format row. |
watchers | string | Watcher label, e.g. 12 watchers. extracted_watchers holds the parsed integer. |
rating | number | Product star rating out of 5 when the card shows one, else null. |
reviews_count | integer | Number of product ratings backing the star rating, when present. |
extensions | array | Program or trust badges on the card, e.g. eBay Refurbished, Authenticity Guarantee. |
stock_status | string | Scarcity label when eBay shows one, e.g. Last one, Almost gone. |
epid | string | eBay product id from the listing link when the item maps to a catalog product. |
bids | object | For auctions, a { count, time_left } object with the bid count and time remaining. |
thumbnail | string | Listing image URL, normalised to a stable s-l140 size. |
What sellers and buyers build with eBay data
Price and market research
Competitor and reseller tracking
Deal and arbitrage sourcing
Catalog and feed building
Auction monitoring
Demand signals for pricing tools
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
Anti-bot and proxy rotation
Resilient listing parser
Auto-retry across pools
Geo-aware pricing
Full page, one call
eBay Search Scraper API versus the eBay Browse API
| Our API | DIY (requests / headless) | eBay Browse API | |
|---|---|---|---|
| Keyword search | Yes, query or full search URL | Manual fetch and parse per page | Requires an OAuth app and registration |
| Setup | API key only | Proxies, headless browser, parsers | Developer account, app keys, OAuth token |
| Card fields parsed | Price, condition, shipping, sold, watchers, format | You write a selector for each | Catalog fields, not the live SERP card |
| Anti-bot and proxies | Built in, geo-aware | You build and maintain it | Not applicable |
| Resilience to markup change | Anchored on /itm/ links | Breaks when eBay renames classes | Stable, but not the public SERP |
| Rate limits | By plan, no OAuth quota | Bound by your proxy pool | Per-app call quotas and throttling |
Start free, scale by usage
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
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.
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.
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.
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.
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.
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.
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.