eBay Scraper - Category Listings, Prices & Discounts
Pricing
from $1.00 / 1,000 run start fees
eBay Scraper - Category Listings, Prices & Discounts
eBay scraper for category pages. Per listing: item ID, title, current price, was-price, discount percent, condition, shipping cost, image and URL, in page order. No login or API key. For price monitoring, resellers, deal finding and marketplace research.
Pricing
from $1.00 / 1,000 run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
eBay Scraper - Category Listings, Prices and Discounts
This eBay scraper turns an eBay category page into structured listing data for price monitoring, reselling and market research: current price, genuine discounts, item condition, shipping cost and images when the listing card provides them. Provide an eBay category URL and choose how many listings to return. Each listing becomes one dataset row, with a stable eBay item ID and its listing URL. No eBay account, login or developer key is needed, and results download as JSON, CSV, Excel or through the Apify API.
What does this eBay scraper do?
It reads the main listing grid of an eBay browse page (an address such as
https://www.ebay.com/b/Laptops-Netbooks/175672), follows the next pages until your limit is
reached, and returns one clean row per listing. It keeps the listings in the order eBay shows
them, removes repeated item IDs, and only marks a listing as on sale when the previous price is
really above the current price. Promoted carousels at the top of a category are not mixed into
the results.
eBay scraper input
All input fields are optional in the input schema, but a run needs a browse_url or a keyword.
Browse URLs are the supported route. The default maximum is 100 listings, with up to four attempts
per page. The supported range is 1–2000 listings and 1–8 attempts. Listings remain in page order
and repeated item IDs appear once.
This input was used for the measured example below:
{"browse_url": "https://www.ebay.com/b/Laptops-Netbooks/175672","limit": 100,"retries": 4}
Use a category page whose path begins with /b/. Mobile category addresses work as well:
https://m.ebay.com/b/Laptops-Netbooks/175672 and the mobile Cell Phones & Smartphones category
each returned 20 listings in a 20-listing run on 3 October 2026, priced in US dollars. Addresses
outside eBay, and addresses with a login part, a port or a protocol other than HTTP(S), are
refused with an explanatory error record. A category hub can be a valid eBay page while
containing no listing grid; that produces an empty result. A deleted category also produces an
empty result with an error record explaining why no listings were returned.
keyword takes precedence over browse_url. Keyword search is currently unavailable in this
Actor and can return search_unavailable with zero listings. Use browse_url for supported
collection. A direct /sch/ search URL passed in browse_url is not supported.
The existing keyword options remain accepted: site, sold_listings, buying_format,
condition, min_price, max_price, free_shipping, returns_accepted, seller,
category_id, sort_by and title_and_description. These options describe the keyword
search and do not filter a browse category locally. The default marketplace is us, buying
format is all, sorting is best_match, and the boolean options default to false.
eBay scraper output
The default dataset contains one row per listing. The existing twelve output fields remain available with their existing types:
| Field | Meaning |
|---|---|
item_id | eBay listing ID, as a string |
title | Listing title as shown on its card |
price | Current numeric price, or null when absent |
currency | Currency of the numeric price |
was_price | Previous numeric price, only when above the current price |
on_sale | Whether the card provides a genuine markdown |
discount_percent | Stated percentage off, or calculated from the price pair |
condition | Card condition label, or null |
shipping_cost | Stated numeric shipping cost, or null |
image | Listing image URL, or null |
url | Direct listing page URL |
position | One-based position across the delivered rows |
Additional fields include source, listing_id, image_url, fetched_at and country.
listing_id matches item_id, while image_url matches image. fetched_at records when
that page was collected and country identifies the marketplace.
Here is the first real row from a 100-listing laptop run on 3 October 2026:
{"item_id": "236631062029","title": "Lenovo Legion Go 2 Handheld Gaming PC AMD Ryzen Z2 32GB 1TB 8.8\" OLED + WARRANTY","price": 1299.0,"currency": "USD","was_price": null,"on_sale": false,"discount_percent": null,"condition": "eBay Refurbished","shipping_cost": null,"image": null,"url": "https://www.ebay.com/itm/236631062029","position": 1,"source": "ebay-scraper","fetched_at": "2026-10-03T18:05:29.064Z","country": "US","listing_id": "236631062029","image_url": null}
A discounted listing from the same run looks like this. The previous price of $699.99 is above
the current $479.99, so on_sale is true and discount_percent is 31.4:
{"item_id": "198532859679","title": "Acer - Aspire Go 15 15.6\" FHD Laptop AMD Ryzen 7 7730U 2023 AMD Radeon ...","price": 479.99,"currency": "USD","was_price": 699.99,"on_sale": true,"discount_percent": 31.4,"condition": "eBay Refurbished","shipping_cost": null,"image": null,"url": "https://www.ebay.com/itm/198532859679","position": 8,"source": "ebay-scraper","fetched_at": "2026-10-03T18:05:29.064Z","country": "US","listing_id": "198532859679","image_url": null}
In that run, 97 of the 100 listings carried a price and a condition, and 29 were genuine markdowns. A 30-listing run on the Cell Phones & Smartphones category returned 30 priced listings, five of them on sale and five with an image URL.
The key-value store includes summary, with the delivered listing count, pages fetched,
price and condition coverage, sale count and source information. When a source error occurs,
errors contains a code and explanatory message. Empty results are successful runs; source
errors do not create invented dataset rows. If a later page fails after earlier pages succeeded,
the earlier listings remain available and the error describes the failed page.
Use cases for eBay listing data
- Price monitoring. Run the same category every day and join the rows on
item_idto see price drops, new markdowns and listings that disappear. - Reselling and sourcing. Filter on
discount_percentandconditionto find refurbished or open-box stock priced well below its previous price, then open theurlto check the seller. - Market and assortment research. Count listings per condition, compare price bands across categories, or track how much of a category is on sale over time.
- Competitor tracking for sellers. See which prices and shipping costs appear next to your own listings in the categories you sell in.
- Data pipelines. Schedule the Actor, send the dataset to a spreadsheet, database or BI tool, and feed the rows into dashboards or alerts.
eBay scraper vs. the eBay API and other tools
The official eBay developer program offers APIs for buyers and sellers, but it requires an application, keys, OAuth tokens and call limits, and it returns item data in its own nested format. This Actor needs only a category URL and returns a flat row per listing that you can open in a spreadsheet straight away.
Browser extensions and copy-paste tools work for a single page, but they break on pagination and do not run on a schedule. Writing your own script means maintaining parsers whenever the page layout changes. Other eBay scrapers in the Apify Store focus on keyword search or sold listings; this one is built for category pages, with careful discount detection and per-listing pricing that charges nothing for empty results.
Pricing
The price is unchanged: $0.001 per run plus $0.0015 per delivered listing. The run fee also applies to runs that return no listings. Empty results incur no listing charges. A run returning 100 listings therefore costs $0.151 in Actor events. A 30-listing run costs $0.046. Charges follow delivered dataset rows, including the free-plan limit.
Users without a paid Apify plan receive at most ten listings per run. Paid users can request the full supported limit. The dataset rows are delivered before listing events are charged. There are no separate enrichment events for the optional fields in a listing row.
FAQ
Can I use keyword search or sold listings?
Those input options remain available, but the keyword route is currently unavailable. A sold listing filter belongs to keyword search and does not turn a browse category into a sales-history source. Use an eBay browse category for the supported output.
Why is a price or image null?
The Actor reports the information carried by the listing card. Some cards show only a previous price and no current price; a previous price alone is insufficient to infer a current offer. Images may be absent under the existing extraction rule. Null is preserved rather than filled with an assumed value.
Does free shipping mean shipping_cost is zero?
The existing output represents free shipping as null. shipping_cost contains a number when the
card explicitly states a paid shipping amount. This behavior remains compatible with prior runs.
Will I be charged for an empty dataset?
Only the run fee applies. No listing events are charged when zero listings are delivered.
Check the errors record to distinguish an empty category from an unavailable source page.
Do I need an eBay account or developer key?
No. The Actor reads the public category pages that any visitor can open. You only need an Apify account to run it and to download the dataset.
Which eBay marketplaces are supported?
Category pages on www.ebay.com and m.ebay.com, priced in US dollars, are the measured route.
Category URLs from the other eBay marketplaces (for example the UK, Germany, Ireland, Australia or
Canada) are accepted and keep their own country and currency, with prices read correctly in both
EUR 249.99 and EUR 1.540,00 notation. Some of those marketplaces use a different page layout
that currently returns no listings; such a run ends as a successful empty run with only the run
fee. The country field on every row tells you which marketplace a listing came from.
How do I export the data to CSV or Excel?
Open the run's dataset in Apify Console and choose JSON, CSV, Excel, XML or HTML, or fetch the same dataset through the Apify API from your own code or an integration.
Can I collect more than one page?
Yes. The Actor follows the category pages automatically up to the requested limit, with an upper bound of thirty pages. Listings are deduplicated by eBay item ID and positions remain continuous. Availability and page order can change as sellers update their listings.