[Home](https://scrapfly.io/)/[Scrapers](https://scrapfly.io/scrapers)/eBay

Listings · prices · search results · sellers

# // eBay Scraper API

Scrape eBay listings, variant prices, search results and seller stores as clean JSON. Scrapfly handles eBay's bot checks, so you send a URL and read the data.

- **Clone it and run it.** An open-source eBay scraper for listings, listing variants and search results, tested against live eBay every night.
- **Every variant's price.** One request to a listing returns the price and stock status of each variant, from color to storage size.
 
 [Get free API key](https://scrapfly.io/register) [View GitHub scraper](https://github.com/scrapfly/scrapfly-scrapers/tree/main/ebay-scraper) [Read Unblocker docs](https://scrapfly.io/docs/scrape-api/unblocker) 

1,000 free credits. No credit card required.

 [  ](https://scrapeway.com/web-scraping-api/scrapfly) [  ](https://www.capterra.com/p/212653/Scrapfly/)  

 4.9/5 from 236 reviews 

 



 

 

 Any eBay URL

 

 

 Listing JSON**Output**

```
{
  <span class="c-str">"item_id"</span>: <span class="c-str">"156833155405"</span>,
  <span class="c-str">"model"</span>: <span class="c-str">"Apple iPhone 12"</span>,
  <span class="c-str">"condition"</span>: <span class="c-str">"Refurbished"</span>,
  <span class="c-str">"variants"</span>: <span class="c-num">18</span>,
  <span class="c-str">"in_stock"</span>: <span class="c-num">17</span>,
  <span class="c-str">"from_usd"</span>: <span class="c-num">176.99</span>,
  <span class="c-str">"to_usd"</span>: <span class="c-num">219.99</span>,
  <span class="c-str">"returns_days"</span>: <span class="c-num">30</span>
}
```

Printed by the Python request below[See the request ↓](#implementation)

  

What you can scrape from eBay

Four kinds of eBay data you can scrape with Scrapfly, no eBay account required.

 ## // Scrape eBay listings

Title, price and list price, condition, item specifics such as brand, model and storage, photos, shipping, return window, the seller's description, and the seller's name and feedback score.

- title
- price
- condition
- item specifics
- photos
- returns
- seller

  ## // Scrape eBay prices and variants

Every variant of a multi-variant listing, such as each color and storage size of a phone, with its own price, stock status and photos. All of them come from the listing page itself, in one request.

- variant id
- options
- price
- in stock
- photos

  ## // Scrape eBay search results

Up to 240 listings per results page, each with its URL, title, price, shipping and photo, plus condition, location and seller rating where eBay shows them, and the total result count. Page through as far as you need.

- title
- price
- shipping
- condition
- seller rating
- total results

  ## // Scrape eBay sellers and stores

A seller's store page with its positive feedback, items sold, followers and featured listings with prices. Add the seller's name to a search URL to list everything the seller has for sale.

- store name
- feedback
- items sold
- followers
- listings

  



Reliability

## // Get past eBay's bot checks

eBay turns away part of the datacenter traffic it gets, mostly on search pages, with HTTP 403 or a challenge page titled "Pardon Our Interruption". Turn Unblocker on and Scrapfly sends eBay requests through residential proxies, where listings and search results load.

`unblocker=true`One parameter for every eBay page type: listings, search results and seller stores.



`_ipg=240`Search results: up to 240 listings on one page, so a search takes fewer requests. Add `_pgn` for the next page.



`_ssn`Seller listings: add a seller's name to a search URL and get everything that seller has for sale, as a normal results page.



 



Choose your tools

## // Scrapfly products for eBay scraping

Scrapfly's eBay scraping API is the Web Scraping API with Unblocker on, and most jobs need nothing else. Add the others for a standard product schema, screenshots, browser sessions or lists of URLs. One API key covers all of them.

 ### Web Scraping API for eBay

Fetch any listing, search results or store URL with Unblocker on. The data is in the HTML eBay sends, so there is no browser rendering to pay for.

A listing carries its details in a JSON-LD block and every variant's price in the page's embedded data, so one request covers both.

 

```
GET /scrape?url=https://www.ebay.com/itm/156833155405&unblocker=true&country=US
```

 [Explore Web Scraping API →](https://scrapfly.io/products/web-scraping-api)  ### Data Extraction API for eBay listings

Add `extraction_model=product` and get the listing back as a standard product record, with no parser to write.

The record has the name, brand, price and list price, item specifics, delivery and images, in the same shape as for any other shop you scrape.

 

```
GET /scrape?url=https://www.ebay.com/itm/156833155405&unblocker=true&country=US&extraction_model=product
```

 [Explore Data Extraction API →](https://scrapfly.io/products/extraction-api)  ### Screenshot API for eBay listings

A full-page capture of any listing: photos, price, condition and item specifics.

Keep a visual record of how a listing looked on a given day.

 

```
GET /screenshot?url=https://www.ebay.com/itm/156833155405&country=us&capture=fullpage&format=png
```

 [Explore Screenshot API →](https://scrapfly.io/products/screenshot-api)  ### Cloud Browser API for eBay sessions

Point your Playwright or Puppeteer script at a hosted browser when the job needs clicks, such as picking a color and storage size to see that variant's price.

The browser runs on Scrapfly's proxies, so your script never reaches eBay from your own IP.

 

```
chromium.connect_over_cdp("wss://browser.scrapfly.io?key=KEY&country=us")
```

 [Explore Cloud Browser API →](https://scrapfly.io/products/cloud-browser-api)  ### Crawler API for lists of eBay URLs

Submit a list of listing and search URLs as one job, with [Unblocker](https://scrapfly.io/products/unblocker) (formerly ASP) applied to every URL. Ask for HTML output: each listing's price and variants sit in its embedded data.

- url\_list
- unblocker
- country
- content\_formats

 [Explore Crawler API →](https://scrapfly.io/products/crawler-api)  



One request

## // Fetch an eBay listing and every variant's price

The JSON at the top is what this code prints: one request for a listing, then its model, condition and return window from the JSON-LD block, and the price range of the variants in stock from the page's variant data. No CSS selectors to maintain.

**Prefer the full scraper?** The open-source [eBay scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/ebay-scraper) covers listings, listing variants and search results with pagination in Python 3.10 and runs against live eBay every night. Clone it, set `SCRAPFLY_KEY`, and run `poetry run python run.py`.

 

 Python · scrapfly-sdkscrape + parse

```
<span class="c-key">import</span> json
<span class="c-key">from</span> scrapfly <span class="c-key">import</span> ScrapeConfig, ScrapflyClient

client = ScrapflyClient(key=<span class="c-str">"YOUR_SCRAPFLY_KEY"</span>)
result = client.scrape(ScrapeConfig(
  <span class="c-str">"https://www.ebay.com/itm/156833155405"</span>,
  unblocker=<span class="c-key">True</span>,  <span class="c-com"># previously asp</span>
  country=<span class="c-str">"US"</span>,
))
lds = [json.loads(s) <span class="c-key">for</span> s <span class="c-key">in</span> result.selector.css(
  <span class="c-str">'script[type="application/ld+json"]::text'</span>).getall()]
product = next(x <span class="c-key">for</span> ld <span class="c-key">in</span> lds
  <span class="c-key">for</span> x <span class="c-key">in</span> (ld <span class="c-key">if</span> isinstance(ld, list) else [ld])
  <span class="c-key">if</span> x[<span class="c-str">"@type"</span>] == <span class="c-str">"Product"</span>)
offer = product[<span class="c-str">"offers"</span>]
key = <span class="c-str">'"MSKU":'</span>
msku, _ = json.JSONDecoder().raw_decode(
  result.content, result.content.index(key) + len(key))
variants = msku[<span class="c-str">"variationsMap"</span>].values()
prices = [v[<span class="c-str">"binModel"</span>][<span class="c-str">"price"</span>][<span class="c-str">"value"</span>][<span class="c-str">"value"</span>]
  <span class="c-key">for</span> v <span class="c-key">in</span> variants <span class="c-key">if</span> <span class="c-key">not</span> v[<span class="c-str">"quantity"</span>][<span class="c-str">"outOfStock"</span>]]
item = {
  <span class="c-str">"item_id"</span>: offer[<span class="c-str">"url"</span>].rsplit(<span class="c-str">"/"</span>, <span class="c-num">1</span>)[-<span class="c-num">1</span>],
  <span class="c-str">"model"</span>: product[<span class="c-str">"model"</span>],
  <span class="c-str">"condition"</span>: offer[<span class="c-str">"itemCondition"</span>].split(<span class="c-str">"/"</span>)[-<span class="c-num">1</span>]
    .removesuffix(<span class="c-str">"Condition"</span>),
  <span class="c-str">"variants"</span>: len(variants),
  <span class="c-str">"in_stock"</span>: len(prices),
  <span class="c-str">"from_usd"</span>: min(prices),
  <span class="c-str">"to_usd"</span>: max(prices),
  <span class="c-str">"returns_days"</span>: offer[<span class="c-str">"hasMerchantReturnPolicy"</span>][<span class="c-num">0</span>]
    [<span class="c-str">"merchantReturnDays"</span>],
}
print(json.dumps(item, indent=<span class="c-num">2</span>))
```

 

 



What the data is used for

## // Common eBay scraping use cases

### Price monitoring

Track what a product sells for on eBay, variant by variant, and catch price drops.



### Competitor tracking

Follow the listings, prices and items sold of the sellers you compete with.



### Product research

Size a category before you source it: how many listings, in what condition, at what prices.



### Refurbished and used pricing

Compare prices across conditions, from new to refurbished to used, for the same model.



### Seller vetting

Check a seller's positive feedback, items sold and followers before you buy or partner.



### Catalog enrichment

Fill product records with item specifics, photos and list prices.



 



Common questions

## // eBay scraping FAQ

 Is scraping eBay legal?There is no universal answer. Legality depends on your jurisdiction, the data, the access method and how you use the result. Keep the workflow to public pages, avoid signed-in content, treat usernames as personal data, review eBay's User Agreement, and get legal advice for commercial use.

 Do I need an eBay account or developer API key?No. Scrapfly loads public eBay pages signed out, so there is no eBay account, developer app or OAuth token to manage. You only need a Scrapfly API key.

 Why does eBay return HTTP 403 or a "Pardon Our Interruption" page?That is eBay's bot defense. It turns away part of the datacenter traffic, mostly on search pages, with HTTP 403 or a challenge page titled "Pardon Our Interruption". Turn on Unblocker with `unblocker=true` and Scrapfly sends eBay requests through residential proxies, where the pages load.

 Can I scrape eBay prices and variants?Yes. A listing's price, condition and return window sit in its JSON-LD block, and the price and stock status of every variant sit in the page's embedded variant data, so one request covers every color and storage combination. With `country=US`, prices come in US dollars.

 Can I scrape eBay search results?Yes. Add `_ipg=240` to a search URL and get up to 240 listings per page with title, price, shipping and photo, plus condition, location and seller rating where eBay shows them, and the total result count. Page through with `_pgn`, or add `_ssn` with a seller name to list that seller's items.

 Can I scrape eBay sold listings?Not signed out. eBay sends signed-out visitors who search sold or completed listings to its sign-in page, and Scrapfly works with public pages. Active listings, their prices and search results stay public.

 How much does scraping eBay cost?With Unblocker on, an eBay listing or search results page costs 25 to 30 credits, because eBay requests go out on residential proxies. The product extraction model brings a listing to 40 credits, and a Screenshot API capture costs 60. Every account starts with 1,000 free credits.

 What are the rate limits when scraping eBay?Scrapfly sets no eBay-specific limit. Your maximum parallelism is the concurrency quota on your plan, or a lower cap configured for the project. Each in-flight request uses one slot until it finishes.

 



Start with one request

## Fetch the URL. Read the JSON.

Web Scraping API with Unblocker on, one call per eBay URL.

Proxies across 190+ countries

 [eBay scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/ebay-scraper) [How to scrape eBay](https://scrapfly.io/blog/posts/how-to-scrape-ebay) [All scraper pages](https://scrapfly.io/scrapers) 

 

 [Get free API key](https://scrapfly.io/register) [Read the docs](https://scrapfly.io/docs/scrape-api/unblocker)