Blog

How to Access eBay Data Without Scraping

Learn how to access eBay listing data, pricing, and search results through shadow APIs discovered from browsing traffic — no scraping, no official API keys required.

Lewis Tham
April 3, 2026

How to Access eBay Data Without Scraping

eBay is one of the largest online marketplaces in the world, with over 1.7 billion live listings at any given time. Whether you are building a price comparison tool, tracking auction trends, or feeding product data into an AI agent, getting structured data out of eBay is a common need.

The problem? eBay's official API requires developer registration, app tokens, OAuth flows, and strict rate limits. Scraping the HTML is fragile — eBay actively blocks automated requests, rotates page structures, and serves different markup to different user agents. Most scraping setups break within weeks.

There is a better path. When you browse eBay in a real browser, the page makes dozens of internal API calls to fetch listings, search results, pricing data, and seller information. These are the shadow APIs — undocumented endpoints that return structured JSON, the same data the frontend renders. They are stable, fast, and already authenticated through your normal browsing session.

What Are Shadow APIs?

Shadow APIs are the internal HTTP endpoints that web applications call from the browser to load data. They are not documented, not intended for third-party use, and not exposed in any developer portal. But they exist on virtually every modern website.

When you search for "vintage watches" on eBay, your browser does not receive a single monolithic HTML page. Instead, the page shell loads first, then JavaScript fires off requests to internal services:

  • A search endpoint that returns listings as JSON with titles, prices, images, and item IDs
  • A recommendation endpoint that returns suggested categories and related searches
  • A pricing endpoint that returns historical sale data for similar items
  • A seller endpoint that returns seller ratings, location, and shipping policies

These endpoints return clean, structured data. They are the same APIs that eBay's own frontend engineers use. The challenge is finding them, understanding their parameters, and calling them reliably.

What Unbrowse Discovers on eBay

Unbrowse is an API-native agent browser that passively captures all HTTP traffic during a browsing session and reverse-engineers the underlying API routes. When you browse eBay through Unbrowse, it automatically indexes:

  • Search endpoints — the internal API that powers eBay's search results, including filters for category, price range, condition, and sorting
  • Item detail endpoints — structured product data including title, description, price, shipping cost, seller info, and item specifics
  • Pricing and sold history — endpoints that return completed listing prices, which eBay uses to show "sold for" comparisons
  • Seller profile endpoints — seller ratings, feedback scores, and store information
  • Category and navigation endpoints — the taxonomy API that maps categories to item types

Each discovered endpoint is cataloged with its URL template, required parameters, authentication headers, and a description of what it returns. Unbrowse stores these as reusable skills — API routes that any agent can call later without opening a browser.

Getting Started

Install Unbrowse globally:

npm install -g unbrowse

Browse eBay to discover its shadow APIs:

unbrowse browse "https://www.ebay.com/sch/i.html?_nkw=vintage+watches"

Unbrowse opens a real browser session, captures all network traffic, and indexes the API routes it finds. When the session ends, the discovered endpoints are stored locally and published to the Unbrowse marketplace.

To use a discovered endpoint later:

unbrowse resolve "ebay search listings for vintage watches"

This returns the matching API route from cache or the marketplace, along with the parameters needed to call it. Your agent can then execute the route directly:

unbrowse execute "ebay search listings" --params '{"query": "vintage watches", "limit": 50}'

The response is structured JSON — no HTML parsing, no browser overhead, no anti-bot detection to bypass.

Code Example: eBay Price Tracker

Here is a practical example using Unbrowse in a Node.js script to track prices for a specific search query:

import Unbrowse from 'unbrowse';

const unbrowse = new Unbrowse();

// Resolve the eBay search endpoint from discovered skills
const skill = await unbrowse.resolve('ebay search listings');

// Execute with parameters
const results = await unbrowse.execute(skill, {
  query: 'macbook pro m3',
  condition: 'used',
  sort: 'price_asc',
  limit: 20
});

// Process structured results
for (const listing of results.items) {
  console.log(`${listing.title} — $${listing.price}`);
  console.log(`  Seller: ${listing.seller.name} (${listing.seller.rating}%)`);
  console.log(`  Shipping: ${listing.shipping.cost || 'Free'}`);
}

No API keys. No OAuth. No scraping. Just the same data eBay's own frontend uses.

Performance Comparison

How does Unbrowse compare to traditional approaches for accessing eBay data?

Method Setup Time Avg Response Time Structured Data Breaks on Layout Change
eBay Official API Hours (registration, OAuth) 200-400ms Yes No
HTML Scraping (Puppeteer) 30-60 min 3-8 seconds Requires parsing Yes
HTML Scraping (Playwright) 30-60 min 2-6 seconds Requires parsing Yes
Unbrowse (Shadow API) 2 minutes 100-300ms Yes (native JSON) No

Unbrowse calls the same API that eBay's frontend calls. If eBay changes their HTML layout, scrapers break. If eBay changes their internal API, both the frontend and Unbrowse are affected — but internal APIs change far less frequently than page markup.

When to Use This Approach

Shadow API access through Unbrowse works best when:

  • You need structured data quickly without going through an API approval process
  • You are building an AI agent that needs to interact with eBay programmatically
  • You want response times measured in milliseconds, not seconds
  • You are tired of maintaining fragile scraping scripts

It is not a replacement for eBay's official API if you need write access (creating listings, managing orders) or guaranteed SLA. Shadow APIs are read-only by nature and are subject to change without notice.

FAQ

Is this legal? Unbrowse accesses the same endpoints your browser accesses during normal browsing. It does not bypass authentication, break encryption, or violate access controls. However, you should review eBay's Terms of Service for your specific use case.

Do I need an eBay account? For public search results and listing data, no. For endpoints that return personalized data (watchlists, purchase history), you need to be logged into eBay in the Unbrowse browser session.

How often do shadow APIs change? Internal APIs change less frequently than page markup because they are consumed by eBay's own frontend code. When they do change, Unbrowse detects the change on the next browse session and updates the stored skill.

Can I use this at scale? Unbrowse caches discovered routes, so repeated calls do not require a browser. Once a route is indexed, it can be called thousands of times. Rate limiting still applies — these are eBay's servers, and aggressive calling patterns may trigger blocks.

How is this different from scraping? Scraping parses rendered HTML to extract data. Unbrowse calls the underlying JSON API that produced that HTML. The data is already structured, complete, and does not require parsing or cleanup.