CompSniper
Transparent and reproducible

How CompSniper turns sold listings into a clean price range.

CompSniper collects public listing data from eBay, Poshmark, and Mercari, keeps each marketplace's native evidence explicit, then calculates the median and p25 to p75 range for sold results in deterministic code. Results are bounded samples, not appraisals or guarantees of the next selling price.

Published and reviewed by Marc Andrew, Owner of CompSniper. Last updated September 4, 2026.

Collection process

From one query to a reviewable sample

01

Define the search

A request starts with a product keyword and one marketplace endpoint. Native marketplace, condition, price, category, brand, status, and sort filters narrow the sample. eBay also supports regional sites, categories, facets, seller type, dates, formats, and exactMatch.

02

Collect completed sales

CompSniper retrieves public listing information from 8 regional eBay sites, Poshmark US, or Mercari US. Native page ceilings are 240 eBay rows, 48 Poshmark rows, and 100 Mercari rows.

03

Parse consistent fields

Each endpoint keeps stable native fields for its marketplace. Missing or unrecognized values remain null instead of being invented. Mercari public search does not expose a reliable sold timestamp, so CompSniper does not manufacture one.

04

Remove irrelevant matches

For eBay searches with relevance cleaning enabled, deterministic query-aware checks first remove explicit pricing mismatches. A single bounded classifier then reviews remaining titles for accessories, parts, wrong models, and mismatched variants. Poshmark and Mercari currently return native public matches without this eBay-specific stage.

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 first applies deterministic checks for explicit mismatches such as unrequested lots, bundles, damaged units, wrong capacities, grades, and catalog numbers. Explicit query intent always takes priority. One bounded classifier then handles less explicit product and model mismatches. If that classifier is unavailable, malformed, or would remove the entire remaining sample, the semantic stage fails open without undoing proven deterministic exclusions.

The optional exactMatch=true setting runs even earlier. It removes every card after eBay's explicit Results matching fewer words notice. It defaults to false and does not replace relevance cleaning because eBay's earlier section can still contain accessories or imperfect titles.

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

  • Unrequested lots, multipacks, bundles, and selection listings
  • Parts, repair, broken, modified, and non-original units
  • Empty boxes and standalone accessories
  • Explicitly conflicting years, capacities, sizes, grades, catalog numbers, or models
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` and the visible listing price may be above what the buyer paid. Add `bestOfferPrice=true` to get `acceptedOfferPrice`, the real accepted amount, on US-dollar sales (77% found in a 177-sale test). Where it is not found, exclude these rows when exact transaction-level pricing is required.

Freshness

eBay commonly exposes roughly 90 days of sold history, while Poshmark and Mercari expose different public windows. Sold timestamps are returned only when the marketplace exposes reliable evidence.

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.