eBay Average Sold Price: Why You Should Use the Median Instead

Use the median. eBay sold data is full of bundles, sealed copies, damaged items and Best Offers shown at list price, and a few of those can move the average by 20% or more while barely moving the median. Remove lots and for-parts sales first, drop prices more than 1.5 times the interquartile range beyond the middle 50%, then take the median of what's left.
Histogram of sold prices with the median marked in red

Resellers already do this in their heads. "If there is 1 outlier i scrap that" is the median-minus-outliers rule, done by eye. Here's the version you can put in code.

Why the average lies

eBay sold data has a long right tail. For almost any search you'll find:

  • Bundles and lots ("console + 12 games")
  • Sealed or graded copies priced like a different product
  • Best Offers shown at list price, which inflate the number (details)
  • For-parts sales dragging the low end down

Histogram of sold prices with most sales between $80 and $160, a few at $400 and $900 shown in gray, a median line at $118 and a mean line at $149
Illustrative: five extreme sales move the mean $31. The median barely notices.

The mean adds everything up, so those few sales move it a lot. The median is just the middle sale, so they barely matter.

The rule we use

  1. Drop known junk: lots, for-parts, box-only listings, and Best Offers whose real price is hidden.
  2. Drop statistical outliers with the IQR rule. Q1 is the 25th percentile, Q3 the 75th, IQR = Q3 − Q1. Drop anything below Q1 − 1.5×IQR or above Q3 + 1.5×IQR.
  3. Take the median of what's left.
  4. Report the count alongside it. Ten clean sales is a price; three is a hint.

This is exactly what the stats block in a SaleHistory response does. You also get the raw items if you'd rather apply your own rules.

In Python

import statistics

def fair_price(prices):
    s = sorted(prices)
    if len(s) < 4:
        return statistics.median(s) if s else None
    q1, _, q3 = statistics.quantiles(s, n=4)
    iqr = q3 - q1
    kept = [p for p in s if q1 - 1.5 * iqr <= p <= q3 + 1.5 * iqr]
    return statistics.median(kept), len(kept)

prices = [96, 104, 110, 115, 118.5, 121, 124, 130, 139, 145, 389.99, 899]
print(fair_price(prices))   # (119.75, 10)
print(statistics.mean(prices))  # 207.6 — the average is wildly off

In a spreadsheet

If your sold prices are in B2:B50:

Q1:      =QUARTILE(B2:B50, 1)
Q3:      =QUARTILE(B2:B50, 3)
Fair:    =MEDIAN(FILTER(B2:B50, B2:B50>=Q1-1.5*(Q3-Q1), B2:B50<=Q3+1.5*(Q3-Q1)))

Or skip this entirely with our =SOLDMEDIAN() formula.

When the average is fine

If you're estimating total revenue from many items, like a whole estate, the average of clean prices is fine, since the extremes even out across hundreds of sales. For pricing one item, use the median.

Seeing a price that's way off? It may not be a real sale at all: cancelled sales, revised prices and shill bids. And if eBay's own suggestion disagrees with your median, here's why.

Frequently asked questions

Why is the median better than the average for pricing?

The median is the middle sale, so a few extreme prices barely move it. The average adds every price together, so one $900 sealed bundle can pull a $118 item's average up by tens of dollars.

What is the IQR rule for outliers?

Find the 25th percentile (Q1) and 75th percentile (Q3). The interquartile range is Q3 minus Q1. Anything below Q1 minus 1.5 times the IQR, or above Q3 plus 1.5 times the IQR, is treated as an outlier.

How many sales do I need for a reliable median?

At least 10 clean sales is a good rule of thumb. With fewer than 5, report the price as a range rather than a single number.

Sources

  1. NIST/SEMATECH e-Handbook of Statistical Methods: Measures of location (accessed Oct 22, 2026)
  2. NIST/SEMATECH e-Handbook: Detection of outliers (accessed Oct 22, 2026)
  3. r/reselling: Anyone else spending way too long pricing items? (accessed Oct 22, 2026)

SaleHistory sells an eBay sold-listings API, so we have a commercial interest in this topic. We link primary sources so you can check our work. Spotted something out of date? Email hello@soldcomps.io.