eBay Sold Listings Scraper — Completed Sales & Sold Prices
Pricing
$3.50 / 1,000 sold listings
eBay Sold Listings Scraper — Completed Sales & Sold Prices
Scrape eBay sold listings and completed sale prices by keyword. Export sold date, condition, shipping, seller feedback across 20+ regional sites. Fast curl_cffi scraper — no browser, residential proxy ready.
Pricing
$3.50 / 1,000 sold listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
35
Total users
14
Monthly active users
35 minutes ago
Last modified
Categories
Share
Disclaimer: Unofficial integration for publicly accessible eBay completed (sold) listings. eBay and related names are trademarks of eBay Inc. Not affiliated with, sponsored by, or endorsed by eBay Inc. Provided for informational and research purposes only.
Scrape eBay sold listings and completed sale prices by keyword across 20+ regional marketplaces. Export sold price, sold date, shipping, condition, listing type, and seller feedback as clean JSON — ideal for resale arbitrage, sold comps, market pricing, and inventory valuation.
For detailed inputs, output fields, API examples, MCP prompts, pricing notes, and limitations, see the eBay Sold Listings Scraper API documentation by Crawloop.
Best for: developers and data teams who want raw sold listing rows for Google Sheets, Airtable, databases, webhooks, and custom analytics pipelines.
Crawloop eBay suite — livestream shows, live BIN/auction listings, sold comps, and pricing intelligence.
| Live shows | Active listings | Sold listings | Pricing intelligence |
|---|---|---|---|
| eBay Live Shows Scraper | eBay Active Listings Scraper | eBay Sold Listings Scraper ◄── you are here | eBay Sold Price Intelligence |
| Livestream hosts, tags, viewers, in-show lots | Live BIN/auction asking prices | Completed sales, sold dates | Recommended price, demand, CSV/report |
When to use this Actor
- eBay sold price lookup — real completed sales from the last 1–90 days
- Resale & arbitrage research — sneakers, GPUs, collectibles, vintage, electronics comps
- Competitive pricing datasets — sold prices per keyword, category, and marketplace
- Seller intelligence — filter sellers, track feedback, focus on organic sales
- Multi-market analysis — same keyword on
ebay.com,ebay.de, orebay.co.ukin parallel
When not to use this Actor
- Pricing reports & recommended list price — use eBay Sold Price Intelligence
- Active / live listings — use eBay Active Listings Scraper
- eBay Live livestream shows — use eBay Live Shows Scraper for hosts, viewers, and in-show lots
- Official eBay API replacement — we parse public search pages
Key Features
- Completed sales only — every row includes a sold/end date; sponsored active cards filtered out
- 20+ eBay sites — US, UK, DE, FR, IT, ES, CA, AU, PL, NL, SG, MY, PH, HK with correct currency parsing
- Triple layout fallback —
.s-item,.s-item-card, and.s-cardsearch layouts - Lightweight & fast —
curl_cffiChrome TLS impersonation, no browser automation - Rich sold data — price (string + numeric), shipping, total, bids count, condition ID, auction/BIN/best offer, seller type
- Paste sold search URLs —
startUrlsreads keyword and filters from a browser Sold+Completed link - Advanced filters — date window, price range, condition, listing type, free shipping, seller blocklist
- Deduped batch runs — optional
itemIddedupe across keywords/URLs to avoid double PPE charges - Proxy-ready — Apify Residential Proxies recommended for US/UK; sticky session per search job
- Sold-search fallback — when eBay gates Sold/Completed SRP behind sign-in, the Actor discovers candidate item IDs via public search engines and scrapes sold item pages (
source: "pdp_fallback"). Per-keyword volume is then limited by SERP coverage (not bycountalone); split into several related keywords for larger pulls.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
keywords | Array | — | Search queries (required if no startUrls); up to 3 jobs run at a time |
startUrls | Array | — | Pasted eBay Sold/Completed search URLs (filters + site parsed from each URL) |
daysToScrape | Integer | 30 | Completed sales lookback (1–90 days) |
count | Integer | 100 | Max sold listings per keyword/URL |
dedupeItemIds | Boolean | true | Skip duplicate itemId across jobs in the same run |
ebaySite | String | "ebay.com" | Regional eBay domain (for keyword jobs) |
itemCondition | String | "any" | any, new, used, refurbished |
listingType | String | "any" | any, auction, buy_it_now |
freeShippingOnly | Boolean | false | Free shipping filter (LH_FS on eBay) |
excludeSellers | Array | [] | Seller usernames to skip |
categoryId | String | "0" | eBay category (0 = all) |
minPrice / maxPrice | Number | — | Sold price range |
sortOrder | String | "endedRecently" | Sort sold results |
proxyConfiguration | Object | Residential | Apify Proxy settings |
Input Example
{"keywords": ["nike air max", "rtx 4080"],"daysToScrape": 14,"count": 100,"ebaySite": "ebay.de","itemCondition": "used","listingType": "auction","dedupeItemIds": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE"}}
Input from a sold search URL
{"startUrls": ["https://www.ebay.com/sch/i.html?_nkw=rtx+4080&LH_Sold=1&LH_Complete=1&_udlo=500"],"daysToScrape": 30,"count": 50}
Output Format
Each dataset row = one completed eBay sale.
| Field | Description |
|---|---|
itemId | eBay listing ID |
title | Listing title |
soldPrice / soldPriceValue | Final sold price (string + numeric) |
soldCurrency | Currency code |
totalPrice / totalPriceValue | Sold price + shipping |
endedAt | Sale end time (UTC ISO 8601) |
condition / conditionId | Localized label + normalized code |
listingType | buy_it_now, auction, best_offer_accepted |
bidsCount | Auction bid count when available |
shippingPrice / shippingPriceValue / shippingType | Shipping cost and type |
sellerUsername / sellerFeedbackScore | Seller profile |
keyword | Search query that found this sale |
source | Present as pdp_fallback when the row came from the sold-search fallback |
url | Clean item URL |
Output Example
{"itemId": "377309614758","title": "ASUS TUF Gaming GeForce RTX 3080 OC 10GB GDDR6 - FAULTY","soldPrice": "163.34","soldPriceValue": 163.34,"soldCurrency": "EUR","endedAt": "2026-07-02T12:00:00.000Z","listingType": "auction","bidsCount": 15,"totalPrice": "179.33","totalPriceValue": 179.33,"keyword": "rtx 3080"}
Supported eBay marketplaces
ebay.com · ebay.co.uk · ebay.de · ebay.fr · ebay.it · ebay.es · ebay.ca · ebay.com.au · ebay.at · ebay.ch · ebay.ie · ebay.pl · ebay.nl · ebay.be · ebay.com.sg · ebay.com.my · ebay.ph · ebay.com.hk
Use Cases
| Use Case | What you get |
|---|---|
| Sold comps for resale | Historical sold prices for flips and liquidation buys |
| Market pricing data | 30/60/90-day sold price bands per keyword |
| Category research | Sold data by categoryId and condition |
| Cross-border pricing | Same keyword on .com vs .de with local currency |
| Custom analytics | Feed raw JSON into your own pricing models |
| AI / MCP workflows | Run via Apify API, clients, or MCP and summarize sold comps |
Ready-made task examples
Pre-configured sold-comps inputs for common niches. Open an example, review the input, and run it:
| Niche | Example |
|---|---|
| Resellers / general comps API | Get eBay sold comps via API |
| Sports cards / PSA | Pull sports card sold comps |
| Pokémon TCG | Export Pokémon card sold prices |
| Retro games / CIB | Check video game sold listings |
| LEGO sets & minifigures | Get raw LEGO sold prices |
| Auto / OEM / MPN parts | Check OEM auto parts sold prices |
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/ebay-sold-listings-scraper').call({keywords: ['rtx 4080'],daysToScrape: 30,count: 100,ebaySite: 'ebay.com',proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ['RESIDENTIAL'],apifyProxyCountry: 'US',},});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/ebay-sold-listings-scraper").call(run_input={"keywords": ["nike air max", "rtx 4080"],"daysToScrape": 14,"count": 100,"ebaySite": "ebay.de","itemCondition": "used","dedupeItemIds": True,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "DE",},})items = list(client.dataset(run["defaultDatasetId"]).iterate_items())print(len(items), items[:3])
cURL
curl "https://api.apify.com/v2/acts/crawloop~ebay-sold-listings-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["rtx 4080"],"daysToScrape": 30,"count": 50,"ebaySite": "ebay.com","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/ebay-sold-listings-scraper.
Example prompts:
- "Run eBay Sold Listings Scraper for rtx 4080 on ebay.com, last 30 days, max 100 rows, and return soldPrice, endedAt, and condition as JSON"
- "Scrape eBay sold listings for nike air max on ebay.de and summarize the median sold price"
- "Chain eBay Sold Listings Scraper then eBay Sold Price Intelligence for iPhone 13 Pro and return the recommended listing price"
- "Compare eBay Live Shows Scraper lineup lots with eBay Sold Listings Scraper comps for the same card-break keyword"
Suite next step
For recommended list price, demand level, and CSV/Markdown reports, run eBay Sold Price Intelligence on the same keyword. For live competition, use eBay Active Listings Scraper. For livestream rooms, run eBay Live Shows Scraper.
FAQ
How is this different from Sold Price Intelligence?
This Actor returns raw sold listing rows. eBay Sold Price Intelligence adds recommended price, demand scoring, confidence, and ready-made CSV/Markdown reports.
How is this different from the Active Listings Scraper?
eBay Active Listings Scraper returns live listings with current ask prices. This Actor uses eBay's Sold + Completed filter — every row is a finished transaction.
How is this different from eBay Live Shows Scraper?
eBay Live Shows Scraper scrapes livestream rooms and in-show lots. This Actor scrapes completed search sales.
Do I need proxies?
Residential proxies are recommended for US and UK. European domains often work with datacenter proxies. Defaults to geo-targeted Apify Residential Proxy per marketplace.
Can I scrape multiple keywords at once?
Yes — pass an array in keywords. Jobs share the same filters and run up to 3 at a time (further keywords queue). Duplicate itemIds across keywords are skipped by default (dedupeItemIds).
Why did I get fewer rows than count?
If Sold/Completed search is sign-in gated, the Actor switches to item-page fallback. That path cannot always fill a high count from one query — add related keywords (for example iphone 15 and iphone 15 pro) instead of raising count alone.
Can I paste an eBay search URL?
Yes — use startUrls with a Sold/Completed search link. The Actor reads the keyword, site, and filters from the URL.
How far back can I scrape?
daysToScrape from 1 to 90. Pagination stops after consecutive out-of-range items when sorted by ended recently.
Best Offer accepted prices
For Best Offer Accepted rows, eBay often shows the asking price on the search card — not the private accepted offer amount. listingType / isBestOfferAccepted still mark those sales.
Related Actors
| Actor | Use for |
|---|---|
| eBay Live Shows Scraper | Livestream shows, hosts, in-show lots |
| eBay Active Listings Scraper | Live ask prices, watchers, competition |
| eBay Sold Listings Scraper ◄── you are here | Raw completed sales / sold comps |
| eBay Sold Price Intelligence | Recommended price, demand, CSV/report |