~ / 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
the sticking point

Why eBay Product data is hard to pull

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.

make a call

Your first eBay Product Scraper API call

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"}
request inputs

Parameters

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.
what returns

The JSON the eBay Product Scraper API returns

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.
old_pricenumberThe strikethrough list price from the offer's price specification when the item is discounted, else null.
idsarrayProduct identifiers present in the JSON-LD, each an object like { mpn: ... } or { gtin13: ... }.
additional_propertiesarrayItem specifics as { name, value } pairs when the listing exposes them, from JSON-LD or the item-specifics rows. Empty when the seller published none.
item_idstringThe numeric eBay item id parsed from the item URL.
conditionstringItem condition from the page's condition block. Some listings expose only the field label rather than a value, in which case the label is returned as-is.
ways to use it

What sellers and buyers build with eBay data

>

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

Competitor listing intelligence

Capture title, price, and description from rival listings so a pricing or merchandising tool sees exactly how competitors present an item.
>

Feed from search to detail

Take the url from an eBay search result and call this endpoint to add the fields the search card omits, like brand, identifiers, and full description.
the edge

Why run on our eBay Product Scraper API

Pass an item URL or a numeric id and we read the listing's JSON-LD Product block, the stable source eBay ships on every item page, and fall back to the DOM only for fields it omits. Every request runs through residential proxies, anti-bot handling, and retries, returning validated JSON in about 2.6 seconds with no OAuth app to register.

*

URL or id input

Send a full item URL or just the numeric id, and we build the canonical /itm/{id} URL and resolve it server side.
*

JSON-LD first parsing

We read the item's structured JSON-LD as the source of truth, so the fields stay stable even when eBay reshuffles the visible DOM.
*

Residential proxies and anti-bot

Item pages are scraped over residential IPs with anti-bot handling, because eBay serves a challenge to datacenter ranges.
*

Identifiers extracted

MPN and GTIN identifiers are pulled into a clean ids array so you can match listings to your own catalog.
*

Geo-aware pricing

Set the country parameter to control which region's localised price eBay returns for the item.
*

Validated JSON schema

Regression-tested fields return in the same shape on every call, so your integration does not break on a good day's parse.
side by side

eBay Product Scraper API versus the eBay Browse API

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

How fast is the eBay product scraper API?

Median end-to-end response is about 2.6 seconds, including residential proxy routing, anti-bot handling, retries, and parsing. One call returns the full item payload, so you do not chain requests to assemble a single listing.

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