eBay Product & Listings Scraper
Pricing
Pay per event
eBay Product & Listings Scraper
Search eBay's live active listings by keyword. Get title, price, condition, buying format, item URL, and thumbnail per card. Filter by category, condition, price range, and buying format. We handle the warm-up cookies and retries so you get clean rows every run.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
eBay Product & Listings Scraper
The devil's in the data. ๐
$1.25 / 1,000 results โ pay only for results that land, no credit card to try.
Search eBay's live "for sale" listings by keyword and get back structured rows: title, price, condition, buying format, item URL, and thumbnail โ ready for reseller pricing tools, price-intelligence pipelines, and market research. eBay's search page fights back with a first-request block; we handle the warm-up cookies, the retries, and the fingerprint rotation so your dataset stays clean.
๐ฏ What this scrapes
One row per active eBay listing card matching your search. Sponsored placeholder cards ("Shop on eBay") and malformed cards are filtered out automatically โ you only get real listings.
| Field | Type | Description |
|---|---|---|
item_id | string | eBay item ID, parsed from the item link |
title | string | Listing title, accessibility suffix stripped |
price | number | null | Listing price in USD; null on an unresolvable range/text price |
currency | string | Fixed "USD" for v1 (ebay.com only) |
condition | string | null | Item condition (e.g. "Pre-Owned", "Open Box") |
buying_format | string | null | One of "auction", "fixed_price", "best_offer", "unknown" |
bids_count | integer | null | Bid count, auction listings only |
item_url | string | Canonical https://www.ebay.com/itm/<item_id> link |
image_url | string | null | Thumbnail image URL |
query | string | Echo of your search query |
scraped_at | string | ISO 8601 UTC timestamp |
๐ฅ Features
- Keyword search, no login required โ search eBay's live listings the same way a shopper does, no account or API key needed on your end.
- Filter by category, condition, price range, and buying format โ narrow results before you pay for a single row.
- Sponsored and malformed cards filtered automatically โ placeholder "Shop on eBay" cards and broken cards never reach your dataset.
- We rotate browser fingerprints โ
curl-cffiwith Chrome/Firefox/Safari TLS impersonation, so eBay's servers see real-browser traffic, not raw Python. - We handle the warm-up dance โ eBay's search endpoint 403s a cold request; we collect the bot-manager cookie first, then reuse that session for every search page.
- We retry with exponential backoff โ
408 / 429 / 5xxtrigger a retry sequence (2s โ 30s cap, up to 5 attempts), honouringRetry-After. - We rotate proxies and sessions on every block โ a fresh
session_idand a fresh impersonation profile on every 403, through Apify Proxy. - Clean, Pydantic-validated rows โ every dataset row passes schema validation before it lands. ISO 8601 timestamps, stable column names.
- Pay only for results that land โ no data, no charge beyond the small
actor-startwarm-up fee.
๐ก Use cases
- Reseller price-checking โ pull live asking prices for a product line before you list or restock, filtered by condition and price band.
- Price-intelligence pipelines โ feed
price/condition/buying_formatinto a downstream pricing model, refreshed on a schedule. - Market research โ sweep a category for buying-format mix (auction vs. fixed-price vs. best-offer) and price distribution.
- Arbitrage scouting โ compare
priceacrossmin_price/max_pricebands to spot underpriced listings worth flipping. - Competitive monitoring โ track how many active listings and what price range a competitor's product category holds right now.
โ๏ธ How to use it
- Open the Actor input form in Apify Console.
- Enter your
query(required) โ the same keywords you'd type into eBay's search box. - Optionally narrow with
categoryId,conditionIds,minPrice/maxPrice, orbuyingFormat. - Set
maxResultsto cap how many rows to collect (default 100, up to 1000). - Leave
proxyConfigurationon Apify Proxy (default) for stable, unblocked runs. - Click Start. Results stream into the default dataset as JSON, CSV, Excel, or XML.
Basic keyword search
{"query": "iphone 13","maxResults": 100}
Filtered search โ condition, price band, buying format
{"query": "fender stratocaster","maxResults": 50,"conditionIds": ["3000"],"minPrice": 200,"maxPrice": 1200,"buyingFormat": "fixed_price"}
๐ฅ Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | yes | โ | Search keywords, 1-200 characters |
maxResults | integer | no | 100 | Cap on rows collected, 1-1000 |
categoryId | string | no | โ | eBay numeric category ID |
conditionIds | string[] | no | โ | eBay numeric condition IDs |
minPrice | number | no | โ | Lowest price to include, USD |
maxPrice | number | no | โ | Highest price to include, USD (must be >= minPrice) |
buyingFormat | string | no | "any" | One of "any", "fixed_price", "auction", "best_offer" |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy configuration |
๐ค Output
One row per real (non-sponsored) listing card, up to maxResults. Export to JSON, CSV, Excel, or XML from the Apify Console.
Example row:
{"item_id": "196123456789","title": "Apple iPhone 13 Pro Max 256GB Unlocked","price": 270.74,"currency": "USD","condition": "Pre-Owned","buying_format": "best_offer","bids_count": null,"item_url": "https://www.ebay.com/itm/196123456789","image_url": "https://i.ebayimg.com/images/g/abc123/s-l500.jpg","query": "iphone 13 pro max","scraped_at": "2026-08-13T12:00:00+00:00"}
๐ฐ Pricing
This Actor is priced per-event โ you pay only for results that land in your dataset.
| Event | Price (USD) | When charged |
|---|---|---|
actor-start | $0.05 | Once at the start of each run |
result-row | $0.0012 | Per listing row written to the dataset |
A 100-row run costs $0.17 total. A full 1,000-row run costs $1.25 โ inside the $1.00-1.50/1,000 band the current eBay-scraper category charges, with a cleaner, actively-maintained dataset behind it.
๐ง Limitations
- Active listings only โ this Actor covers eBay's live "for sale" search. Sold/completed listings are a separate product.
ebay.com(US) only, v1 โ other eBay marketplaces and non-USD currencies are out of scope for this version.- Card-level data only โ description, seller feedback score, shipping cost, item specifics, and return policy require a detail-page fetch and aren't included.
- No seller identity โ seller username, store name, and feedback score aren't exposed on the search-result card.
- Point-in-time runs โ this Actor doesn't monitor for new listings continuously; schedule repeat runs via Apify's Scheduler if you need that.
- Unresolvable prices ship as
nullโ a range or starting-bid price that can't resolve to one number shipsprice: nullrather than a guessed value.
โ FAQ
Q: Do I need an eBay account or API key? No. This Actor searches eBay's public listings the same way a shopper does โ no login, no eBay Developer API key required.
Q: Can I filter by condition and price at the same time?
Yes โ conditionIds, minPrice, maxPrice, and buyingFormat all combine in a single search.
Q: What happens if eBay blocks the request? We rotate the session and browser fingerprint and retry the warm-up-then-search flow automatically. If a run ends with zero results, you'll see a clear status message explaining why (no matches vs. block-exhausted) rather than a silent empty dataset.
Q: Does this cover sold or completed listings? No โ this Actor covers active, currently-listed items only. Sold/completed listing data is a separate Devil Scrapes Actor.
Q: Can I get more than 1,000 results per run?
Not in a single run โ maxResults caps at 1000. Narrow your query or split by categoryId/price band and run multiple queries for larger coverage.
๐ฌ Your feedback
This Actor is built and maintained by Devil Scrapes. If a search returns fewer rows than expected, or you notice eBay's markup has shifted, open an issue on the Actor page and we'll patch it within a release cycle. The target blocks; we get back up.