eBay AI Deal Finder
Pricing
from $7.00 / 1,000 listing analyzeds
eBay AI Deal Finder
Find underpriced eBay listings automatically using GPT-4o-mini product identification, sold vs active price comparison, auction sniping, and hidden gem detection. Supports 8 eBay marketplaces worldwide. Built for resellers, flippers, and arbitrage pros.
Pricing
from $7.00 / 1,000 listing analyzeds
Rating
5.0
(2)
Developer
WebDataLabs
Maintained by CommunityActor stats
7
Bookmarked
379
Total users
8
Monthly active users
6 hours ago
Last modified
Categories
Share
eBay Search Scraper with AI Product Data
Scrape any eBay search on 8 marketplaces and get one clean, flat row per listing — item ID, title, price, currency, condition, listing type, image and direct URL — with GPT-4o-mini turning messy multi-language titles into structured brand / model / variant / category fields.
What you get
One row per live listing, ready for a spreadsheet, a database or an AI agent.
- The listing, complete. eBay item ID, cleaned title, direct URL, price in the marketplace's own currency, condition, fixed-price vs auction, Best Offer flag and image.
- Auction detail. Auction rows carry the bid count, and — whenever eBay renders a countdown on the card — the hours remaining and an ISO close timestamp.
- AI product normalisation. GPT-4o-mini reads each title in any language and returns
brand,model,variant,productCategoryandisAccessory. "Sony Alpha 700 Spiegelreflex Kamera mit 2 Objektiven" becomes brandSony, modelAlpha 700, categorycamera. - Condition in one language. eBay's per-country condition wording ("Gebraucht", "Occasion", "Pre-Owned") is mapped to a single English set so a multi-marketplace dataset filters with one expression.
- Price-change tracking. Re-run the same search and each row is marked
NEW,PRICE_DROP(withpreviousPrice) orUNCHANGED. - 8 marketplaces. US, UK, Germany, France, Italy, Spain, Australia, Canada.
What this actor does NOT do
It does not estimate market value, score deals, or predict profit.
eBay's sold/completed search now requires a signed-in account — verified 2026-07-27 across all eight marketplaces, every IP, every browser fingerprint and every locale: the request is answered with a redirect to the sign-in page. Without real sold comparables, any "market value", "deal score" or "potential profit" would be a number we made up. So those fields are gone rather than guessed. What is left is real, and every field in it is documented below.
How you're billed
Pay-per-event, charged per listing delivered to the dataset. A query that eBay says has no exact matches delivers nothing and costs nothing beyond the actor start.
Input
| Field | Type | Description | Default |
|---|---|---|---|
| searchQuery | String | What to search for on eBay. Quotes, commas, curly quotes and non-English words all work. | iphone 13 pro |
| locale | Dropdown | eBay marketplace: US, UK, DE, FR, IT, ES, AU, CA | US |
| maxActiveListings | Number | How many listings to return (10–200) | 50 |
| trackPriceHistory | Boolean | Remember prices between runs to report PRICE_DROP | true |
| proxyConfiguration | Proxy | Residential strongly recommended | Apify Residential |
Inputs from older versions of this actor (minProfitAmount, minProfitPercent, auctionEndingWithinHours, maxBidCount, allowSimilarComparables, maxSoldListings, dealTypes) are accepted and ignored, with a warning naming them — existing saved tasks and schedules keep running instead of breaking.
Output
A verbatim record from a verification run (consola playstation 5 on ebay.es):
{"productId": "227445925297","title": "Sony PlayStation 5 PS5 825GB Edición Disco (CFI-1215A) con Mando y Cables","url": "https://www.ebay.es/itm/227445925297","currentPrice": 241.89,"currency": "EUR","condition": "Used","listingType": "auction","acceptsBestOffer": false,"imageUrl": "https://i.ebayimg.com/images/g/T0oAAeSwdhFqUWae/s-l140.jpg","bidCount": 42,"auctionEndsAt": "2026-07-31T14:46:35.786Z","hoursRemaining": 72,"brand": "Sony","model": "PlayStation 5","variant": "825GB Edición Disco (CFI-1215A)","productCategory": "console","isAccessory": false,"changeType": "UNCHANGED","previousPrice": null,"searchQuery": "consola playstation 5","marketplace": "ES","scrapedAt": "2026-07-28T14:46:57.911Z"}
Note condition: "Used" — eBay.es displayed "Usado"; every marketplace's wording is mapped to the same English set.
Fields
| Field | Type | Always populated? |
|---|---|---|
productId | string | Yes — eBay's item ID |
title | string | Yes |
url | string | Yes |
currentPrice | number | Yes — cards with no readable price are skipped, never delivered empty |
currency | string | Yes — ISO 4217, the marketplace's own; no FX is applied |
condition | string | null | New, New (Other), Open Box, Pre-owned, Used, Refurbished, For Parts. Null when eBay's card shows no condition |
listingType | string | Yes — auction, buy_it_now or classified |
acceptsBestOffer | boolean | Yes |
imageUrl | string | null | Null only if eBay served no image |
bidCount | number | null | Auctions only — null (not 0) for fixed-price. This is the reliable "is it an auction" signal |
auctionEndsAt | string | null | ISO 8601. Auctions only, and only where eBay's card shows a countdown |
hoursRemaining | number | null | Same coverage as auctionEndsAt |
brand | string | null | AI. Null when the title names no brand |
model | string | null | AI. Null when the title states no concrete model |
variant | string | null | AI. Storage / size / colour / generation |
productCategory | string | null | AI. One of 42 categories |
isAccessory | boolean | null | AI. A filter you can apply — this actor never drops a row because of it |
changeType | string | null | NEW, PRICE_DROP, UNCHANGED. Null when price history is off |
previousPrice | number | null | Only when changeType is PRICE_DROP |
searchQuery, marketplace, scrapedAt | string | Yes |
Views
Overview (price, condition, link) · AI product data (brand/model/variant/category) · Auctions (bids, hours left, close time) · Full record.
Honest coverage numbers
Measured over 1,050 rows across 24 runs on all 8 marketplaces, 2026-07-28:
| Field | Populated | Why the gap is genuine |
|---|---|---|
| id, title, url, price, currency, listing type, Best Offer, image | 100% | — |
productCategory | 97–100% | The listing fits none of the 42 categories |
condition | 90–92% | eBay itself shows no condition on some cards (70–100% by marketplace) |
brand | 85–99% | The title names no brand |
model | 81–96% | The title states no concrete model |
variant | 66–79% | The title states no storage / size / colour |
bidCount | 100% of auctions | Null for fixed-price listings by design |
auctionEndsAt, hoursRemaining | auctions with a countdown | eBay omits the countdown on one of its two card layouts |
The AI fields are ranges because they depend on how descriptive the titles are. A phone or camera search sits at the top of each range; a search that returns bundles and in-game items ("ALL Event Pokémon bundle distributions") sits at the bottom, because those listings genuinely have no brand or model to extract. The model is instructed to return null rather than guess.
Nothing is ever filled with "Unknown", "N/A" or a 0 price. A field that cannot be known is null and says so here.
Verified in the same rounds: zero rows containing HTML, [object Object], placeholder strings, duplicate item IDs, or mis-parsed European decimals; listingType and bidCount never disagreed; and the delivered row count equalled the dataset item count and the charged event count on every run.
Reliability
- eBay's sign-in wall and its localized "Security measure" interstitial are both HTTP 200 pages. This actor classifies the page body and treats them as a block — it fails loudly rather than reporting them as a successful scrape of zero listings.
- A query that genuinely has no exact matches succeeds with zero rows and says so. eBay's "you might also like" substitutes are not delivered and not billed, because they are not what you searched for.
- Every run writes a machine-readable
OUTPUTrecord to the key-value store:rowsPushedToDataset,rowsCharged,aiEnriched,pagesFetched,cardsDroppedNoPrice,countsReconcileand any warnings. The delivered row count is checked against the dataset's own item count. - The run is bounded by a wall-clock budget, so a bad stretch of proxy IPs produces a fast partial result instead of an hour of billed compute.
Use cases
- Price research — what a model actually lists for, across 8 countries, in one dataset
- Reseller sourcing — filter by condition, Best Offer, or auctions ending soon
- Catalogue building — messy marketplace titles normalised into brand / model / variant
- Repricing & monitoring — schedule the same search and read
PRICE_DROP - Automation — feed n8n, Zapier or Make; the flat one-record-per-listing shape needs no reshaping
Limitations, stated up front
- Active listings only. eBay's sold/completed search requires a signed-in account, so no sold prices, no market value and no deal scoring — see above.
- Up to 200 listings per run (eBay serves 60 per page; this actor reads at most 5 pages).
- eBay truncates long titles on its search-results page with a trailing
.... That ellipsis is eBay's; the full title exists only on the listing page. - AI fields need
OPENAI_API_KEY. Without it every listing is still delivered, with the five AI fieldsnulland a warning in the run output. - No currency conversion, anywhere. Prices are in the searched marketplace's currency.
hoursRemainingis eBay's own countdown at fetch time, soauctionEndsAtis accurate to about a minute.