eBay Scraper - Listings, Prices and Discounts avatar

eBay Scraper - Listings, Prices and Discounts

Pricing

Pay per event

Go to Apify Store
eBay Scraper - Listings, Prices and Discounts

eBay Scraper - Listings, Prices and Discounts

Scrape eBay browse pages: listing title, price, strikethrough was-price with discount percent, item condition, shipping cost and image. Reads the listing grid, not the promoted carousel.

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

eBay Scraper

Scrape eBay browse pages: listing title, price, the strikethrough was-price with the discount worked out, item condition, shipping cost and image. Point it at a category and it pages through.

eBay was on our "closed" list, and the verdict was wrong

It was recorded as throwing a transport error to bot user agents. That was true of the agents tried, and false as a conclusion about the site.

8 of 8 consecutive fetches returned about 1.8 MB carrying 67 listings. No 403, no captcha, no drift between runs. eBay is one of the more stable targets in this collection.

The referer is part of that. Arriving from a search result is the most ordinary way a person reaches a category page, and it is in the profile that measured clean.

Browse pages work; search pages do not

Six attempts each, through rotating exits:

SurfaceResult
/b/Laptops-Netbooks/175672200, 67 listings, every attempt
/sch/i.html?_nkw=...1,986-byte 403, every attempt

A 403 that survives six different exits is a wall rather than luck, so this Actor refuses a search URL up front with a message, instead of costing you five retries to find out.

Two traps in this page, and why the output is trustworthy

The JSON-LD is a decoy. The page publishes an ItemList, which is the obvious thing to parse. It holds 8 entries against 67 real listings: it describes a promoted carousel, not the grid. Parsing it returns a confident, tiny, unrepresentative slice — which is worse than returning nothing, because nothing about the result looks wrong. This Actor reads the grid markup instead.

The page opens with catalogue tiles that are not listings. They carry a title and no item link, no price and no condition. Anchoring the parse on the title element looks tidier and produces rows of nulls at the top of every run. Anchoring on each listing's own /itm/<id> link fixes it, and the tests pin that so it stays fixed.

There is also a third detail worth stating: eBay ships three price classes, not one — displayprice, newprice and usedprice. On a sample page those were 81, 15 and 11 respectively. Matching only the first silently drops a quarter of the grid to a null price.

Discounts are only reported when real

on_sale is set only when a strikethrough price exists and is above the current price. discount_percent prefers eBay's own stated percentage and falls back to computing it from the pair.

A strikethrough that is not higher is a formatting artefact, and treating it as a markdown would invent discounts. When it does not qualify, was_price comes back null rather than being filled in anyway.

On a test run of 120 laptops, 51 carried a genuine markdown, with eBay's stated percentages ranging from 12% to 43%.

Fields

FieldWhat it is
item_ideBay's own id. Stable, join runs on it
titleListing title
price, currencyCurrent price
was_priceStrikethrough price, only on a real markdown
on_sale, discount_percentWhether it is discounted and by how much
conditioneBay Refurbished, Open Box, Pre-Owned and similar
shipping_costWhen the card states one
imageListing image
urlListing page

Input reference

FieldTypeDefault
browse_urleBay browse pageLaptops & Netbooks
limit1-2000100
retries1-84

Pagination uses eBay's own _pgn parameter.

Typical uses

  • Price and discount monitoring. Run a category on a schedule and join snapshots on item_id. discount_percent shows how hard a category is being marked down.
  • Refurbished market research. condition separates eBay Refurbished, Open Box and Pre-Owned, which is the split that matters when pricing second-hand stock.
  • Competitive pricing. Price distribution within a browse category, with shipping cost included where stated.
  • Deal hunting. Filter on on_sale and sort by discount_percent.

Notes on behaviour

Pages are paced with a short randomised gap. A page that loads but carries no listing cards is reported as no_listings rather than returned as an empty result.

Prices are from ebay.com in US dollars. Other eBay domains use a different markup in places, so treat this Actor as US-site only until measured elsewhere.

Shipping cost is captured only when the card states a figure. Many listings show "Free shipping" or nothing at all, and those come back null rather than zero, because free and unstated are different facts.