Pricing Thousands of Items Daily From eBay Sold Data: The Real Cost (and How to Cut It)

Refreshing 8,000 items in 5 versions every day takes 40,000 sold-price lookups a day, about 1.2 million a month. Most apps don't need that. Refresh items when a user views them, refresh the most popular 2% daily and the rest every few weeks, and cache results for a day. That typically cuts lookups to a few thousand a day, roughly 80,000 a month, while keeping the prices users actually see fresh.
Card comparing three refresh strategies for 8,000 cards in 5 grades: 40,000, about 6,000, and about 2,700 lookups a day, with a cost per lookup of $0.0016

A developer building a card scanner laid out the math in August 2026: "I need to fetch daily prices of 8000 cards on eBay with different variations such as Raw, PSA 8 9 10 .. which makes it 40000 request." Another wanted sold listings "for approximately 15k different products over the last 90 days."

This is the typical scale for a card, collectibles or catalog app. Here's what it costs, and how to need far less of it.

The naive plan: refresh everything daily

8,000 cards × 5 versions × 1 refresh a day = 40,000 lookups a day, about 1.2 million a month.

Most of those lookups re-buy an answer you already had. A card that sold 4 times in 90 days doesn't have a new price every morning.

Table comparing three refresh strategies: refreshing everything daily at 40,000 lookups a day, refreshing on view at about 6,000, and the top 2% daily with the rest every 3 weeks at about 2,700
Illustrative. Same freshness where users look, a fraction of the lookups.

Strategy 1: refresh when someone looks

Store each price with a timestamp. When a user opens a card, refresh it only if the stored price is older than 24 hours. Nobody looks at most of a catalog on a given day, so lookups follow real usage instead of catalog size. Typical result: 5,000–8,000 a day for the same 40,000 card-versions.

Strategy 2: tier by popularity

  • Hot (top ~2% by views or sales volume): refresh daily.
  • Everything else: every 3 weeks. Slow items rarely change, and Strategy 1 still refreshes anything a user actually opens.

40,000 card-versions with 2% hot: 800 daily + 39,200 ÷ 21 ≈ 1,870, so about 2,700 a day, roughly 80,000 a month.

Strategy 3: skip versions nobody sells

If a card has had zero PSA 8 sales in 90 days, there's nothing to refresh. Re-check empty versions weekly at most. For many sets this removes a third of all lookups.

What it costs

With one request per card-version per refresh, on SaleHistory pricing:

Plan of attackLookups / monthCost / month
Refresh everything daily~1,200,000Custom volume pricing
Refresh on view~180,000Scale ($79) + credits ≈ $379
Tiered refresh~80,000Scale ($79) + credits ≈ $129

Scale includes 60,000 requests; extra requests use prepaid credits at $2.50 per 1,000. At the tiered volume that's about $0.0016 per lookup, and the same strategies work whatever data source you use. Pricing.

Scraping it yourself at this scale

Builders who tried report the same costs: residential proxies at "at least 2€/GB" with around "50% success rates," CAPTCHAs, layout changes, and, since mid-2026, needing signed-in sessions that risk the account you sell on. And when it fails, it often fails quietly. Read why empty results are the dangerous failure.

Implementation sketch

from datetime import datetime, timedelta

TTL = {"hot": timedelta(days=1), "rest": timedelta(days=21)}

def price(card_version):
    row = db.get(card_version)
    if row and datetime.utcnow() - row.fetched_at < TTL[row.tier]:
        return row                      # cached, no request
    data = sold(card_version.query)
    if data["count"] == 0 and row:      # a real "no sales": keep last price, mark it old
        return db.touch(card_version)
    return db.save(card_version, data["stats"], fetched_at=datetime.utcnow())

One query per version is still the rule. See how to comp trading cards for the query patterns.

Frequently asked questions

How many API requests do I need to price a card catalog?

One request per version of each card per refresh. 8,000 cards in Raw, PSA 8, PSA 9 and PSA 10 plus one more variant is 40,000 requests per full refresh. Refreshing on view and tiering by popularity usually cuts that by 85 to 95%.

How often should eBay sold prices be refreshed?

Daily for items users look at often or that move fast, every few weeks for the long tail (and whenever a user opens one). Sold prices for slow items barely change day to day, so refreshing them daily mostly re-buys the same answer.

Is scraping eBay cheaper than an API at scale?

Not usually, once you count residential proxies, failed requests, engineering time and breakage. Since mid-2026, scraping sold listings also needs signed-in eBay sessions, which risks account bans.

Sources

  1. r/scrapingtheweb: Daily prices of 8,000 cards across Raw, PSA 8, 9, 10 = 40,000 requests (Aug 2026) (accessed Oct 22, 2026)
  2. r/webscraping: Sold listings for 15k products over 90 days (Jul 2025) (accessed Oct 22, 2026)
  3. PokemonCollector issue #412: free tier doesn't cover a weekly refresh (Oct 2026) (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.