eBay Scraper — Listings, Prices & Sold Items API avatar

eBay Scraper — Listings, Prices & Sold Items API

Pricing

from $1.50 / 1,000 results

Go to Apify Store
eBay Scraper — Listings, Prices & Sold Items API

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

Logiover

Maintained by Community

Actor 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:

FieldTypeDescription
itemIdstringeBay item id (from the /itm/ URL)
titlestringListing title
pricenumberPrice as a real number (lower bound if a range)
priceMin / priceMaxnumberRange bounds when the listing shows a price range
currencystringISO currency code (USD, GBP, EUR, …)
priceTextstringOriginal price text as shown on eBay
shippingCostnumberShipping cost as a number (0 = free shipping)
shippingTextstringOriginal shipping text
conditionstringItem condition (New, Used, Refurbished, …)
listingTypestringBuy It Now or Auction
buyingFormatstringHuman-readable format — Buy It Now, Buy It Now or Best Offer or Auction (always populated)
bidsCountnumberNumber of bids (auctions only)
timeLeftstringTime remaining for auctions
bestOfferbooleanWhether the listing accepts Best Offer
location / itemLocationstringItem location / country of origin (populated on the majority of cards)
productRatingnumberStar rating (when shown)
reviewsCountnumberNumber of product reviews
soldCountnumberUnits sold (when shown)
watchersnumberWatcher count (when shown)
topRatedbooleanTop Rated Seller badge
imageUrlstringPrimary thumbnail image URL
itemUrlstringClean item URL (tracking params stripped)
_modestringWhich mode produced the row
scrapedAtstringISO 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": true and each of these rows also gains sellerName, sellerPositivePercent, sellerFeedbackCount, a precise itemLocation, brand, itemSpecifics, returnsAccepted, quantityAvailable and quantitySold.


How to use

Option A — Search by keyword (most common)

  1. Set Mode to Search by keyword.
  2. Type a Search keyword (e.g. nike air max).
  3. Optionally pick a Condition, Buying format, Sort, price range or eBay site.
  4. 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 full categoryUrl.
  • Seller items: set seller to an eBay username.
  • Item detail: set mode to productDetail and give an itemUrl, a list of itemUrls, or a list of itemIds.
{ "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

ParameterTypeDefaultDescription
modeselectsearchsearch, category, sold, sellerItems, or productDetail
querystringlaptopKeyword for search/sold (also filters category/seller)
categoryIdstringNumeric eBay category id (category mode)
categoryUrlstringPaste an eBay category/search URL (overrides categoryId)
sellerstringeBay seller username (sellerItems mode)
itemUrl / itemUrlsstring / arrayItem URL(s) for productDetail
itemIdsarrayItem id(s) for productDetail
conditionselectAnyNew, Used, Refurbished, For parts, …
buyingFormatselectAnyBuy It Now, Auction, Best Offer
sortselectBest MatchEnding soonest, newly listed, price + shipping, …
freeShippingbooleanfalseOnly free-shipping listings
priceMin / priceMaxstringPrice range bounds
domainselectebay.comeBay marketplace (16 sites)
maxResultsinteger200Row cap (drives pagination)
enrichDetailsbooleanfalseAlso open each result's item page to add seller, precise location, item specifics, brand, returns & quantity (slower)
proxyobjectApify ProxyProxy 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 sold mode 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 query sharpens the result set and speeds up runs.
  • Combine filters (condition + price range + buying format) to cut noise and stay under maxResults with only relevant items.
  • Pick the right domain. Scrape ebay.co.uk for GBP pricing, ebay.de for the German market, etc. Prices are localized per site.
  • Raise maxResults for volume. 240 items land per page; set 500–2000 to sweep a whole niche.
  • Sort by Price + shipping: lowest to find deals, or Newly listed to catch fresh inventory first.
  • Paste a browser URL into categoryUrl if 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 enrichDetails for seller data. Search cards omit the seller; enable enrichment (with a smaller maxResults) to fill sellerName, 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 ApifyClient
client = 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.


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.


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