eBay Sold Items & Auction Scraper — Prices, Bids, Sellers avatar

eBay Sold Items & Auction Scraper — Prices, Bids, Sellers

Under maintenance

Pricing

from $1.50 / 1,000 results

Go to Apify Store
eBay Sold Items & Auction Scraper — Prices, Bids, Sellers

eBay Sold Items & Auction Scraper — Prices, Bids, Sellers

Under maintenance

Extract eBay SOLD/completed listings the official Browse API does not expose: real sold price, sold date, bid count, listing format and seller reputation. Built for resellers and arbitrage. Multi-marketplace (.com/.fr/.de/.co.uk/.it/.es).

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Adrien

Adrien

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

eBay Sold Items & Auction Scraper — Real Sold Prices, Bids, Sold Date, Seller Rep

Get the data eBay's official API won't give you: real sold/completed prices, sold dates, bid counts, listing format, and seller reputation — the exact signals resellers and arbitrage sellers need. Multi-marketplace (US, UK, FR, DE, IT, ES), fast, and resilient to eBay's anti-bot throttling.

The official eBay Browse API only returns active listings. It does not expose what an item actually sold for. This scraper does — that is the whole point.


Why this actor

  • 💰 Real sold prices — what items actually sold for, not asking prices.
  • 📅 Sold date — when each sale closed (eBay shows ~last 90 days of sold history).
  • 🔨 Bid counts — auction demand signal, unavailable from the official API.
  • Seller reputation — username, positive-feedback %, and rating count, so you can weight a sale by who made it.
  • 🏷️ Listing format — auction / Buy It Now / Best Offer / auction+BIN.
  • 🌍 Multi-marketplace.com, .co.uk, .fr, .de, .it, .es with correct currency and date parsing per site (price arbitrage across regions).
  • 🧱 Built for the current eBay markup — many older eBay sold scrapers broke when eBay migrated from li.s-item to .su-card-container. This one targets the new markup and warns loudly if eBay changes it again.
  • 🤖 Agent-friendly — flat, structured JSON output with a clean schema, callable by AI agents.

Use cases

  • Resale & arbitrage — find the true market clearing price before you buy to resell.
  • Sourcing decisions — combine sold price × bids × sell-through to spot demand.
  • Repricing — keep your Buy It Now prices aligned with what's actually selling.
  • Market research — track price trends for a product or category over the sold window.
  • Cross-border arbitrage — compare the same item's sold price on .com vs .fr/.de.

Input

FieldTypeDefaultDescription
searchQueries (required)string[]Keywords to search, one scrape per query.
marketplaceenumwww.ebay.comeBay site: .com / .co.uk / .fr / .de / .it / .es.
proxyCountryCodestringderivedResidential proxy country (e.g. US, FR). Defaults from the marketplace.
maxItemsPerQueryint500Hard cap on unique items per query (cost guardrail).
maxPagesPerQueryint10Max result pages to paginate per query.
itemsPerPageenum240Results per page (60/120/240).
formatenumallall / auction / buy_it_now.
priceMin / priceMaxnumberPrice range filter.
categoryIdstringRestrict to an eBay category id.
sortOrderstringeBay sort code (_sop), e.g. 12 = newly listed.
fetchItemDetailsboolfalseAlso open each item page for specifics/location/qty (slower, costs more).
maxConcurrencyint5Simultaneous fetches (each on a fresh residential IP).
maxRetriesPerPageint8Fresh IPs to try before giving up on a page. eBay throttles per IP, so a blocked page usually succeeds on a later IP. Higher = fewer lost pages, more IPs used.
proxyConfigurationobjectRESIDENTIALResidential proxy is required (see below).

Example input

{
"searchQueries": ["nintendo switch oled", "pokemon booster box"],
"marketplace": "www.ebay.com",
"maxItemsPerQuery": 500,
"maxPagesPerQuery": 10,
"itemsPerPage": 240,
"format": "all",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Output

One record per sold listing. Example:

{
"item_id": "327182193885",
"title": "Nintendo Switch OLED",
"sold_price": 149.27,
"currency": "USD",
"price_is_masked": false,
"sold_date": "2026-06-03",
"condition": "Pre-Owned",
"listing_format": "auction",
"bids": 19,
"shipping": "+$82.00 delivery Jun 17 - Jun 22",
"seller_name": "salesmanmike11",
"seller_feedback_pct": 100.0,
"seller_feedback_count": 334,
"item_url": "https://www.ebay.com/itm/327182193885",
"image_url": "https://i.ebayimg.com/images/g/51oAAeSw7IlqF7u5/s-l500.webp",
"marketplace": "www.ebay.com",
"query": "nintendo switch oled",
"scraped_at": "2026-06-04T12:00:00+00:00"
}

Field reference

FieldTypeNotes
item_idstringeBay item id (used for deduplication).
titlestringListing title.
sold_pricenumber | nullFinal sale price. null when masked (see below).
currencystringUSD / GBP / EUR
price_is_maskedbooltrue when eBay hid the real price (accepted Best Offer); sold_price is then null — we never fabricate a price.
sold_datestring (ISO)YYYY-MM-DD.
conditionstring | nullBrand New / Pre-Owned / Open Box / Parts Only
listing_formatstringauction / buy_it_now / best_offer / auction_bin / unknown.
bidsint | nullAuction bid count; null on pure Buy It Now.
shippingstring | nullShipping/delivery text.
seller_namestring | nullSeller username.
seller_feedback_pctnumber | nulle.g. 99.7.
seller_feedback_countint | nullRating count (K/M expanded, e.g. 12.1K12100).
item_urlstringCanonical item URL, tracking params stripped.
image_urlstring | nullThumbnail.
marketplace, query, scraped_atProvenance.

When fetchItemDetails is enabled, items also include item_specifics (brand/model/…), seller_location, quantity_sold, and returns.


Proxy & reliability (please read)

eBay throttles aggressively by IP: a single IP typically serves only ~1 useful sold-search request before eBay returns blocks that don't clear with waiting. This actor requires Apify Residential proxy with per-request rotation — it uses a fresh IP for every request and retries blocked pages on new IPs. Datacenter or single-IP proxies will fail.

The actor prints cost telemetry at the end of every run (IPs consumed, IP/page ratio, MB transferred, items, estimated $/1000) so you can see exactly what a run costs.


Pricing model

This actor is intended to run pay-per-result: you pay per sold item returned. Residential proxy is the main underlying cost; the per-run telemetry makes that cost transparent.


Running locally (for developers)

# from the actor root
pip install -r requirements.txt
pip install apify-cli # or: npm i -g apify-cli
apify run # uses .actor/input_schema.json prefill as input

Local runs that hit Apify Proxy need an APIFY_TOKEN in your environment (run apify login once). Without residential proxy, expect eBay to block after the first request — that is eBay's throttle, not a bug.

The repo also ships offline tests that validate parsing/orchestration against a captured eBay sample without any network or proxy:

python -m tests_local.test_units # locale, URL building, block classification
python -m tests_local.validate_parser # parser vs. real captured HTML (field coverage)
python -m tests_local.test_main_integration # full pagination/dedup/telemetry flow (mocked Actor)

Notes on data & compliance

This actor collects publicly visible eBay search-results data. It is not affiliated with, endorsed by, or operated by eBay Inc. "eBay" is a trademark of its respective owner. You are responsible for using the output in accordance with eBay's terms and applicable law in your jurisdiction. Use it for legitimate market research, pricing, and resale-sourcing purposes.


Keywords

eBay sold items scraper, eBay sold prices API, eBay completed listings, eBay sold listings data, eBay auction bids scraper, eBay seller feedback scraper, eBay price history, eBay reseller tool, eBay arbitrage, eBay market research, sold comps, eBay product research.