eBay Sold Listings Search
Pricing
from $4.00 / 1,000 results
eBay Sold Listings Search
Get confirmed eBay sold prices — not asking prices. Search by keyword across 8 marketplaces, filter by date range, and export clean structured data for comps, resale pricing, and market research.
Pricing
from $4.00 / 1,000 results
Rating
3.9
(12)
Developer
Caffein Dev
Maintained by CommunityActor stats
40
Bookmarked
2K
Total users
409
Monthly active users
6.8 days
Issues response
4 hours ago
Last modified
Categories
Share
eBay Sold Listings API (Real Sold Items Only)
Fetch real sold listings from eBay — actual completed sales with final prices. This Actor returns sold items only, not active listings and not completed-but-unsold items.
Built for price analysis, resale tools, market research, and pricing intelligence.
🔎 What This API Provides
This Apify Actor extracts eBay sold listings and returns structured, machine-readable data for each sale:
- Final sold price
- Currency
- Sale end date
- Listing title
- Item URL
- Item ID
✅ Every result represents an item that actually sold ❌ No active listings ❌ No unsold “completed” listings ❌ No estimated or AI-generated prices
⚙️ Input
{"keywords": ["rtx 4080", "rtx 4090"],"categoryId": "58058", // Computers/Tablets & Networking"subcategoryId": "", // optional, overrides categoryId when set"daysToScrape": 30,"count": 100,"ebaySite": "ebay.com","sortOrder": "endedRecently","minPrice": 100,"maxPrice": 500,"itemLocation": "default","itemCondition": "any"}
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string[] | required | 1–6 search terms. Each runs as a separate search with the same filters. Results are tagged with keyword for easy filtering. |
keyword | string | — | Deprecated. Use keywords array instead. Accepted for backward compatibility. |
search | string | — | Deprecated. Alias for keyword. Use keywords array instead. Accepted for backward compatibility with callers that send search. Backslash-escaped quotes (\") in the value are unescaped before the search runs. |
daysToScrape | number | 30 | Days back to scrape (1–90) |
count | number | 100 | Max results per keyword |
categoryId | string | "0" | Main category filter. Use "0" for All Categories. |
subcategoryId | string | "" | Optional subcategory filter. If set, overrides categoryId (maps to _sacat). Displayed as Category -> Subcategory in the input UI. |
ebaySite | string | ebay.com | eBay marketplace (see supported sites) |
sortOrder | string | endedRecently | endedRecently · timeNewlyListed · pricePlusPostageLowest · pricePlusPostageHighest · distanceNearest |
minPrice | number | — | Minimum sold price filter |
maxPrice | number | — | Maximum sold price filter |
itemLocation | string | default | default · domestic · worldwide |
itemCondition | string | any | any · new · used |
includeCompletedListings | boolean | true | Include eBay's Completed Listings filter. Enables accurate Best Offer Accepted detection (listingType, isBestOfferAccepted). Set to false for strictly sold-only results — BOA items will show as buy_it_now. See Completed Listings & Best Offer Accepted Detection. |
Supported eBay Sites
ebay.com · ebay.co.uk · ebay.de · ebay.fr · ebay.it · ebay.es · ebay.ca · ebay.com.au
📤 Output
{"itemId": "306671421088","url": "https://www.ebay.com/itm/306671421088","title": "Apple iPhone 13 Pro Max - 128GB - Unlocked - Cracked Back","condition": "Pre-Owned","conditionId": 3000,"endedAt": "2025-12-22T05:00:00.000Z","soldPrice": "215","soldCurrency": "USD","listingType": "buy_it_now","isBestOfferAccepted": false,"buyingFormat": "buyItNow","bidCount": null,"shippingPrice": "6.20","shippingCurrency": "USD","shippingType": "paid","totalPrice": "221.20","thumbnailUrl": "https://i.ebayimg.com/thumbs/images/g/abc123/s-l500.jpg","fullResThumbnailUrl": "https://i.ebayimg.com/images/g/abc123/s-l1600.jpg","sellerUsername": "example_seller","sellerPositivePercent": 99.2,"sellerFeedbackScore": 1842,"sellerType": null,"scrapedAt": "2026-01-19T21:53:17.613Z"}
| Field | Description |
|---|---|
itemId | eBay item ID |
url | Full listing URL |
title | Listing title |
condition | Localized eBay condition label as shown on the search card (e.g. "Pre-Owned" on ebay.com, "Gebraucht" on ebay.de, "Neuf" on ebay.fr, "Nuovo" on ebay.it, "Usado" on ebay.es). null when eBay didn't display one. This is the authoritative field — what the buyer actually saw. |
conditionId | Best-effort numeric eBay condition ID resolved from condition via a static lookup table. null when condition is null or the label isn't in the lookup table (eBay can introduce new or locale-specific labels at any time — always check condition first). Common IDs: 1000 New · 1500 Open box / New Other · 1750 New with defects · 2000–2030 Refurbished tiers (Certified / Excellent / Very Good / Good) · 2500 Seller Refurbished · 2750 Like New · 3000 Used / Pre-Owned · 7000 For parts. Full reference |
categoryId | Category id used for the search (_sacat) |
category | Selected category label from the search page dropdown |
endedAt | Sale completion timestamp (ISO 8601) |
soldPrice | Final transaction price. Note: when isBestOfferAccepted is true, this is the asking price — the actual accepted offer is not disclosed by eBay. |
soldCurrency | Currency code (e.g. USD, GBP) |
listingType | How the item sold: "best_offer_accepted" · "buy_it_now" · "auction" · null (undetermined) |
isBestOfferAccepted | true if sold via an accepted Best Offer. soldPrice is the asking price, not the actual transaction price. |
buyingFormat | Richer buying-format enum: "auction" (bids only) · "buyItNow" (fixed price or best-offer) · "auctionWithBIN" (auction with a Buy It Now option) · null (undetermined) |
bidCount | Number of bids received. null for fixed-price listings or when not shown. |
shippingPrice | Shipping cost (null if not disclosed) |
shippingCurrency | Currency of shipping price |
shippingType | free · paid · pickup · unknown |
totalPrice | soldPrice + shippingPrice when currencies match, otherwise equals soldPrice |
thumbnailUrl | 500px product image URL from i.ebayimg.com. null when only a promo or logo image is available on the search card. |
fullResThumbnailUrl | High-res (1600px) product image URL, derived from thumbnailUrl. null when no product image is available. Best-effort — may 404 for listings where eBay only hosts a low-res image. |
sellerUsername | Seller username (best-effort) |
sellerPositivePercent | Positive feedback % (best-effort) |
sellerFeedbackScore | Feedback count (best-effort) |
sellerType | "private" or "business" on EU sites (ebay.de, .fr, .it, .es). null on non-EU sites or when the label is unrecognised. |
scrapedAt | Scrape timestamp (ISO 8601) |
🏷️ Completed Listings & Best Offer Accepted Detection
The includeCompletedListings input (default true) controls whether eBay's Completed Listings filter (LH_Complete=1) is sent alongside the always-present Sold filter (LH_Sold=1).
All results are genuinely sold items regardless of this setting — the LH_Sold=1 filter is always applied, so the actor never returns active or completed-but-unsold listings. This flag does not affect the sold/unsold guarantee; it only affects how accurately the actor can classify how an item sold.
Why the flag exists — an eBay HTML limitation
This is a limitation of eBay's own HTML, not a choice the actor makes. eBay only renders the signals needed to identify a Best Offer Accepted sale when the Completed Listings filter is active:
| Signal on the search card | includeCompletedListings: true (LH_Complete=1) | includeCompletedListings: false (LH_Complete=0) |
|---|---|---|
| Best-offer text | "Best offer accepted" | "or Best Offer" (or nothing) |
| Price CSS class | strikethrough | bold |
| BOA detectable? | ✅ Yes | ❌ No |
When LH_Complete=0, eBay strips the "Best offer accepted" text and the strikethrough price styling from the cards. Without those signals, a Best Offer Accepted sale is indistinguishable in the HTML from an ordinary Buy It Now sale — the actor cannot accurately detect Best Offer Accepted status for each listing.
What this means for the output
includeCompletedListings: true(default): Best Offer Accepted sales are detected.listingTypecan be"best_offer_accepted"andisBestOfferAcceptedcan betrue. (Note: even here, eBay does not disclose the actual accepted offer amount —soldPricereflects the asking price for BOA items.)includeCompletedListings: false: BOA sales are reported aslistingType: "buy_it_now"withisBestOfferAccepted: false. You still get every sold item and its sold price — you just lose the ability to know whether a given sale went through as an accepted Best Offer.
Set includeCompletedListings: false only if you want the search filter to match eBay's plain "Sold" view and don't rely on Best Offer Accepted classification.
👥 Who This API Is For
- Developers building pricing APIs or resale tools
- Data analysts and researchers
- Professional resellers and flippers
- SaaS founders validating secondary market prices
📞 Support & Feedback
For issues, questions, or feature requests, please contact the Actor author via Apify.
Category IDs & Subcategory IDs
Pass a category ID as categoryId (main categories) or subcategoryId (subcategories) in your input. When subcategoryId is set it overrides categoryId — the output always reflects the effective category used.
🔍 Browse & search all category IDs and subcategory IDs →