eBay Scraper - Listings, Prices and Discounts
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
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:
| Surface | Result |
|---|---|
/b/Laptops-Netbooks/175672 | 200, 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
| Field | What it is |
|---|---|
item_id | eBay's own id. Stable, join runs on it |
title | Listing title |
price, currency | Current price |
was_price | Strikethrough price, only on a real markdown |
on_sale, discount_percent | Whether it is discounted and by how much |
condition | eBay Refurbished, Open Box, Pre-Owned and similar |
shipping_cost | When the card states one |
image | Listing image |
url | Listing page |
Input reference
| Field | Type | Default |
|---|---|---|
browse_url | eBay browse page | Laptops & Netbooks |
limit | 1-2000 | 100 |
retries | 1-8 | 4 |
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_percentshows how hard a category is being marked down. - Refurbished market research.
conditionseparates 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_saleand sort bydiscount_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.