~ / endpoints / Product API

eBay Product Scraper API

Our eBay product scraper turns any eBay item URL into structured JSON: title, price, currency, brand, image, description, availability, condition, and identifiers like MPN and GTIN, from one request.

Get a free API keyBrowse endpoints
1,000
free requests / mo
2.6s
median response
JSON
structured output
1
call per item

Why it is hard

An eBay item page is bot-gated and its DOM changes often, so hand-written selectors break, but every listing also ships a clean JSON-LD Product block that is the stable source of truth. Reaching it reliably still needs residential IPs, because eBay serves a challenge to datacenter ranges and localises the price to the request country.

Quickstart

cURL
curl "https://api.ebayscraperapi.com/api/v1/ebay/product?url=https://www.ebay.com/itm/117247270687&api_key=$API_KEY"
Python
import requests

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

# Pass an eBay item URL (or the numeric id via the id param).
data = requests.get(
    f"{BASE}/api/v1/ebay/product",
    params={
        "url": "https://www.ebay.com/itm/117247270687",
        "api_key": API_KEY,
    },
    timeout=30,
).json()

print(data["title"])
print(data["price"], data["currency"], "| brand:", data["brand"])
print("in stock:", data["availability"])

for ident in data["ids"]:
    print(ident)   # e.g. {"mpn": "ENV155BAE"}

Params

ParameterRequiredDefaultNotes
urlrequired-The eBay item page URL, e.g. https://www.ebay.com/itm/117247270687. Required unless you pass id.
idoptional-The numeric eBay item id as an alias for url. We build the canonical /itm/{id} URL from it. One of url or id is required.
domainoptionalcomeBay marketplace TLD used when building the URL from an id, e.g. com, co.uk, de.
countryoptional-Optional two-letter country code for the proxy egress. eBay localises the item price to this region.
api_keyrequired-Your API key, passed as a query parameter. Get one free at signup.

Response

200 OK
{
  "title": "Nespresso VertuoPlus Deluxe Coffee and Espresso Machine - Black (ENV155BAE)",
  "price": 45,
  "currency": "$",
  "url": "https://www.ebay.com/itm/117247270687",
  "image": "https://i.ebayimg.com/images/g/ze4AAeSwZVNqLbzb/s-l400.jpg",
  "brand": "Nespresso",
  "description": "Nespresso Vertuo Next Coffee & Espresso Machine by Breville - Matte Black. Nespresso Vertuo Next Coffee Machine. Brews both coffee and espresso drinks. Compact footprint. Modern matte black finish.",
  "availability": true,
  "old_price": null,
  "ids": [
    { "mpn": "ENV155BAE" }
  ],
  "additional_properties": [],
  "item_id": "117247270687",
  "condition": "Condition"
}
FieldTypeDescription
titlestringThe item title, read from the listing's JSON-LD, with the visible H1 as a fallback.
pricenumberThe current offer price. eBay localises this to the egress IP's country, so set country to control the region.
currencystringCurrency symbol for the price, e.g. $, mapped from the JSON-LD currency code.
urlstringCanonical /itm/{id} URL for the item, with query strings stripped.
imagestringPrimary product image URL, normalised to a stable s-l400 size.
brandstringBrand name from the listing's JSON-LD when present, else null.
descriptionstringItem description text from the JSON-LD, whitespace-cleaned.
availabilitybooleanTrue when the offer is in stock, false when out of stock or sold out, mapped from the schema.org availability.

Use it for

>

Price monitoring

Poll an item URL on a schedule and store price, currency, and old_price to track markdowns and price history eBay does not chart for you.
>

Catalog enrichment

Resolve a list of item URLs into clean rows of title, brand, image, and identifiers to enrich a product database or comparison feed.
>

Identifier matching

Read the ids array to line eBay listings up with your own catalog by MPN or GTIN, so the same product maps across sources.
>

Availability alerts

Watch the availability flag on watched items and fire an alert the moment a listing flips back into stock.

How it compares

Our APIDIY (requests / headless)eBay Browse API
InputItem URL or numeric idManual fetch and parse per pageItem id, after OAuth app setup
Source of truthJSON-LD, DOM fallbackYou pick and maintain selectorsCatalog API, not the live listing
SetupAPI key onlyResidential proxies, headless, parsersDeveloper account, app keys, OAuth token
Identifiers (MPN / GTIN)Parsed into an ids arrayYou extract them yourselfAvailable for catalog products
Anti-bot and proxiesResidential, built inYou build and maintain itNot applicable
Rate limitsBy plan, no OAuth quotaBound by your proxy poolPer-app call quotas and throttling

Pricing

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 product scraper?

An eBay product scraper is a tool that reads a single eBay item page and returns its data in a structured format. Our eBay product scraper API takes an item URL (or the numeric id) and returns title, price, currency, url, image, brand, description, availability, old_price, identifiers, item specifics, item_id, and condition as JSON from one request.

How do I scrape an eBay listing without writing a parser?

Send one GET request to our ebay/product endpoint with the item url and your API key. We fetch the page over residential proxies, handle eBay's anti-bot checks, retry on failure, and parse the listing's JSON-LD into clean JSON, so you do not maintain selectors against eBay's item-page DOM, which changes often.

Can I pass an item URL or only an id?

Either works. Pass the full item URL to the url parameter, or pass the numeric item id to the id parameter and we build the canonical /itm/{id} URL for you. One of the two is required. Passing the URL from an eBay search result straight into this endpoint is the common pattern for going from a result card to full item detail.

Does it return the exact price and currency?

Yes, price and currency come from the listing's JSON-LD offer, and a discounted item also returns old_price from the offer's price specification. One thing to know: eBay localises the offer price to the egress IP's country, so the same listing can render a different currency and amount from different regions. Use the country parameter to pin the region you want.

What are the ids and additional_properties fields?

ids is an array of product identifiers found in the listing's structured data, each an object such as { mpn: ENV155BAE } or { gtin13: ... }, which lets you match an eBay item to your own catalog. additional_properties is an array of item specifics as { name, value } pairs when the seller published them; it comes back empty for listings that expose none, as in the sample above.

Why does condition sometimes come back as a label?

We read condition from the item page's condition block. On most listings that yields a value like Brand New or Pre-Owned, but some pages render only the field label (Condition) and load the value in a later state, in which case the field returns the label as-is rather than a fabricated value. When you need condition reliably across a set of items, the search endpoint also reports each card's condition in its results.

Get product api as JSON
Free plan, 1,000 requests. No credit card required.
Get a free API key All endpoints