CompSniper
Transparent and reproducible

How CompSniper turns sold listings into a clean price range.

CompSniper collects public completed-sale data from supported eBay marketplaces, normalizes each listing, optionally removes likely accessories and wrong-product matches, then calculates the median and p25 to p75 range in deterministic code. Results are evidence from a bounded sample, not an appraisal or a guarantee of the price the next item will achieve.

Published and reviewed by Marc Andrew, Owner of CompSniper. Last updated August 31, 2026.

Collection process

From one query to a reviewable sample

01

Define the search

A request starts with a product keyword or an eBay category. Marketplace, condition, price, date, category, format, and aspect filters can narrow the sample before it is used for pricing.

02

Collect completed sales

CompSniper retrieves public sold and completed listing information from one of 8 supported eBay marketplaces. The response returns up to 240 cleaned listings and roughly 90 days of available history. The upstream page can contain slightly more priced rows before the final response cap.

03

Parse consistent fields

Each listing is normalized into stable fields including sold price, currency, shipping, condition, sold date, seller, item ID, and URL. Missing fields remain null instead of being invented.

04

Remove irrelevant matches

When relevance cleaning is enabled, a batched classifier reviews listing titles and removes likely accessories, parts, broken units, empty boxes, wrong models, and mismatched variants. The unfiltered sample remains available with relevance=false.

05

Calculate price intelligence

Deterministic application code sorts usable sold prices and calculates the median, mean, minimum, maximum, p25, p75, sample size, modal currency, and average known shipping. A language model never calculates these statistics.

Relevance cleaning

What gets removed, and what does not

Keyword searches can mix the desired product with cases, chargers, replacement parts, empty packaging, broken units, and nearby models. Those mismatches can materially change a median, especially in smaller samples.

CompSniper classifies listing titles in one bounded batch. It keeps likely matches and drops likely noise before statistics are calculated. If classification is unavailable, malformed, or would remove the entire sample, the system fails open and returns the unfiltered results rather than pretending that no market exists.

Usually retained

  • The requested product
  • Matching storage, size, or variant
  • Normal used and new conditions
  • Legitimate product bundles when the query asks for them

Usually removed

  • Cases, covers, chargers, and cables
  • Parts, repair, and broken units
  • Empty boxes and manuals
  • Wrong models or mismatched variants
Method applied

See the 100-product production study

The predeclared study applies this collection and calculation method to 100 products and publishes the aggregate CSV, category analysis, outliers, code, and limitations.

Read the study
Price calculations

Exactly what each summary number means

FieldMethodUse
countListings with a positive, parseable sold priceJudge whether the sample is deep enough for your decision
median50th percentile of sorted sold pricesCentral price that is less sensitive to extremes than the mean
p25 / p7525th and 75th percentiles with linear interpolationA realistic middle-half price range
meanArithmetic average of sold pricesA secondary comparison that remains sensitive to extremes
min / maxLowest and highest usable sold pricesInspect spread and possible remaining outliers
avgShippingAverage known shipping, with free shipping counted as zeroEvaluate delivery cost separately from sold price

The median and percentiles use `soldPrice` and exclude shipping. Shipping is reported separately. `totalPrice` is available on each listing when both sold price and shipping are known.

Best Offer prices

When eBay marks an accepted Best Offer, `bestOfferAccepted` is `true`. eBay does not disclose the actual accepted amount, so the visible listing price may not be the transaction price. Exclude these rows when exact transaction-level pricing is required.

Freshness and caching

Supported marketplaces commonly expose roughly 90 days of sold history. Identical query and filter combinations can be served from CompSniper's cache for up to 24 hours. Every item includes `scrapedAt`, and each sale includes `endedAt` when available.

Marketplace and currency

Each request targets one marketplace. Compare currencies and regional markets separately. The response reports the modal currency of the usable sample, but callers should still inspect item-level currencies before combining datasets.

Sampling and interpretation

One page is a bounded sample, not the entire market. There is no universal minimum sample size. Review count, condition, variants, date window, spread, and individual listings before making a high-value purchasing or appraisal decision.

Verification

How to audit a CompSniper result

  1. 1. Check the query and filters. Confirm model, storage, condition, category, marketplace, and date constraints match the decision you are making.
  2. 2. Review raw and cleaned evidence. Compare `rawSampleCount` and `rawMedian` with the cleaned items and summary. Use `relevance=false` to retrieve every upstream match.
  3. 3. Inspect the listings. Open representative low, middle, and high results. Check titles, conditions, shipping, dates, and Best Offer flags.
  4. 4. Repeat when the decision is material. Use another page, date window, marketplace, or query variant instead of treating one search as a formal appraisal.

Review the evidence yourself

Start with 100 requests each month. Keep relevance cleaning on, compare it with the raw feed, and inspect the listings behind every summary.