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

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 = nullor0for 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

- 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.
- Check the redirect and the title. Treat any redirect to
signin.ebay.com, or a page title containing "Sign in," as a hard failure. - Never overwrite good data with empty data. Keep the last good median and mark it stale.
- 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
- duckwerks-dashboard issue #168: SERP API 'Success' with an empty result on eBay's login form (Jul 2026) (accessed Oct 22, 2026)
- eBay-sold-items-documentation issue #4: 0 results with HTTP 200 success (Feb 2026) (accessed Oct 22, 2026)
- ebay-mcp issue #201: failed sold tool call hidden by the assistant (Oct 2026) (accessed Oct 22, 2026)
- 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.