🛒 eBay Sold Comps Scraper avatar

🛒 eBay Sold Comps Scraper

Pricing

from $3.50 / 1,000 sold listing or comps summary records

Go to Apify Store
🛒 eBay Sold Comps Scraper

🛒 eBay Sold Comps Scraper

Scrape eBay sold listings (90-day window) for any query. Sold price, condition, shipping, sold date, seller info. Plus computed comps: median, P10/P90, byVariant grouped by storage/color/condition, sell-through rate, velocity. Export, run via API, schedule, or integrate with other tools.

Pricing

from $3.50 / 1,000 sold listing or comps summary records

Rating

0.0

(0)

Developer

Skootle

Skootle

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

6

Monthly active users

22 days ago

Last modified

Share

eBay Sold Comps hero

TL;DR

Scrape eBay's last 90 days of sold listings for any search query. Returns clean rows with sold price (numeric USD + raw), condition enum, shipping cost, sold date in ISO 8601, seller info, and computed comps: median, P10, P90, sample-size confidence, broken down by condition tier and by variant tuple (storage, color, model). Includes sell-through rate and velocity (sold/day). For resellers, collectibles valuation, AI shopping agents, insurance appraisers.


Try it on a small dataset, then let us know what you think in a review.


What does eBay Sold Comps Scraper do?

eBay Sold Comps Scraper pulls every sold listing from eBay's last-90-days window for any search query and computes ready-to-use price comps. The dataset has two record types:

  1. sold_listing, one record per individual sold item with sold price, condition enum (NEW | LIKE_NEW | PRE_OWNED | GOOD | FOR_PARTS | UNKNOWN), shipping cost, sold date, seller name + feedback %, photos, and item specifics tuple (brand, model, storage, color).

  2. comps_summary, one record per query with medianUsd, p10Usd, p90Usd, sampleSize, confidence enum (high / medium / low), byCondition[] block, byVariant[] block, sellThroughRate, and velocityScorePerDay.

So a "256GB Natural Titanium Pre-Owned" gets its own price band separate from "128GB Black For Parts". Every record carries agentMarkdown for direct LLM consumption.

Why scrape eBay sold comps?

eBay's 90-day sold-listings view is the closest thing to a real comp engine for resellers, collectibles, used electronics, vintage tools, watches, sneakers, anything that resells. The problem: the eBay UI caps you at 50 results per page, the export-to-CSV flow is broken, and there is no public sold-listings API for non-commercial users. Pricing engines and repricing tools run 200+ comp queries a day. Doing that by hand is a non-starter.

This actor kills the manual workflow: opening eBay, filtering to "sold", flipping through pages, copying prices into a sheet, and eyeballing a median. You get a clean median, P10, P90, sell-through rate, and velocity per query, plus a per-variant breakdown so a 256GB Natural Titanium does not get averaged with a 128GB For-Parts unit.

  • Reseller pricing decisions before buying or listing
  • Insurance and estate appraisals with defensible "fair market value" backed by recent comps
  • Collectibles valuation for cards, vintage, watches, art, sneakers
  • Inventory buy-vs-pass decisions using sellThroughRate and velocityScore
  • Repricing engines that adjust active listings against the latest sold-comp band

Who needs this?

  • Resellers pricing buys and listings (clothing, electronics, collectibles, watches, sneakers)
  • Pawnshop and consignment operators appraising buy-side offers
  • Insurance adjusters building defensible "fair market value" claims with sold-comp evidence
  • Estate appraisers valuing inherited collections
  • Inventory acquisition teams using sellThroughRate to filter slow-moving SKUs
  • Repricing tool builders integrating eBay sold-comp data into Vendoo / List Perfectly / Crosslist
  • AI shopping / arbitrage agents comparing sold-comp median against local goodwill / estate / Marketplace finds
  • Trend researchers tracking velocity changes by category over time

How to use eBay Sold Comps Scraper

  1. Open the Input tab on the actor page
  2. Add search queries to searchQueries (one per line)
  3. Optionally filter conditions or set lookbackDays (default 30, max 90)
  4. Set maxItemsPerQuery (default 50)
  5. Optionally enable emitCompsSummary (default true)
  6. Click Start

How much will scraping eBay sold comps cost?

This actor is priced per event:

  • Actor Start: $0.01 once per run
  • eBay record (sold_listing or comps_summary): tiered, charged per record written
Apify plan$/1000 records
FREE$30.00
BRONZE$25.50
SILVER$21.00
GOLD$18.00
PLATINUM$18.00
DIAMOND$16.20

A daily reseller workflow on 10 SKUs returns ~510 records. Roughly $9 per run on GOLD, sub-$0.02 per SKU comp lookup.

Yes, eBay sold listings are publicly accessible to anyone in a browser without logging in. This actor reads the same public sold-search results with proper rate-limiting. It does not log into seller accounts, does not access buyer-side data, and does not bypass any technical access control.

For commercial redistribution of raw datasets, consult eBay's terms and your legal counsel. For internal pricing tools, repricing engines, AI training, and comparison-shopping research, the scraped data is treated like any other public web content.

Examples

Example 1: iPhone 15 Pro 256GB comps

{
"searchQueries": ["iphone 15 pro 256gb"],
"lookbackDays": 30,
"maxItemsPerQuery": 50
}

Example 2: Reseller bulk-SKU repricing feed

{
"searchQueries": [
"rolex submariner 116610",
"omega speedmaster 311",
"iphone 15 pro 256gb",
"macbook pro m3 14"
],
"lookbackDays": 60,
"maxItemsPerQuery": 50
}

Example 3: Pre-owned only (no parts/broken)

{
"searchQueries": ["airpods pro 2"],
"conditions": ["PRE_OWNED", "LIKE_NEW", "NEW"],
"lookbackDays": 30,
"maxItemsPerQuery": 100
}

Example 4: Insurance/appraisal claim

{
"searchQueries": ["lego star wars 75313 imperial star destroyer"],
"lookbackDays": 90,
"maxItemsPerQuery": 50
}

The comps_summary gives you medianUsd ± p10Usd/p90Usd ready for an insurance or estate claim.

Example 5: Velocity-based inventory buy filter

{
"searchQueries": ["pokemon charizard 4/102"],
"lookbackDays": 90,
"maxItemsPerQuery": 100
}

Filter velocityScorePerDay > 1 (sells more than once per day) before buying.

Example 6: Variant pricing for a multi-SKU product

{
"searchQueries": ["nintendo switch oled"],
"lookbackDays": 30,
"maxItemsPerQuery": 200
}

byVariant[] breaks comps by (color, condition) tuple so White-LIKE_NEW vs Neon-PRE_OWNED gets its own price band.

Example 7: Trend research over weeks

{
"searchQueries": ["air jordan 1 chicago"],
"lookbackDays": 90,
"maxItemsPerQuery": 200
}

Run weekly; chart medianUsd and velocityScorePerDay over time.

Example 8: AI arbitrage agent feed

{
"searchQueries": ["sony wh-1000xm5", "dyson v15 detect"],
"lookbackDays": 30,
"maxItemsPerQuery": 50,
"emitCompsSummary": true
}

The agent reads medianUsd - shippingCost - eBayFees and compares against local find prices.

Input parameters

FieldTypeDefaultDescription
searchQueriesstring[]requiredSearch terms
conditionsenum[][]NEW, LIKE_NEW, PRE_OWNED, GOOD, FOR_PARTS
lookbackDaysint30Sold-listing window (max 90)
maxItemsPerQueryint50Per-query cap
emitCompsSummarybooltrueAlso emit one comps_summary per query
useApifyProxybooltrueApify residential proxy. Recommended.

eBay Sold Comps output format

The dataset has two record types. Filter by recordType.

sold_listing

FieldTypeDescription
outputSchemaVersion, recordType, recordIdstringDiscriminated identity
itemId, urlstringeBay item ID + URL
titlestringListing title
soldPriceUsd, soldPriceRawfloat / stringNumeric mirror + raw
shippingCostUsdfloatShipping cost (0 if free)
totalPriceUsdfloatsoldPriceUsd + shippingCostUsd
currencystringCurrency code
conditionenumNEW, LIKE_NEW, PRE_OWNED, GOOD, FOR_PARTS, UNKNOWN
conditionRawstringOriginal eBay condition string
soldDateISO 8601When it sold
sellerName, sellerFeedbackPercent, sellerFeedbackCountstring / float / intSeller info
imageUrlsstring[]Listing photos
itemSpecificsobjectBrand, model, storage, color, etc.
searchQuerystringThe query that found this listing
fieldCompletenessScore, agentMarkdownint / stringQuality + LLM-ready summary

comps_summary

FieldTypeDescription
outputSchemaVersion, recordType, recordIdstringDiscriminated identity (ebay:comps:<query-slug>)
searchQuery, lookbackDaysstring / intQuery context
sampleSizeintNumber of sold listings used
confidenceenumhigh (≥30), medium (10-29), low (<10)
medianUsd, p10Usd, p90Usd, meanUsd, stdDevUsdfloatComps math
byConditionarray[{ condition, count, medianUsd, p10Usd, p90Usd }]
byVariantarray[{ variant: { brand, model, storage, color }, count, medianUsd, p10Usd, p90Usd }]
sellThroughRatefloatActive-listings-that-actually-sold proxy
velocityScorePerDayfloatSold per day in the lookback window
daysToSellMedianfloatMedian days from list to sold
agentMarkdownstringLLM-ready summary

eBay Sold Comps scraper output example (sold_listing)

{
"outputSchemaVersion": "2026-05-08",
"recordType": "sold_listing",
"recordId": "ebay:listing:325918765432",
"itemId": "325918765432",
"url": "https://www.ebay.com/itm/325918765432",
"title": "Apple iPhone 15 Pro 256GB Natural Titanium Unlocked",
"soldPriceUsd": 749,
"shippingCostUsd": 11.35,
"totalPriceUsd": 760.35,
"condition": "PRE_OWNED",
"soldDate": "2026-05-08T19:42:53.000Z",
"sellerName": "techreseller_88",
"sellerFeedbackPercent": 99.4,
"sellerFeedbackCount": 4123,
"itemSpecifics": {
"brand": "Apple",
"model": "iPhone 15 Pro",
"storage": "256 GB",
"color": "Natural Titanium"
},
"fieldCompletenessScore": 100,
"agentMarkdown": "**📦 Apple iPhone 15 Pro 256GB Natural Titanium Unlocked**\n- 💰 $749 + $11.35 ship = $760.35\n- 🏷 PRE_OWNED · sold 2026-05-08\n- 👤 techreseller_88 (99.4% / 4123 reviews)\n- 🔗 https://www.ebay.com/itm/325918765432"
}

eBay Sold Comps scraper output example (comps_summary)

{
"outputSchemaVersion": "2026-05-08",
"recordType": "comps_summary",
"recordId": "ebay:comps:iphone-15-pro-256gb",
"searchQuery": "iphone 15 pro 256gb",
"lookbackDays": 30,
"sampleSize": 47,
"confidence": "high",
"medianUsd": 749,
"p10Usd": 619,
"p90Usd": 879,
"meanUsd": 752.41,
"byCondition": [
{ "condition": "PRE_OWNED", "count": 31, "medianUsd": 729, "p10Usd": 619, "p90Usd": 849 },
{ "condition": "LIKE_NEW", "count": 12, "medianUsd": 829, "p10Usd": 779, "p90Usd": 879 }
],
"byVariant": [
{ "variant": { "storage": "256 GB", "color": "Natural Titanium" }, "count": 18, "medianUsd": 779 }
],
"sellThroughRate": 0.83,
"velocityScorePerDay": 1.6,
"daysToSellMedian": 4.2,
"agentMarkdown": "**🛒 iphone 15 pro 256gb · 30d comps**\n- 📊 n=47 (high confidence)\n- 💰 median $749 · P10 $619 · P90 $879\n- ⚡ 1.6 sold/day · 83% sell-through · median 4.2 days to sell"
}

During the Actor run

Each query pulls eBay's sold-listings results, parses every card for sold price/shipping/condition/sold-date/seller/item-specifics, then computes the per-query comps_summary (median, P10/P90, byCondition, byVariant, sell-through, velocity). One pass, ready-to-use comps.

Three artifacts land in the run's key-value store: OUTPUT (run summary), AGENT_BRIEFING (top queries by sample size + median price), and WATCHLIST_STATE (when watchlistMode: true, the seen item IDs for diff-only runs).

FAQ

How reliable is this for daily production use?

Built for it. Monitored daily, maintenance updates ship within 24-48 hours when eBay changes anything that matters, and the comps math is computed in-actor so your downstream pipeline gets a clean record per query.

How fresh is the data?

eBay updates sold-listings within minutes. This actor reads the live sold-search, so data is at most 1-2 minutes stale.

Can I get older sold listings beyond 90 days?

No, eBay only retains sold-listings data in their public search for 90 days. Platform limit, not an actor gap.

Can I filter by condition?

Yes. conditions: ["PRE_OWNED", "LIKE_NEW"] to skip parts/broken units and brand-new units.

Can I get the byVariant breakdown?

Yes. Set emitCompsSummary: true (default). Each comps_summary record includes a byVariant array grouped by itemSpecifics tuple.

Can I use this with the Apify API?

Yes. POST to https://api.apify.com/v2/acts/skootle~ebay-sold-comps/runs.

Can I integrate with Make / Zapier / n8n / Slack?

Yes. Click Integrations on the actor page.

Why does this actor cost more than free eBay scrapers?

This actor ships normalized condition + variant tuples, computed medianUsd/p10Usd/p90Usd per query, sellThroughRate, velocityScorePerDay, byCondition+byVariant breakdowns, agent-ready markdown summaries. Free scrapers return only raw HTML, you'd write all the comps math yourself.

Your feedback

Hit a bug or want a feature? Open an issue on the Issues tab rather than the reviews page, and we'll fix it fast (typically within 48 hours).

Why choose eBay Sold Comps Scraper

  • Variant-aware comps grouped by itemSpecifics tuple, 256GB Natural Titanium gets its own band, separate from 128GB Black For Parts. This is the killer wedge
  • Buy-vs-pass signal for inventory acquisition, sellThroughRate + velocityScorePerDay per query
  • Comps math built-in, medianUsd, p10Usd, p90Usd, meanUsd, stdDevUsd per query, computed in-actor so you don't have to write it
  • Cross-condition normalization, separate price band per tier so PRE_OWNED comps don't get diluted by NEW
  • Hand-tuned for eBay. Fixes ship within 24-48 hours when eBay changes anything that matters, your daily pipeline stays green
  • Sort and filter without parsing, soldPriceUsd, shippingCostUsd, totalPriceUsd as numbers on every row
  • Condition enum typed for downstream filtering, NEW, LIKE_NEW, PRE_OWNED, GOOD, FOR_PARTS, UNKNOWN
  • Agent-ready, agentMarkdown ready to paste into an LLM context
  • One dataset, two record types, sold_listing + comps_summary discriminated by recordType
  • Schema doesn't break your pipeline, outputSchemaVersion literal on every record
  • Safe to dedupe across re-runs, ebay:listing:<id>, ebay:comps:<query-slug> stable IDs

Other Skootle actors you might want to check

Support and contact

File issues on this actor's page, replies within 48 hours.