Appearance
eBay Scraper API
Turn www.ebay.com searches and item pages into structured data. Send keywords and filters, get back one page of 60, 120 or 240 listings - item number, title, condition, price and currency, buying format, bids and end time, shipping, location, sold count, watchers, badges and the sponsored flag - or send one item and get everything its page shows: the price in the listing's own currency and in the shown one, item specifics, every variation with its own price and stock, the seller with feedback, shipping, returns, payment methods, auction state, photos and reviews. No proxy pool, bot-check handling or parser maintenance on your side.
It ships as two synchronous Scraper APIs and a no-code scraper:
| Product | Type | Product code | What it does |
|---|---|---|---|
| eBay Search API | Scraper API (synchronous) | ebay_search | Search www.ebay.com with filters, get one page of listings. |
| eBay Item API | Scraper API (synchronous) | ebay_item | Give one item number or URL, get the whole item page. |
| eBay Scraper | No-code scraper | ebay | Sweep up to 20 search pages and export JSON, CSV or XML. |
Every field is snake_case, the same convention as the Web Scraping API. The APIs read www.ebay.com (the US site); other eBay sites are not supported yet.
Currency. eBay converts prices for the visitor's country. A request goes out from the US first, where prices come in US dollars; when eBay refuses it there, the retry goes out from another country and the prices come in that country's currency. A search with min_price, max_price or zip_code, and every page of the no-code scraper, stays on US exits for all its attempts, so the filters mean US dollars and a US address. Every price comes with its currency - read it, do not assume US dollars. The item page also gives the price in the listing's own currency (original_price, original_currency). Pass zip_code on a search to have shipping costs and delivery dates computed for a US address.
eBay Search API
GET https://api.scrapeit.io/api/v1/scrape/ebay/search
x-api-key: YOUR_SCRAPEIT_API_KEY| Parameter | Type | Example | Description |
|---|---|---|---|
q | string | iphone 15 | Required. Keywords, as typed into eBay, up to 300 characters. |
sort | string | price_low | best_match (default), ending_soonest, newly_listed, price_low or price_high (both by price plus shipping). |
condition | array | used | One or more of new, open_box, refurbished (every eBay Refurbished grade), used, for_parts. Any condition when empty. |
buying_format | string | buy_it_now | auction, buy_it_now or best_offer (listings that accept offers). Every format when empty. |
min_price | number | 300 | Lowest price, in the currency eBay shows the prices in. |
max_price | number | 400 | Highest price, in the currency eBay shows the prices in. |
category_id | string | 9355 | An eBay category id, e.g. 9355 for Cell Phones & Smartphones. |
free_shipping | boolean | true | Only listings with free shipping. |
us_only | boolean | true | Only items located in the United States. |
zip_code | string | 10001 | A US ZIP code the shipping costs and delivery dates are computed for. |
items_per_page | number | 120 | 60 (default), 120 or 240 listings per page. |
page | number | 2 | Results page, 1–100. Defaults to 1. |
include_html | boolean | false | Also return the fetched page HTML in html. Paid add-on: +4 credits per request. |
Repeat condition or separate the values with commas: ?condition=used&condition=refurbished or ?condition=used,refurbished.
Example request
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/ebay/search' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'q=iphone 15' \
--data-urlencode 'condition=used' \
--data-urlencode 'buying_format=buy_it_now' \
--data-urlencode 'sort=price_low'js
const response = await fetch(
'https://api.scrapeit.io/api/v1/scrape/ebay/search?' +
new URLSearchParams({
q: 'iphone 15',
condition: 'used',
buying_format: 'buy_it_now',
sort: 'price_low',
}),
{ headers: { 'x-api-key': 'YOUR_SCRAPEIT_API_KEY' } },
);
const { data } = await response.json();
for (const item of data.results) console.log(item.position, item.title, item.price, item.currency);python
import requests
response = requests.get(
"https://api.scrapeit.io/api/v1/scrape/ebay/search",
headers={"x-api-key": "YOUR_SCRAPEIT_API_KEY"},
params={"q": "iphone 15", "condition": "used", "buying_format": "buy_it_now", "sort": "price_low"},
timeout=120,
)
for item in response.json()["data"]["results"]:
print(item["position"], item["title"], item["price"], item["currency"])Search response
json
{
"data": {
"query": "iphone 15",
"search_url": "https://www.ebay.com/sch/i.html?_nkw=iphone+15&_sop=15&LH_ItemCondition=3000&LH_BIN=1&_ipg=60",
"total_results": 387,
"results": [
{
"position": 1,
"item_id": "335761219642",
"title": "Apple iPhone 13 Pro (Great Condition) - (Unlocked, AT&T, Verizon, T-Mobile)",
"subtitle": "Apple iPhone 13 Pro · 256 GB · Factory Unlocked",
"condition": "Pre-Owned",
"url": "https://www.ebay.com/itm/335761219642",
"epid": "8049288657",
"image": "https://i.ebayimg.com/images/g/GCoAAeSwsgZpjOVt/s-l1600.jpg",
"price": 429.99,
"price_max": 489.99,
"price_text": "$429.99 to $489.99",
"currency": "USD",
"original_price": 529.99,
"coupon_price": 395.59,
"buying_format": "buy_it_now",
"accepts_best_offer": false,
"bids_count": null,
"time_left": null,
"ends_at": null,
"shipping_cost": null,
"free_shipping": null,
"shipping_text": "Shipping not specified",
"delivery_estimate": null,
"location": "United States",
"free_returns": false,
"sold_count": null,
"watchers_count": 11,
"availability_note": null,
"is_sponsored": true,
"is_new_listing": false,
"badges": [],
"rating": 4.5,
"reviews_count": 19,
"seller_name": null,
"seller_feedback_percent": null,
"seller_feedback_count": null,
"notes": []
},
{
"position": 7,
"item_id": "128156536952",
"title": "Apple iPhone 15 Pro Max (256GB, White Titanium) – Very Good condition",
"price": 479.45,
"currency": "USD",
"buying_format": "auction",
"bids_count": 33,
"time_left": "8h 50m",
"ends_at": "2026-10-31T02:39:33.000Z",
"shipping_cost": 20.56,
"location": "Australia"
}
],
"other_results": [],
"related_searches": ["iphone 14", "iphone 16", "iphone 15 unlocked"],
"applied_filters": [
{ "filter": "Sort", "value": "Price + Shipping: lowest first" },
{ "filter": "Buying Format", "value": "Buy It Now" },
{ "filter": "Condition", "value": "Used" }
],
"aspects": [{ "name": "Storage Capacity", "values": ["128 GB", "256 GB", "512 GB"] }],
"pagination": { "current_page": 1, "items_per_page": 60, "next_page": 2 }
}
}| Field | Description |
|---|---|
total_results | The result count eBay shows; 10,000+ is 10000. |
results | The listings that match every filter, in page order. position counts across pages: page 2 of 60 starts at 61. |
other_results | Listings eBay adds below them, each with its section: fewer_words (matching fewer keywords) or international_sellers. |
results[].item_id, url | The eBay item number and its item page - pass either to the Item API. |
results[].epid | eBay product id of the catalog product the listing is matched to. |
results[].price, price_max | The price, or both ends of a price range (a listing with variations); price_text as shown. |
results[].original_price, coupon_price | The struck-through earlier price, and the price with the seller's coupon. |
results[].buying_format | auction or buy_it_now; accepts_best_offer for a fixed-price listing that takes offers. |
results[].bids_count, time_left, ends_at | An auction's bids, the time left as shown and its exact end time (ISO 8601). |
results[].shipping_cost | 0 for free shipping; null when the card names no cost. shipping_text as shown. delivery_estimate is the card's Get it by … line, or the estimate eBay writes into the shipping line (Free delivery in 1-2 days gives Delivery in 1-2 days); null when the card names none. |
results[].sold_count, watchers_count | 21+ sold is 21. |
results[].is_sponsored | true for a promoted (paid) listing, read from the page's own listing data. |
results[].badges | Program badges, e.g. eBay Refurbished, Top Rated Seller. |
results[].rating, reviews_count | Product rating of the matched catalog product. |
results[].seller_name, seller_feedback_* | The seller, when eBay shows it on the card (its desktop layout); the Item API always returns the seller. |
results[].notes | Card lines no other field carries, e.g. Save up to 5% when you buy more. |
applied_filters | The filters eBay applied, as its filter panel names them (defaults left out). |
aspects | Item-specific filters the page offers for the search, with their values. |
A missing field is null or an empty list, never an error.
eBay Item API
GET https://api.scrapeit.io/api/v1/scrape/ebay/item
x-api-key: YOUR_SCRAPEIT_API_KEY| Parameter | Type | Example | Description |
|---|---|---|---|
item_id | string | 256999721580 | The eBay item number. Give it or url. |
url | string | https://www.ebay.com/itm/256999721580 | An ebay.com item page URL (/itm/<number>). Give it or item_id. |
include_description | boolean | true | Also fetch the seller's full description (its own page, no extra charge) into description_html and description_text. |
include_html | boolean | false | Also return the fetched page HTML in html. Paid add-on: +4 credits per request. |
Example request
bash
curl -G 'https://api.scrapeit.io/api/v1/scrape/ebay/item' \
-H 'x-api-key: YOUR_SCRAPEIT_API_KEY' \
--data-urlencode 'item_id=256999721580'js
const response = await fetch(
'https://api.scrapeit.io/api/v1/scrape/ebay/item?' +
new URLSearchParams({ item_id: '256999721580' }),
{ headers: { 'x-api-key': 'YOUR_SCRAPEIT_API_KEY' } },
);
const { data } = await response.json();
console.log(data.title, data.price, data.currency, data.variations.length);python
import requests
response = requests.get(
"https://api.scrapeit.io/api/v1/scrape/ebay/item",
headers={"x-api-key": "YOUR_SCRAPEIT_API_KEY"},
params={"item_id": "256999721580"},
timeout=120,
)
item = response.json()["data"]
print(item["title"], item["price"], item["currency"], len(item["variations"]))Item response
json
{
"data": {
"item_id": "256999721580",
"url": "https://www.ebay.com/itm/256999721580",
"title": "Apple iPhone 15 - 128GB 256GB 512GB - All Colours Smartphone - Very Good",
"original_title": null,
"listing_status": "ACTIVE",
"is_ended": false,
"marketplace": "EBAY_GB",
"epid": null,
"condition": "Very Good - Refurbished",
"condition_description": "The item shows minimal wear and is backed by a one year warranty…",
"seller_notes": null,
"price": 493.57,
"currency": "USD",
"original_price": 369,
"original_currency": "GBP",
"buying_format": "buy_it_now",
"accepts_best_offer": false,
"bids_count": null,
"has_reserve_price": null,
"started_at": "2025-07-02T15:10:13.000Z",
"ends_at": "2026-11-02T16:10:13.000Z",
"quantity_available": 2,
"quantity_sold": 470,
"availability_note": null,
"watchers_count": 696,
"shipping_cost": 0,
"shipping_text": "Free 2-4 day delivery",
"delivery_estimate": "Get it between Mon, Nov 2 and Wed, Nov 4",
"shipping_details": [
{
"label": "Handling time",
"value": "Will usually ship within 1 business day of receiving cleared payment."
},
{ "label": "Location", "value": "Newcastle-Under-Lyme, United Kingdom" }
],
"item_location": "Newcastle-Under-Lyme, United Kingdom",
"ships_to": "Antigua and Barbuda, Aruba, Australia, …",
"returns": [
{ "label": "Returns", "value": "Accepted within 30 days" },
{ "label": "Returns shipping", "value": "Seller pays return shipping" }
],
"payment_methods": ["PayPal", "Apple Pay", "Visa", "Master Card", "Diners Club"],
"seller": {
"name": "Loop_Mobile",
"feedback_count": 37059,
"feedback_percent": 99.6,
"url": "https://www.ebay.com/usr/loop_mobile"
},
"item_specifics": [
{ "label": "Model", "value": "Apple iPhone 15" },
{ "label": "Lock Status", "value": "Network Unlocked" }
],
"variation_axes": [
{ "name": "Colour", "values": ["Black", "Blue", "Pink", "Yellow", "Green"] },
{ "name": "Storage Capacity", "values": ["256 GB", "128 GB", "512 GB"] }
],
"variations": [
{
"variation_id": "557628019697",
"attributes": { "Colour": "Yellow", "Storage Capacity": "128 GB" },
"price": 493.57,
"currency": "USD",
"original_price": 369,
"original_currency": "GBP",
"in_stock": false,
"watchers_count": 9
}
],
"images": ["https://i.ebayimg.com/images/g/oFoAAeSw~LdoZUeN/s-l1600.jpg"],
"breadcrumbs": [
{ "name": "Electronics", "url": "https://www.ebay.com/b/Electronics/bn_7000259124" },
{
"name": "Cell Phones & Smartphones",
"url": "https://www.ebay.com/b/Cell-Phones-Smartphones/9355/bn_320094"
}
],
"category_id": "9355",
"brand": "Apple",
"model": "Apple iPhone 15",
"mpn": "Does not apply",
"gtin": null,
"color": null,
"rating": null,
"reviews_count": null,
"reviews": [],
"description_snippet": "Our refurbished devices are second-hand and have received a make over from the inside out…",
"description_url": "https://itm.ebaydesc.com/itmdesc/256999721580",
"description_html": null,
"description_text": null
}
}| Field | Description |
|---|---|
title, original_title | The title eBay shows, and the seller's own title when eBay shows a translated one. |
marketplace | The eBay site the item is listed on, e.g. EBAY_US, EBAY_GB, EBAY_AU. |
price, currency | The price (an auction's current bid) as eBay shows it for the exit's country. |
original_price, original_currency | The same price in the listing's own currency (equal to price when eBay converted nothing). |
bids_count, has_reserve_price, ends_at | Auction state; started_at and ends_at are ISO 8601 (a fixed-price listing ends when its listing period does). |
quantity_available, quantity_sold | Stock and sales as the page shows them; availability_note e.g. Last one. |
shipping_cost | The shipping price to the exit's country, in currency; shipping_details holds the handling time, services and excluded areas. |
item_specifics | The listing's specifics and the catalog product's details, as label / value pairs. |
variation_axes, variations | Each variation selector with its values, and every combination with its own price (both currencies), stock and watchers. |
seller | Username, feedback score, positive percentage and profile page. |
breadcrumbs, category_id | The category path and the leaf category id (use it as category_id on a search). |
reviews | Product reviews the page shows (the author's public username only). |
description_snippet, description_url | The opening of the seller's description and its own page; description_html and description_text with include_description. |
No-code eBay Scraper
Prefer a dashboard run and a file? Scrapers without code → eBay Scraper takes the same keywords and filters, sweeps up to 20 search pages and produces JSON, CSV and XML files with one record per listing (the search result fields above; the other_results eBay adds below the matches are left out). With include_detail it also opens every item page and nests it under detail. The same job is available over HTTP with an API key (x-api-key; scope scrapers:run to start, scrapers:read to poll):
POST https://api.scrapeit.io/api/v1/scrapers/ebay/jobs
GET https://api.scrapeit.io/api/v1/scrapers/ebay/jobs/{jobId}| Parameter | Type | Example | Description |
|---|---|---|---|
q | string | iphone 15 | Required. Keywords. |
sort | string | price_low | Result ordering, as in the Search API. |
condition | array | used | Conditions, as in the Search API. |
buying_format | string | auction | Buying format, as in the Search API. |
min_price | number | 300 | Lowest price. |
max_price | number | 400 | Highest price. |
category_id | string | 9355 | An eBay category id. |
free_shipping | boolean | true | Only listings with free shipping. |
us_only | boolean | true | Only items located in the United States. |
zip_code | string | 10001 | A US ZIP code for shipping costs. |
items_per_page | number | 240 | 60 (default), 120 or 240 listings per swept page. |
max_pages | number | 10 | Search pages to sweep, 1–20. Defaults to 5; the run stops earlier at the last page. |
include_detail | boolean | true | Also fetch each item page and nest it under detail (the Item API fields). Defaults to false. |
output_format | array | ["json", "csv"] | One or more of json, csv, xml. Defaults to ["json"]; an empty list is rejected. |
A sweep of five pages or fewer without include_detail finishes inline and the POST already answers with the result-file ids; a larger one, or any run with include_detail, answers queued, so poll the GET endpoint until status is finished (or failed). A listing eBay repeats on a later page is written once. Each swept page is billed like one Search API request and each item page like one Item API request; a listing whose item page fails keeps its search fields with detail: null and a detail_error code, and that page costs nothing. A job started with an API key runs under that key, queued or not: its pages count in the key's usage.
Errors
| Code | HTTP | Meaning |
|---|---|---|
VALIDATION_ERROR | 400 | Missing or blank q; an unknown sort, condition or buying_format; items_per_page other than 60, 120, 240; a bad zip_code or category_id; no item_id or url, a url that is not an https www.ebay.com /itm/ page, or an item_id and url that name different items. |
NOT_FOUND | 404 | Item API: eBay has no item with this number. |
TARGET_BLOCKED | 502 | Every pass drew eBay's refusal or captcha. Retry later; the request costs nothing. |
See Error codes for the shared error format.
Credits and billing
Both APIs bill one flat price per request under their own product code - the proxy is part of it (billing & credits). Every request is scraped live - never served from the shared cache - so prices and stock are current. A request eBay refuses is fetched again through other exits at no extra charge, and the full description of include_description costs nothing extra.
Price per request: 15 credits, flat; this is an introductory price for a new product and may change - the dashboard Pricing page always shows the current price. A no-code job pays the Search API price per results page it fetched, and the Item API price per item page with include_detail.
Limits and behavior
- One search request returns one page of up to 60, 120 or 240 listings; walk further with
page. The page is a plain fetch of 0.8 to 2.6 MB, usually answered in two to four seconds. - Sold and completed listings are not offered: in every measurement eBay answered that filter with a sign-in page, a captcha or a refusal.
- The local pickup filter is not offered: eBay measures its distance from the visitor's own location.
- Search cards in the layout this API reads carry no seller; the Item API returns it with its feedback.
- The item page shows the reviews eBay puts on it; this API does not page through all reviews or the seller's feedback.
Related pages
- Amazon Scraper API - Amazon search results and product pages.
- Walmart Scraper API - Walmart search results and product pages.
- Billing & credits - credit prices and plans.
- Files & artifacts - downloading the no-code result files.