eBay Sold Scraper Returns 'Success' and Zero Results? You're Hitting the Login Wall

If your eBay sold-listings scraper or data provider returns HTTP 200 with zero results, it's probably hitting eBay's sign-in wall. Since July 2026, signed-out sold and completed searches redirect to a login page, so the page parses as 'no items' instead of failing. Detect it with a canary query that always has sales, check the page title or redirect for sign-in, and never store a zero-row result as a price of zero.
Scraper log showing 200 OK with status Success, zero results, and a page title of Sign in or Register

The worst failure is the quiet one. One developer's logs showed a scraping service reporting "status": "Success" with a fully empty result, while "the rendered HTML pane is literally the eBay login form." Another found a sold-data endpoint "returning 0 results for all queries… HTTP 200 with: success: true."

If your price table suddenly has a lot of zeros, or a lot of nothing, this is why.

What's happening

Since about July 2026, eBay redirects signed-out sold and completed searches (LH_Sold=1, LH_Complete=1) to signin.ebay.com. Active searches still work signed out, which is why your scraper "works" for some queries. Details and timeline: eBay now makes you sign in to see sold listings.

A parser expecting a results page gets a login form, finds zero items, and does what you told it to do with zero items: report success.

Why it's dangerous

  • Zero isn't "no sales." If you write median = null or 0 for 8,000 cards overnight, your app shows garbage to users and they blame you.
  • Assistants hide it too. One MCP issue describes a chatbot that "didn't surface the failed tool call and instead searched the web for completed listings," then answered anyway.
  • Proxies don't help. "As soon as I try scraping sold listings, it just redirects to a login page. For non-sold listings it still works."

Detect it

Python canary check: fetch a query that always has many sales and raise an error if it returns fewer than 20 rows, before each batch
A query that always has sales is your smoke detector.

  1. Canary query. Before each batch, fetch something that always sells (a common console or phone). If it returns far fewer rows than usual, stop the batch.
  2. Check the redirect and the title. Treat any redirect to signin.ebay.com, or a page title containing "Sign in," as a hard failure.
  3. Never overwrite good data with empty data. Keep the last good median and mark it stale.
  4. Alert on sudden zero rates. If more than a few percent of queries return zero, something upstream broke.
def safe_update(item, rows):
    if not rows:
        mark_stale(item)          # keep yesterday's price, flag it
        return
    save_median(item, rows)

Or use a source that fails loudly

The design rule we follow in our own API: a block is an error, not an empty result. When eBay doesn't answer cleanly, SaleHistory returns 502 upstream_unavailable instead of a 200 with no items, and failed requests aren't billed. A real zero (an item with no sales in the window) comes back as count: 0, so you can tell the two apart.

curl -i "https://api.soldcomps.io/v1/sold?q=nintendo+64+console" \
  -H "Authorization: Bearer $SALEHISTORY_KEY"
# 200 → real data   ·   502 upstream_unavailable → retry later, keep your last good price

You never pass an eBay login or cookie, so there's no account of yours at risk either. See the error reference.

Frequently asked questions

Why does my eBay scraper return no sold listings?

Since July 2026, eBay sends signed-out visitors to a sign-in page when they search sold or completed listings. A scraper parsing that page finds no items and may report success with zero results.

Do residential proxies fix the eBay sold listings login redirect?

No. Developers report residential proxies still get redirected to the login page for sold searches. The redirect is triggered by being signed out, not only by your IP.

How do I detect a blocked eBay scrape?

Check for a redirect to signin.ebay.com or a sign-in page title, and run a canary query that always has many sales. If the canary returns far fewer rows than normal, treat the whole batch as failed.

Sources

  1. duckwerks-dashboard issue #168: SERP API 'Success' with an empty result on eBay's login form (Jul 2026) (accessed Oct 22, 2026)
  2. eBay-sold-items-documentation issue #4: 0 results with HTTP 200 success (Feb 2026) (accessed Oct 22, 2026)
  3. ebay-mcp issue #201: failed sold tool call hidden by the assistant (Oct 2026) (accessed Oct 22, 2026)
  4. r/scrapingtheweb: Sold listings redirect to a login page (Jul 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.