eBay Scraper — Listings, Prices & Sold Items API
Pricing
from $1.50 / 1,000 results
eBay Scraper — Listings, Prices & Sold Items API
Scrape eBay listings by keyword, category, seller or item URL. Extract title, price, shipping, condition, seller, bids, sold count, ratings and more — including SOLD/completed listings for price research. No API key, no login.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
eBay Scraper — Listings, Prices, Sold Items & Seller Data (No API Key)
Scrape eBay listings at scale without an API key, a developer account or a login. This eBay Scraper turns eBay's own search and item pages into clean, structured JSON, CSV or Excel data — with real numeric prices, shipping costs, seller feedback, bid counts, sold quantities and SOLD/completed listings for price research. Point it at a keyword, a category, a seller or an item URL and export hundreds to thousands of rows per run.
Whether you are tracking competitor prices, building a resale pricing model, feeding a product catalog, or researching what an item actually sells for, this actor gives you eBay product data that you can drop straight into a spreadsheet, a database or an AI agent.
What does the eBay Scraper do?
The actor talks directly to eBay's public search results HTML (/sch/i.html) and item pages using got-scraping for realistic browser TLS and header fingerprinting, routed through Apify Proxy so eBay serves the same page a normal shopper sees. It parses each listing card with cheerio, extracts 25+ fields, and stores numbers as real numbers and booleans as booleans — no messy "$1,299.00" strings when you want to sort or sum.
Each results page returns up to 240 listing cards (_ipg=240), and the scraper paginates (_pgn) until it hits your maxResults or a built-in time budget, so a single run can yield hundreds to thousands of items. It supports five modes — keyword search, category browse, sold/completed listings, seller inventory, and deep item-detail lookups — and works across 16 eBay marketplaces (US, UK, DE, AU, FR, IT, ES, CA and more). No API key, no OAuth, no cookies.
Who is it for?
- E-commerce sellers & resellers who need live competitor prices and want to know what an item actually sells for before they list.
- Price-monitoring & repricing teams building automated pricing models from real market data.
- Retail & market analysts studying demand, sell-through rates and price distributions across categories.
- Dropshippers & arbitrage hunters sourcing profitable products and validating margins with sold data.
- Developers & data scientists who want an eBay product data API without applying for eBay's official Developer Program keys.
Use cases
- Sold-listings price research — pull completed/SOLD results for a product to see the true selling price range, median and velocity before you buy or list.
- Competitor price tracking — schedule daily runs on a keyword or category and watch how competitors' prices, shipping and stock move over time.
- Product catalog enrichment — scrape item specifics (brand, MPN, UPC, model, color) to fill gaps in your own catalog.
- Seller / store intelligence — export every active listing from a competitor's store to analyze their assortment, price points and conditions.
- Deal & arbitrage sourcing — filter by condition, price range and Buy-It-Now to surface underpriced inventory you can flip.
Why use this eBay Scraper?
- No API key, no login — nothing to register, no rate-limited developer token; just run it.
- 25+ rich fields per item — price, shipping, condition, buying format, bids, time left, sold count, ratings, item location and more, all cleanly typed — plus seller, brand, specifics, returns & quantity via one-flag
enrichDetails. - SOLD/completed listings — the single most valuable eBay data for pricing, and hard to get from the official API.
- Bulk & paginated — up to 240 items/page, thousands of rows per run via real pagination.
- Powerful dropdown filters — condition, buying format, sort, free shipping, price range and marketplace, all as friendly menus.
- Export anywhere — JSON, CSV, Excel, or straight into Google Sheets, a webhook, Zapier, Make or your database. Pay only for the results you keep.
What data can you extract?
For every listing card (search / category / sold / sellerItems modes) the scraper returns:
| Field | Type | Description |
|---|---|---|
itemId | string | eBay item id (from the /itm/ URL) |
title | string | Listing title |
price | number | Price as a real number (lower bound if a range) |
priceMin / priceMax | number | Range bounds when the listing shows a price range |
currency | string | ISO currency code (USD, GBP, EUR, …) |
priceText | string | Original price text as shown on eBay |
shippingCost | number | Shipping cost as a number (0 = free shipping) |
shippingText | string | Original shipping text |
condition | string | Item condition (New, Used, Refurbished, …) |
listingType | string | Buy It Now or Auction |
buyingFormat | string | Human-readable format — Buy It Now, Buy It Now or Best Offer or Auction (always populated) |
bidsCount | number | Number of bids (auctions only) |
timeLeft | string | Time remaining for auctions |
bestOffer | boolean | Whether the listing accepts Best Offer |
location / itemLocation | string | Item location / country of origin (populated on the majority of cards) |
productRating | number | Star rating (when shown) |
reviewsCount | number | Number of product reviews |
soldCount | number | Units sold (when shown) |
watchers | number | Watcher count (when shown) |
topRated | boolean | Top Rated Seller badge |
imageUrl | string | Primary thumbnail image URL |
itemUrl | string | Clean item URL (tracking params stripped) |
_mode | string | Which mode produced the row |
scrapedAt | string | ISO timestamp of the scrape |
Seller & deep fields on list results — eBay's search cards do not carry the seller or full item specifics, so sellerName, sellerPositivePercent, sellerFeedbackCount, brand, itemSpecifics, returnsAccepted, quantityAvailable and quantitySold are filled on list-mode rows only when you enable enrichDetails (see below). Without it, those columns are null on search/category/sold/sellerItems rows (the fast path). They are always present in productDetail mode.
The productDetail mode (and enrichDetails) adds from the item page: sellerName, sellerPositivePercent, sellerFeedbackCount, precise itemLocation, brand, mpn, upc, model, color, type, itemSpecifics (full spec table), quantityAvailable, quantitySold, availability, returnsAccepted, returnsText, and a descriptionSnippet.
Enrich each result with seller & full item details
Set enrichDetails: true to turn every list result into a full record. For each row the actor also opens its eBay item page (with a bounded concurrent worker pool, inside the same time budget) and merges in the seller (sellerName, sellerPositivePercent, sellerFeedbackCount), the precise itemLocation, itemSpecifics, brand, returnsAccepted, quantityAvailable and quantitySold. It is off by default so high-volume runs stay fast — turn it on with a smaller maxResults (e.g. 40–200) when you need seller-level data.
{ "mode": "search", "query": "laptop", "maxResults": 100, "enrichDetails": true }
Example output (search / sold card)
{"_mode": "search","itemId": "364567890123","title": "Dell Latitude 7420 14\" Laptop i7-1185G7 16GB 512GB SSD Win11","price": 329.99,"priceMin": null,"priceMax": null,"currency": "USD","priceText": "$329.99","shippingCost": 0,"shippingText": "Free shipping","condition": "Used","listingType": "Buy It Now","buyingFormat": "Buy It Now or Best Offer","bidsCount": null,"timeLeft": null,"bestOffer": true,"location": "United States","itemLocation": "United States","productRating": 4.5,"reviewsCount": 37,"soldCount": 142,"watchers": 18,"topRated": true,"imageUrl": "https://i.ebayimg.com/images/g/abcAAOSw.../s-l500.jpg","itemUrl": "https://www.ebay.com/itm/364567890123","scrapedAt": "2026-07-23T12:00:00.000Z"}
Add
"enrichDetails": trueand each of these rows also gainssellerName,sellerPositivePercent,sellerFeedbackCount, a preciseitemLocation,brand,itemSpecifics,returnsAccepted,quantityAvailableandquantitySold.
How to use
Option A — Search by keyword (most common)
- Set Mode to Search by keyword.
- Type a Search keyword (e.g.
nike air max). - Optionally pick a Condition, Buying format, Sort, price range or eBay site.
- Set Max results (e.g.
600) and click Start.
{"mode": "search","query": "nike air max","condition": "3000","buyingFormat": "BIN","sort": "15","domain": "ebay.com","maxResults": 600}
Option B — Sold / completed listings (price research)
Set Mode to Sold / completed listings and give a keyword — the actor pulls the completed, sold results so you can analyze the real selling price.
{"mode": "sold","query": "iphone 13 pro 256gb","domain": "ebay.com","maxResults": 500}
Option C — Category, seller or item detail
- Category: paste a numeric
categoryId(e.g.177) or a fullcategoryUrl. - Seller items: set
sellerto an eBay username. - Item detail: set
modetoproductDetailand give anitemUrl, a list ofitemUrls, or a list ofitemIds.
{ "mode": "productDetail", "itemUrls": ["https://www.ebay.com/itm/364567890123"] }
Empty input works too. Run the actor with
{}and it browses the broad default query (laptop) so you always get data back.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | select | search | search, category, sold, sellerItems, or productDetail |
query | string | laptop | Keyword for search/sold (also filters category/seller) |
categoryId | string | – | Numeric eBay category id (category mode) |
categoryUrl | string | – | Paste an eBay category/search URL (overrides categoryId) |
seller | string | – | eBay seller username (sellerItems mode) |
itemUrl / itemUrls | string / array | – | Item URL(s) for productDetail |
itemIds | array | – | Item id(s) for productDetail |
condition | select | Any | New, Used, Refurbished, For parts, … |
buyingFormat | select | Any | Buy It Now, Auction, Best Offer |
sort | select | Best Match | Ending soonest, newly listed, price + shipping, … |
freeShipping | boolean | false | Only free-shipping listings |
priceMin / priceMax | string | – | Price range bounds |
domain | select | ebay.com | eBay marketplace (16 sites) |
maxResults | integer | 200 | Row cap (drives pagination) |
enrichDetails | boolean | false | Also open each result's item page to add seller, precise location, item specifics, brand, returns & quantity (slower) |
proxy | object | Apify Proxy | Proxy configuration (residential, pinned to the site's country) |
Full input example:
{"mode": "search","query": "mechanical keyboard","condition": "1000","buyingFormat": "BIN","sort": "15","freeShipping": true,"priceMin": "30","priceMax": "200","domain": "ebay.com","maxResults": 800,"proxy": { "useApifyProxy": true }}
Output example (productDetail)
{"_mode": "productDetail","itemId": "364567890123","title": "Sony WH-1000XM5 Wireless Noise Cancelling Headphones - Black","price": 279.99,"currency": "USD","condition": "New","brand": "Sony","mpn": "WH1000XM5/B","upc": "027242923058","model": "WH-1000XM5","color": "Black","itemSpecifics": { "Brand": "Sony", "Model": "WH-1000XM5", "Connectivity": "Bluetooth", "Type": "Over-Ear" },"quantityAvailable": 12,"quantitySold": 431,"availability": "InStock","productRating": 4.8,"reviewsCount": 1268,"sellerName": "electronics_hub","sellerFeedbackCount": 152340,"sellerPositivePercent": 99.6,"shippingText": "Free shipping","shippingCost": 0,"returnsText": "30 days returns. Buyer pays return shipping.","itemLocation": "United States","descriptionSnippet": "Industry-leading noise cancellation with two processors...","imageUrl": "https://i.ebayimg.com/images/g/xyzAAOSw.../s-l1600.jpg","itemUrl": "https://www.ebay.com/itm/364567890123","scrapedAt": "2026-07-23T12:00:00.000Z"}
Tips for best results
- Use
soldmode for pricing. Active listings show asking prices; sold listings show what buyers actually paid — far more useful for valuation. - Narrow with a keyword. Even in category or seller modes, adding a
querysharpens the result set and speeds up runs. - Combine filters (condition + price range + buying format) to cut noise and stay under
maxResultswith only relevant items. - Pick the right
domain. Scrapeebay.co.ukfor GBP pricing,ebay.defor the German market, etc. Prices are localized per site. - Raise
maxResultsfor volume. 240 items land per page; set 500–2000 to sweep a whole niche. - Sort by
Price + shipping: lowestto find deals, orNewly listedto catch fresh inventory first. - Paste a browser URL into
categoryUrlif you already filtered on eBay — the actor paginates it verbatim. - Keep Apify Proxy on. eBay blocks datacenter/origin IPs; the actor uses residential IPs pinned to the marketplace's own country (so the site loads in its native language/currency and location parses cleanly) and rotates a fresh IP per request.
- Turn on
enrichDetailsfor seller data. Search cards omit the seller; enable enrichment (with a smallermaxResults) to fillsellerName, feedback %, precise location and item specifics on every row. - Schedule it. For price tracking, run daily and diff the datasets to build a price history.
- De-dupe is built in. The scraper drops repeated promoted items across pages by
itemId, so your dataset stays clean.
Integrations
Send eBay data wherever you work:
- Google Sheets — push results to a sheet for live price dashboards.
- Slack / email — get notified when new matching listings appear.
- Zapier & Make — trigger downstream workflows on every run.
- Webhooks — POST the dataset to your own endpoint the moment a run finishes.
- Schedules — run hourly/daily for automated price monitoring.
- Apify API & SDK — pull the dataset from any app in JSON, CSV or Excel.
API usage
Run the actor and fetch results programmatically. Get your token from the Apify console.
cURL
curl -X POST "https://api.apify.com/v2/acts/logiover~ebay-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"sold","query":"iphone 13 pro","maxResults":500}'
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('logiover/ebay-scraper').call({mode: 'search',query: 'nike air max',maxResults: 600,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("logiover/ebay-scraper").call(run_input={"mode": "sold","query": "iphone 13 pro 256gb","maxResults": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"], item["currency"])
Use with AI agents (MCP)
This actor works as a tool for LLM agents via the Apify MCP server, so an AI assistant can fetch live eBay data on demand. Point your MCP-enabled client (Claude, or any agent framework) at logiover/ebay-scraper and prompt it naturally:
"Find the average sold price of a used PlayStation 5 on eBay this week."
The agent calls the actor in sold mode, reads the numeric price fields, and computes the answer from real market data — no manual scraping.
FAQ
Do I need an eBay API key or developer account?
No. The actor uses eBay's public web pages, so there is nothing to register — no API key, no OAuth token, no login, no cookies.
Can I scrape SOLD / completed listings?
Yes. Set mode to sold and provide a keyword; the actor pulls completed, sold results — ideal for pricing, valuation and sell-through analysis. This is the data most people actually want and it is hard to get from the official eBay API.
How many results can I get per run?
Each results page holds up to 240 listings and the actor paginates until it reaches your maxResults or an internal time budget. Runs of hundreds to a few thousand rows are normal; set maxResults accordingly.
Which eBay marketplaces are supported?
16 sites, including ebay.com (US), ebay.co.uk, ebay.de, ebay.com.au, ebay.fr, ebay.it, ebay.es, ebay.ca, ebay.nl, ebay.ie, ebay.ch, ebay.at, ebay.be, ebay.pl, ebay.com.hk and ebay.com.sg. Pick one with the domain dropdown.
Are prices returned as numbers?
Yes. price, shippingCost, bidsCount, sellerFeedbackCount, sellerPositivePercent, soldCount, productRating and reviewsCount are all real numbers, so you can sort, filter and aggregate without cleaning strings. The original text is kept in priceText/shippingText too.
Why do some fields come back empty?
Not every listing exposes every field — auctions have bidsCount and timeLeft while Buy-It-Now items do not; soldCount, watchers and productRating only appear on some cards. Crucially, eBay's search cards do not include the seller or the full item specifics, so sellerName, sellerPositivePercent, sellerFeedbackCount, brand, itemSpecifics, returnsAccepted and quantity are null on list-mode rows unless you set enrichDetails: true (which fetches each item page to fill them) or use productDetail mode. buyingFormat and item location are populated on the majority of cards out of the box. Empty fields are null, never fabricated.
How do I also get the seller for search / category / sold results?
Set enrichDetails: true. The actor then opens each result's item page and adds sellerName, sellerPositivePercent, sellerFeedbackCount, a precise itemLocation, itemSpecifics, brand, returnsAccepted, quantityAvailable and quantitySold. Keep maxResults modest (40–200) when you enable it, since it fetches one extra page per item.
Can I filter by condition or price?
Yes — condition (New, Used, Refurbished, For parts…), buyingFormat, priceMin/priceMax, freeShipping and sort are all available as dropdowns and combine freely.
Does empty input return anything?
Yes. Run it with {} and it browses the broad default query so you always get a useful dataset to inspect.
What export formats are available?
JSON, CSV, Excel, XML, RSS and JSONL — download from the run's dataset or pull via the Apify API. It also plugs into Google Sheets, webhooks, Zapier and Make.
Does eBay block the scraper?
eBay blocks bare datacenter and origin IPs, which is why the actor runs behind Apify Proxy on residential IPs pinned to the marketplace's own country, and rotates a fresh IP per request. Keep the proxy enabled for reliable results.
How fresh is the data?
Every run scrapes eBay live, so results reflect the marketplace at the moment you run it. For tracking, schedule the actor and compare datasets over time.
How do I get details for one specific product?
Use productDetail mode with the item's URL or id. It returns item specifics (brand, MPN, UPC, model), quantity available/sold, returns policy, seller detail and a description snippet.
Is it legal to scrape eBay?
This actor collects only publicly available information that eBay serves to any visitor — the same listings, prices and seller data you can see in a browser. It does not log in, bypass authentication, or access private or personal data. You are responsible for using the output in line with eBay's Terms of Service, applicable laws (including data-protection rules such as GDPR/CCPA where relevant) and any contractual obligations you may have. Use scraped data responsibly, respect intellectual-property rights, and do not use it to spam or harm sellers or buyers. If you are unsure about a specific use case, seek legal advice.
Related scrapers
- Amazon Product Scraper — prices, reviews and Buy Box data from Amazon.
- Google Shopping Scraper — cross-merchant product prices from Google Shopping.
- AliExpress Scraper — product and seller data from AliExpress.
- Etsy Scraper — handmade & vintage product listings and shop data.
Looking for another marketplace? Browse the full logiover collection of keyless e-commerce and data scrapers on the Apify Store.