eBay Product Scraper
Pricing
from $0.97 / 1,000 product scrapeds
eBay Product Scraper
eBay product dataset from search queries or listing URLs, including prices, condition, seller fields, and optional product-page details.
Pricing
from $0.97 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Farhan Ali
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
eBay Product Scraper creates a structured dataset of listings collected from eBay marketplaces. Each dataset item represents one listing and can include identifiers, title, price, currency, condition, buying format, shipping, location, seller feedback, watchers, and bid count, plus optional item-page description, images, and item specifics. Query the source with search, category, or item URLs in startUrls, or with searchQueries when startUrls is empty. Control the result limit with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.
Dataset at a glance
| Property | Value |
|---|---|
| Source | eBay marketplaces (ebay.com and regional eBay sites) |
| Record unit | One eBay listing |
| Input methods | Search, category, or item URLs (startUrls); searchQueries when startUrls is empty |
| Main identifiers | itemId, url |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML, HTML (Apify dataset exports) |
| Update model | Fresh records per Actor run |
| Pricing | $1.00 per 1,000 listings; +$1.50 per 1,000 when includeProductDetails is enabled; $0.00005 start charge per run |
Coverage and available records
The Actor collects listings from public eBay pages using one of two entry points:
- URL-based: Pass eBay search URLs, category or browse URLs, or individual item URLs in
startUrls(for examplehttps://www.ebay.com/sch/i.html?_nkw=bike,https://www.ebay.com/b/Cars-Trucks/6001/bn_1865117, orhttps://www.ebay.com/itm/125459703651). WhenstartUrlsis set, constructed search filters are ignored. Start URLs keep the host from the URL. - Search-based: Set
searchQueries(for examplebike) only whenstartUrlsis empty. Marketplace, category, buying format, condition, sort, location, price range, and sold-listing filters apply to constructed searches.
Record types and limits:
- Listing-level records are always collected:
itemId, title, URL, price, currency, condition, buying format, shipping, item location, image, watchers, bid count, seller, seller feedback, sponsored flag, marketplace, and source metadata. - Item-page fields are conditional: description, images, item specifics, seller, and shipping from the item page are returned only when
includeProductDetailsis enabled. - Sold listings are conditional: set
soldListingstotrueto collect completed or sold results instead of active listings. This applies to constructed searches only. - Result cap:
maxItemslimits listings collected across all URLs and queries (0means unlimited, the default; the console prefill is10).
Constructed searches use EBAY_US by default or another EBAY_* marketplace from the input reference.
Known exclusions: login-only eBay content; historical snapshots; constructed search filters when startUrls is set.
Data dictionary
Field names below match dataset record JSON properties exactly. Fields marked conditional appear only when includeProductDetails is enabled.
Listing-level fields
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
itemId | string | No | eBay item identifier; recommended deduplication key | 125459703651 |
title | string | No | Listing title | Chopper Lowrider beach Stretch cruiser bike Coaster Brakes Big Fat Bicycle |
url | string | No | Listing URL; secondary deduplication key | https://www.ebay.com/itm/125459703651 |
price | number | Yes | Numeric asking or sale price | 664.99 |
currency | string | Yes | ISO currency code for price | USD |
formattedPrice | string | Yes | Price as displayed on eBay | $664.99 |
condition | string | Yes | Condition text from the listing | Brand New |
buyingFormat | string | Yes | Buying format as shown (for example Buy It Now) | Buy It Now |
shipping | string | Yes | Shipping snippet from the listing card | Shipping not specified |
itemLocation | string | Yes | Item location as shown on the listing | United States |
imageUrl | string | Yes | Primary listing image URL | https://i.ebayimg.com/images/g/dIoAAOSwwihi9Ule/s-l500.webp |
watchers | number | Yes | Watcher count when eBay shows it | 98 |
bidCount | number | Yes | Auction bid count when eBay shows it | null |
seller | string | Yes | Seller username | reignbike |
sellerFeedbackPercent | number | Yes | Seller positive-feedback percent | 99.8 |
sellerFeedbackCount | number | Yes | Seller feedback count | 2100 |
isSponsored | boolean | No | Whether the listing is a sponsored result | false |
marketplace | string | No | eBay marketplace code for the record | EBAY_US |
sourceType | string | Yes | How the listing was reached (for example search) | search |
sourceQuery | string | Yes | Search term that produced the record | bike |
Item-page fields (conditional — includeProductDetails)
When includeProductDetails is enabled, the same listing record can also include description, images, item specifics, seller, and shipping from the item page. These groups are omitted or sparse when the toggle is off or when eBay does not publish the value.
Example dataset record
Real listing-level record produced with the test input below (searchQueries: ["bike"], marketplace: "EBAY_US"). Item-page description, images, and item specifics are not present because this example is the listing card.
{"itemId": "125459703651","title": "Chopper Lowrider beach Stretch cruiser bike Coaster Brakes Big Fat Bicycle","url": "https://www.ebay.com/itm/125459703651","price": 664.99,"currency": "USD","formattedPrice": "$664.99","condition": "Brand New","buyingFormat": "Buy It Now","shipping": "Shipping not specified","itemLocation": "United States","imageUrl": "https://i.ebayimg.com/images/g/dIoAAOSwwihi9Ule/s-l500.webp","watchers": 98,"bidCount": null,"seller": "reignbike","sellerFeedbackPercent": 99.8,"sellerFeedbackCount": 2100,"isSponsored": false,"marketplace": "EBAY_US","sourceType": "search","sourceQuery": "bike"}
The record above was produced with this input:
{"searchQueries": ["bike"],"marketplace": "EBAY_US","category": "0","maxItems": 5,"includeProductDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
startUrls | array (requestListSources) | No* | — | eBay search, category/browse, or item URLs | URL-based entry point. When set, constructed search filters are ignored |
searchQueries | array (string) | No* | — | Free-text terms (for example bike) | Used only when startUrls is empty |
marketplace | string | No | EBAY_US | EBAY_US, EBAY_UK, EBAY_DE, EBAY_AU, EBAY_CA, EBAY_FR, EBAY_IT, EBAY_ES, EBAY_AT, EBAY_CH, EBAY_IE, EBAY_NL, EBAY_BE, EBAY_PL, EBAY_SG, EBAY_HK | eBay site for constructed searches. Start URLs keep the host from the URL |
category | string | No | 0 | Actor category enum; 0 is All Categories | eBay category ID for constructed searches. Ignored when startUrls is set |
buyingFormat | string | No | all | all, buy_it_now, auction, best_offer | Buying-format filter for constructed searches |
condition | string | No | any | any, new, open_box, certified_refurbished, seller_refurbished, used, for_parts | Condition filter for constructed searches |
sortBy | string | No | best_match | best_match, ending_soonest, newly_listed, price_shipping_lowest, price_shipping_highest, nearest | Sort order for constructed searches |
itemLocation | string | No | default | default, domestic, worldwide, local | Item-location preference. local uses zipCode and distance |
zipCode | string | No | — | Postal code (for example 10001, SW1A 1AA) | Postal code for nearby / local searches |
distance | integer | No | — | >= 0 (miles) | Search radius around zipCode when itemLocation is local |
minPrice | number | No | — | >= 0 | Exclude listings below this price on constructed searches |
maxPrice | number | No | — | >= 0 | Exclude listings above this price on constructed searches |
soldListings | boolean | No | false | true / false | Collect completed/sold listings instead of active ones (constructed searches only) |
maxItems | integer | No | 0 | 0 or any positive integer | Maximum listings to collect; 0 = unlimited (console prefill 10) |
includeProductDetails | boolean | No | false | true / false | Add item-page description, images, item specifics, seller, and shipping (charged as product-details) |
detailConcurrency | integer | No | 8 | 1–15 | Parallel item-page fetches when includeProductDetails is enabled |
proxyConfiguration | object | No | Apify proxy, RESIDENTIAL group | Apify proxy groups or custom proxies | Residential proxies are recommended |
* Provide either startUrls or searchQueries. searchQueries is used only when startUrls is empty.
Minimal request:
{ "searchQueries": ["bike"], "marketplace": "EBAY_US" }
Advanced request (constructed search with filters and item-page fields):
{"searchQueries": ["bike"],"marketplace": "EBAY_US","category": "177831","buyingFormat": "buy_it_now","condition": "new","sortBy": "price_shipping_lowest","itemLocation": "domestic","minPrice": 100,"maxPrice": 800,"soldListings": false,"maxItems": 50,"includeProductDetails": true,"detailConcurrency": 8,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Retrieve the data through the API
The Actor runs on the Apify platform. There is no separate eBay API and no server to host.
- Start the Actor with a JSON input (console or API).
- Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
- Retrieve items from the run's default dataset.
- Paginate or export the dataset.
Python example:
from apify_client import ApifyClientclient = ApifyClient("YOUR-APIFY-TOKEN")run_input = {"searchQueries": ["bike"],"marketplace": "EBAY_US","maxItems": 10,"includeProductDetails": False,}run = client.actor("datascrapers/ebay-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["itemId"], item["title"], item["price"])
Apify generates ready-to-run Python, JavaScript, and cURL examples on the Actor's API tab. Do not put a real API token in shared code or URLs.
Data quality and record handling
- Conditional fields: description, images, item specifics, and richer seller or shipping values are present only when
includeProductDetailsis enabled. Listings alone return a leaner record. - Source values: prices, condition, buying format, and seller feedback are read from eBay as shown at run time. Unreadable fields are returned as null rather than fabricated.
- Deduplication: each run appends fresh records. Deduplicate across runs on
itemId, or onurlwhenitemIdis missing. - Filter scope: marketplace, category, buying format, condition, sort, location, price range, and
soldListingsapply only to constructed searches. WhenstartUrlsis set, those filters are ignored. - Charges:
dataset-itemis billed for each listing written to the dataset.product-detailsis billed only whenincludeProductDetailsis enabled for that listing.
Export and pipeline examples
| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL / Supabase | Dataset API poll or webhook consumer | Store listing prices and sellers alongside catalog records |
| Google Sheets | Apify Google Sheets integration | Share price or sold-comp shortlists |
| S3 / cloud storage | Scheduled export via Apify scheduler + integration | Archival of marketplace snapshots |
| Custom warehouse | Dataset API pagination | Load large listing datasets in batches |
Pricing and cost examples
The Actor uses pay-per-event pricing:
| Event | Trigger | Rate |
|---|---|---|
start | Actor run starts | $0.00005 |
dataset-item | Each listing written to the dataset | $0.001 ($1.00 per 1,000) |
product-details | Each listing opened with includeProductDetails | $0.0015 ($1.50 per 1,000) |
Example costs (start charge excluded; add $0.00005 per run):
| Records | Configuration | Estimated base cost |
|---|---|---|
| 1,000 | Listing only | $1.00 |
| 10,000 | Listing only | $10.00 |
| 1,000 | Listing + product details | $2.50 |
| 10,000 | Listing + product details | $25.00 |
Compute units consumed by the run are billed by your Apify plan. Estimates depend on the verified pricing model and the options selected for the run.
Limitations and responsible data use
- The Actor collects publicly accessible data from eBay pages only.
- Field availability depends on what eBay renders at run time; some values can be null or missing, and site changes can alter fields.
- The Actor does not provide historical snapshots unless you store them yourself.
- Constructed search filters are ignored when
startUrlsis set. - Residential proxies are recommended; coverage may degrade without them.
- You are responsible for compliance with eBay's terms of service, applicable privacy law, and any contractual obligations before using the data.
Dataset questions
What does one dataset item represent?
One eBay listing. Item-page description, images, and item specifics are added to the same record when includeProductDetails is enabled, so an enriched listing still produces a single dataset item.
Which field should I use as a unique identifier?
itemId is the stable eBay item identifier and is the recommended deduplication key. Use url as the secondary key when itemId is missing.
Are fields nullable or conditional?
Yes. Watchers, bid count, shipping, and seller feedback are nullable when eBay does not show them. Description, images, and item specifics exist only when includeProductDetails is enabled.
Can I retrieve the records as CSV or JSON?
Yes. The dataset can be exported as JSON, CSV, Excel, XML, or HTML from the Apify Console, and queried through the Dataset API.
What happens when I set startUrls?
The Actor uses those search, category, or item URLs as the source. searchQueries is not used, and constructed search filters (marketplace, category, buyingFormat, condition, sortBy, itemLocation, zipCode, distance, minPrice, maxPrice, soldListings) are ignored. The URL host is kept as provided.
Does the Actor return historical data?
No. Each run captures the state of the pages at run time. To track price or listing changes, schedule repeated runs and store the outputs yourself. Deduplicate later on itemId or url.
What counts as a billable result?
A start charge of $0.00005 applies once per run. Every listing written to the dataset charges dataset-item at $1.00 per 1,000. Enabling includeProductDetails adds product-details at $1.50 per 1,000 for each enriched listing.
Related datasets from Data Scrapers
- Amazon Search Scraper — Amazon search-result products that can be compared with eBay listings by title or identifier for cross-marketplace pricing.
- Etsy Scraper — Handmade and vintage product listings for the same catalog or category research as eBay crafts and collectibles.
- Gumtree Scraper — UK classified listings that sit alongside eBay UK (
EBAY_UK) for local marketplace coverage. - Flipkart Product Scraper — Flipkart product records for retail assortment and price comparison outside eBay.
- Target.com Product Scraper — Target.com product records for US retail pricing next to eBay US (
EBAY_US) listings.
Data Scrapers support
Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.