eBay Sold Listings API avatar

eBay Sold Listings API

Pricing

from $2.00 / 1,000 results

Go to Apify Store
eBay Sold Listings API

eBay Sold Listings API

Extract recent sold eBay listings with prices, shipping costs, sale dates, conditions, sellers, and URLs. Search eight marketplaces with date, condition, and price filters, then export structured data or access it through the Apify API.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Epic Scrapers

Epic Scrapers

Maintained by Community

Actor stats

0

Bookmarked

37

Total users

13

Monthly active users

5 days ago

Last modified

Share

eBay Sold Listings API: real sold prices from 17 eBay marketplaces, fees removed

eBay Sold Listings API turns any eBay search, pasted as a URL or typed as a keyword, into a spreadsheet of completed eBay sales: what sold, for how much, when, as an auction or Buy It Now, and from which seller. Use it to price items for resale, value trading cards and collectibles, check demand before you buy stock, or feed comps into your own pricing app.

  • Paste the eBay search you built. Pick filters in eBay's sidebar (Model, storage, condition, price, brand) and paste the address bar. eBay applies those filters itself, so you get the sales you see on eBay, and the run doesn't pay for listings it would throw away.
  • Sold prices without eBay's buyer fee. On ebay.co.uk, ebay.fr and ebay.it, eBay adds a Buyer Protection fee to private sellers' prices in search results. This actor finds the private sellers and removes the fee, so soldPrice is the price the item sold for. The shown price and the fee are kept in their own fields. We checked the result against eBay's item pages.
  • Never charged for a block. If eBay blocks the requests, the run fails with a clear message. It doesn't report "success" with an empty dataset. You pay only for listings that are saved, so a blocked run costs nothing for results.
  • Only sales of your product. When eBay has few exact matches, it pads the page with "results matching fewer words". The actor skips those. eBay's search is also loose and returns other models: "playstation 5 slim" brings PlayStation 4 sales, "iphone 14" brings iPhone 14 Pro and iPhone 12. The actor drops those, and excludeKeywords removes graded cards, boxes only, parts and other look-alikes, so your median isn't pulled off by the wrong items.
  • 17 marketplaces, each in its own currency. US, UK, Germany, France, Italy, Spain, Canada, Australia, Netherlands, Austria, Switzerland, Ireland, Poland, Hong Kong, Malaysia, Philippines and Singapore. Each one was tested with a live run. Prices always come in the marketplace's currency, whatever the proxy location.
  • Price statistics included. Turn on Add price statistics for the median, quartiles, min, max and mean per keyword, with accepted Best Offers left out because eBay hides their real price. Not charged.
  • Pay per sold listing, no subscription. $3.50 per 1,000 sold listings, less on paid Apify plans. No eBay account, API key or proxy setup. Export to JSON, CSV, Excel or Google Sheets, or call it from your own code.

Scope: This actor returns sold (completed) listings. For live listings that are for sale now, use eBay Search Results Scraper.

What can you do with eBay Sold Listings API?

GoalHow
Get one exact modelSearch on eBay, tick Sold items, pick the Model filter in the sidebar and paste the URL into eBay search URLs.
Price an item for resaleSearch the item, turn on Add price statistics and read the median and quartiles in PRICE_STATS.
Value trading cards and collectiblesSearch in the card category and exclude graded copies with excludeKeywords: ["psa", "bgs", "cgc", "graded"].
Check demand before you buy stockCompare the number of sales in the last 30 days across products. SUMMARY has eBay's total sold count for each keyword.
Compare auctions and fixed-price salesFilter on listingType and compare soldPrice and bidCount.
Compare countriesRun the same keyword on several marketplaces. Each run returns that marketplace's currency.
Search one category onlyFind the ID in our eBay category ID lookup and set categoryId.
Add sold comps to your appCall the actor through the Apify API with a keyword and read the rows and PRICE_STATS back as JSON. See Use through the Apify API.

How it compares

What you needeBay Sold Listings APITypical sold-listing scrapers
UK, FR and IT private-seller pricesBuyer Protection fee removed; shown price and fee kept separatelyPrice includes the fee
eBay blocks the scraperRun fails with the reason; no result chargesRun "succeeds" with 0 results
"Results matching fewer words"Skipped and counted in the summarySaved and charged as if they matched
Leaving out graded cards or partsexcludeKeywords, sent to eBay and checked again on titlesEdit the keyword and hope
Marketplaces17Usually 8
CurrencyAlways the marketplace currencyCan follow the proxy location (for example JPY)
Price statisticsMedian, quartiles, min, max and mean, not chargedMissing, or an extra charge per keyword
Best Offer salesFlagged with bestOfferAccepted and left out of price statisticsVaries; often counted at the asking price
Totals vs. records returnedSUMMARY explains the difference for each keywordNo explanation

An alternative to Terapeak and WorthPoint

eBay's Terapeak shows sold data inside Seller Hub, but only to a signed-in eBay seller, one search at a time, and without an API. WorthPoint and similar price guides are monthly subscriptions. This actor gives you the same recent sold listings as raw rows you can sort, chart, feed to a spreadsheet or an AI assistant, or call from your own app, and you pay only for the listings you collect. eBay search keeps about the last 90 days of sales. For a longer history, schedule a run and keep the datasets (see scheduled runs).

Quick start

  1. Click Try for free and sign in to Apify. The free plan's monthly credit covers about 1,400 sold listings.
  2. Search for your product on eBay, tick Sold items, and pick filters in the sidebar, for example Model and Condition.
  3. Copy the address bar and paste it into eBay search URLs. For a first run, set Max results per search to 20.
  4. Click Start. When the run finishes, open the Output tab and export the data.
{
"startUrls": [
{
"url": "https://www.ebay.com/sch/i.html?_nkw=iphone+13&_sacat=9355&LH_Sold=1&LH_Complete=1&Model=Apple%2520iPhone%252013&_dcat=9355"
}
],
"maxItems": 20
}

You can also type products into Search keywords and pick the eBay marketplace, for example {"keywords": ["nintendo switch oled"], "site": "ebay.co.uk"}. Keywords are quicker to set up. URLs are more precise, because eBay's own filters are exact and keywords match loosely.

What data can you extract?

Every row is one sold listing.

GroupFields
SalesoldPrice, currency, soldAt, soldDateText, listingType, bidCount, bestOfferAccepted, hasBestOffer, quantitySold
FeesdisplayedPrice (price as eBay shows it), buyerProtectionFee, sellerType
ShippingshippingPrice, shippingIsEstimate, shippingText, totalPrice
ListinglistingId, title, url, imageUrl, condition, categoryId, categoryName, itemLocation, isPromoted, freeReturns, returnsAccepted
Sellerseller.username, seller.feedbackScore, seller.feedbackPercent, seller.isStore
SearchsearchQuery, searchUrl, site

The run also saves to the key-value store:

  • SUMMARY: one entry per keyword or URL with searchQuery, searchUrl, site, currency, advertisedTotal (eBay's count of matching sold listings), pagesFetched, itemsSeen, itemsSaved, filtered (counts per reason: soldBeforeDateRange, soldAfterDateRange, noSoldDate, excludedKeyword, otherModel, priceOutsideRange, alreadySaved, duplicate, notMatchingQuery, unparseable), currencyMismatches, history (with Only new sales: the history record's key and salesKnownBefore) and stoppedBecause (max_items_reached, date_range_end, no_more_pages, no_results, ebay_pagination_cap, low_yield, reached_saved_sales, newer_sales_cap, blocked, error or charge_limit_reached). With searches on several marketplaces, the top-level site and currency are null.
  • PRICE_STATS (only with Add price statistics): per keyword count, countInPriceStats, min, p25, median, mean, p75, max, currency and the date span. Best Offer accepted sales are left out of the price figures. This is not charged.

Track sold prices over time with scheduled runs

1. Save your input as a task

Open the actor, paste your eBay search URLs or set your keywords, turn on Only new sales, then click Save as a new task. Each run then saves only the sales the earlier runs haven't, so you never pay twice for the same sale.

2. Schedule the task

In Apify Console, go to Schedules, click Create new, choose how often to run, and add your task. See Schedules and How to create a schedule.

Watch how to schedule an Actor:

Common schedules:

Use caseFrequencyCron expressionSuggested days
Daily price trackingDaily0 6 * * *2
Weekly market reportWeekly (Monday)0 6 * * 18
Monthly demand checkMonthly0 6 1 * *32

With Only new sales on, set days a little longer than the time between runs. The overlap catches sales eBay lists late, and the sales already saved are skipped for free.

3. Send the results to a spreadsheet

Connect Google in the task's Integrations tab to save every run to Google Sheets or Google Drive:

4. Combine runs

Every row has listingId and soldAt, so runs without Only new sales are easy to deduplicate too. The runs' datasets together are your sales history for any date range: filter on soldAt. Group by week of soldAt to follow the median price, or count rows per week to follow demand.

Input reference

FieldTypeDefaultEffect
startUrlsArray of URLsEmptyeBay search URLs, one search per URL. The URL sets the marketplace and keeps its filters, see Search by URL.
keywordsArray of stringsEmptyProducts to look up, one search per entry. Give startUrls, keywords or both.
siteString"ebay.com"Marketplace for keyword searches, see the table below. URLs use their own site.
maxItemsInteger100Maximum listings saved per keyword or URL.
daysInteger30Only listings sold in the last N days (whole days, UTC). The run stops once sales get older.
onlyNewSalesBooleanfalseSkip sales an earlier run of the same search already saved. See Only new sales.
excludeKeywordsArray of stringsEmptyWords or phrases to leave out. Single words are sent to eBay as minus terms (-psa), and every entry is also removed from titles after the search (whole words, case- and accent-insensitive).
skipOtherModelsBooleantrueLeave out sales of a different model, see Other models. Keyword searches only.
conditionString"all""all", "new", "used", "refurbished" or "for_parts". Keyword searches only.
listingTypeString"all""all", "auction" or "buy_it_now". Buy It Now includes Best Offer accepted sales. Keyword searches only.
sellerTypeString"all""all", "private" or "business". eBay supports this filter on its European sites, where it also limits results to sellers registered in that country. Applies to URLs too, unless the URL has its own seller type.
categoryIdStringEmptyeBay category ID, the number after _sacat= in an eBay search URL. Look IDs up in our eBay category ID lookup. Category IDs differ between some marketplaces. Keyword searches only.
minPriceNumberEmptyMinimum price in the marketplace currency. Keyword searches only.
maxPriceNumberEmptyMaximum price in the marketplace currency. Keyword searches only.
includeSummaryBooleanfalseSave price statistics per keyword to PRICE_STATS.

Supported marketplaces

Every marketplace below was tested with a live sold-listings run in October 2026.

siteCountryCurrencyBuyer Protection fee removed
ebay.comUnited StatesUSDNot applicable
ebay.co.ukUnited KingdomGBPYes
ebay.deGermanyEURNot applicable
ebay.frFranceEURYes
ebay.itItalyEURYes
ebay.esSpainEURNot applicable
ebay.caCanadaCADNot applicable
ebay.com.auAustraliaAUDNot applicable
ebay.nlNetherlandsEURNot applicable
ebay.atAustriaEURNot applicable
ebay.chSwitzerlandCHFNot applicable
ebay.ieIrelandEURNot applicable
ebay.plPolandPLNNot applicable
ebay.com.hkHong KongHKDNot applicable
ebay.com.myMalaysiaMYRNot applicable
ebay.phPhilippinesPHPNot applicable
ebay.com.sgSingaporeSGDNot applicable

"Not applicable" means eBay shows that marketplace's prices without a buyer fee. We compared search prices with item-page prices for private sellers on DE, ES, IE, NL, AT and PL and found no fee.

Ready-to-run examples

Two PlayStation 5 editions, used, from an eBay URL

Search playstation 5 on eBay, tick Sold items, then pick two editions under Model and Used under Condition. eBay joins several values of one filter with %7C (|):

{
"startUrls": [
{
"url": "https://www.ebay.com/sch/i.html?_nkw=playstation+5&_sacat=139971&LH_Sold=1&LH_Complete=1&Model=Sony%2520PlayStation%25205%2520Digital%2520Edition%7CSony%2520PlayStation%25205%2520Slim%2520Digital%2520Edition&LH_ItemCondition=3000&_dcat=139971"
}
],
"days": 30,
"maxItems": 200,
"includeSummary": true
}

Value raw (ungraded) trading cards

{
"keywords": ["charizard base set 4/102"],
"site": "ebay.com",
"categoryId": "183454",
"days": 30,
"excludeKeywords": ["psa", "bgs", "cgc", "graded", "proxy"],
"maxItems": 200,
"includeSummary": true
}

183454 is the ebay.com category for single trading cards (CCG Individual Cards). Searching inside it keeps out sealed packs, binders and card lots. Find other categories in the eBay category ID lookup.

UK resale price for a console, auctions only

{
"keywords": ["nintendo switch oled"],
"site": "ebay.co.uk",
"listingType": "auction",
"condition": "used",
"days": 14,
"maxItems": 100
}

Daily run that saves only new sales

Schedule this daily. The first run saves the last 2 days of sales; later runs save only sales the earlier runs haven't saved.

{
"startUrls": [
{
"url": "https://www.ebay.de/sch/i.html?_nkw=lego+75192&LH_Sold=1&LH_Complete=1"
}
],
"days": 2,
"onlyNewSales": true,
"maxItems": 300
}

Analyze the results with ChatGPT or Claude

Export the dataset as CSV (the Prices & fees view keeps it small) and attach it to a chat. Some prompts to start with:

Fair price. "These are eBay sold listings for one product. Ignore rows where bestOfferAccepted is true. Give me the median soldPrice by condition and by listingType, and a price I can list at to sell within a week."

Outliers. "Find listings whose soldPrice is far from the median for the same product. Use the titles to explain why (bundle, parts only, wrong model)."

Trend. "Group sales by week of soldAt. Show the number of sales and the median price per week, and tell me whether the price is going up or down."

The dataset is also available through the Apify API and integrations such as Make, Zapier and n8n.

Output

Results go to the run's default dataset. Use the views Overview, Prices & fees or Sellers & categories, or export everything as JSON, CSV, Excel, XML or HTML.

This is a real row from a nintendo switch oled search on ebay.co.uk on October 3, 2026. eBay showed £128.62 in search results. The item page shows £123.00, and the £5.62 difference is the Buyer Protection fee:

{
"searchQuery": "nintendo switch oled",
"searchUrl": null,
"site": "ebay.co.uk",
"listingId": "237102372592",
"title": "Nintendo Switch OLED Model HEG-001 Handheld Console - 64GB - White",
"url": "https://www.ebay.co.uk/itm/237102372592",
"imageUrl": "https://i.ebayimg.com/images/g/L2cAAeSwt-dqv-Rj/s-l225.jpg",
"soldPrice": 123,
"currency": "GBP",
"displayedPrice": 128.62,
"buyerProtectionFee": 5.62,
"shippingPrice": null,
"shippingIsEstimate": false,
"shippingText": "Postage not specified",
"totalPrice": null,
"listingType": "buy_it_now",
"bidCount": null,
"bestOfferAccepted": false,
"condition": "Pre-owned",
"conditionDetails": null,
"categoryId": "139971",
"categoryName": "Video Game Consoles",
"soldAt": "2026-10-03T00:00:00.000Z",
"soldDateText": "Sold 3 Oct 2026",
"seller": {
"username": "lpeming",
"feedbackScore": 237,
"feedbackPercent": 100,
"isStore": false
},
"sellerType": "private",
"itemLocation": null,
"quantitySold": null,
"isPromoted": false,
"hasBestOffer": true,
"freeReturns": false,
"returnsAccepted": null
}

Notes on fields

  • soldPrice is the item price without shipping and without the Buyer Protection fee. displayedPrice is the price as eBay shows it in search results. On markets without the fee they are equal and buyerProtectionFee is null.
  • On ebay.co.uk, ebay.fr and ebay.it the actor runs an extra search for private sellers only, to find which sales include the fee. Listings it finds there get sellerType: "private" and have the fee removed. The others (business and overseas sellers) keep the shown price, with buyerProtectionFee: 0. If that extra search is blocked, the listings it didn't reach get buyerProtectionFee: null, and the log says so.
  • Best Offer: when bestOfferAccepted is true, eBay shows the listing's asking price, struck through. The accepted offer was lower, and eBay doesn't publish it in search results or on the item page. The actor doesn't guess it: soldPrice is the asking price (fee removed where it applies), and these sales are left out of PRICE_STATS.
  • shippingPrice is 0 for free shipping and null when eBay doesn't show a cost. eBay shows "Postage not specified" ("Keine Angaben zum Versand", "Livraison non spécifiée", …) for most domestic sold listings in the UK and EU, so shippingPrice and totalPrice are often null there. The actor never invents a shipping cost. shippingIsEstimate is true when eBay labels the cost as an estimate.
  • totalPrice is soldPrice + shippingPrice when both are known. It doesn't include taxes, import charges or buyer fees.
  • soldAt is the sale day as eBay prints it, at 00:00 UTC. eBay doesn't give the time of sale in search results.
  • categoryName is filled when the category appears in eBay's category list for the search. Otherwise it is null, and categoryId is still set.
  • seller.feedbackPercent is eBay's positive-feedback percentage for the last 12 months, as shown in search results.
  • quantitySold is filled only when eBay shows a sold count on the card. Otherwise it is null.
  • returnsAccepted is true when eBay advertises free returns, and null otherwise. Search results don't show other return policies.
  • conditionDetails is always null and is kept for compatibility with earlier versions.
  • Missing values are null.

FAQ

Why did my run fail?

Each eBay request is retried up to 5 times with a new IP, so short network problems and single blocks don't stop a run. The actor fails on purpose only when eBay keeps blocking its requests (HTTP 403 or 429, rejected tokens, a login wall or an unexpected response) and nothing could be saved. The status message and the log give the reason, and SUMMARY has stoppedBecause: "blocked" (or "error" for an unexpected error). No results were saved, so no results were charged. Try again later. If some searches worked, the run finishes, the status message lists the searches that stopped early, and you pay only for the saved listings. A start URL that isn't an eBay search URL is skipped with a warning when there are other searches; it fails the run only when nothing is left to search.

Why did I get no results?

eBay has no sold listings that match your keyword, filters and date range. The run succeeds, and its status message starts with "No results" and names the keyword. When eBay has no exact matches, it fills the page with "results matching fewer words". The actor skips those and counts them as notMatchingQuery in SUMMARY, because they aren't sales of your product.

Why is the number of records lower than eBay's total?

Check SUMMARY. advertisedTotal is eBay's count for the whole sold history, usually about 90 days. Records can be fewer because of maxItems, your date range (date_range_end), titles removed by excludeKeywords or skipOtherModels (otherModel), eBay stopping early (ebay_pagination_cap), or the actor stopping a search that kept finding nothing (low_yield, newer_sales_cap, see below). filtered gives the count for each reason.

How do I search by URL?

  1. Open the eBay site you want (ebay.com, ebay.co.uk, ebay.de, …) and search for your product.
  2. Tick Sold items (optional: the actor always searches sold listings).
  3. Pick filters in the sidebar: Model, storage, colour, brand, condition, price, buying format, item location, and so on.
  4. Copy the address bar and paste it into eBay search URLs.

The URL's own filters go to eBay unchanged. The actor always adds the sold-listings filter, sorts by most recently ended (the date range depends on it, so another sort order in the URL is replaced and the log says so) and sets the page size. The date range, maxItems, excludeKeywords and sellerType also apply to URLs. condition, listingType, categoryId, minPrice, maxPrice and skipOtherModels apply only to keywords, because a URL carries its own filters. Every row has the URL that found it in searchUrl. URLs from different marketplaces can be mixed in one run.

eBay's Model filter is the most precise way to get one model. On ebay.com, "iphone 13" with Model "Apple iPhone 13" returned only iPhone 13 sales, while the keyword alone also returned iPhone 12, 13 Pro and iPhone 5s sales. Listings whose seller didn't fill in the model are left out by eBay, the same as on the website.

Why did a search stop with low_yield or newer_sales_cap?

eBay applies the marketplace, category, price, condition and URL filters itself. The date range, skipOtherModels and multi-word excludeKeywords are checked by the actor after eBay returns a page. When none of a search's results pass those checks, paging on would go through eBay's whole sold history without saving anything. So the actor stops a search:

  • low_yield: 5 pages in a row (600 listings) had no sale that passed your filters. The log names the filter that removed the most listings. For a precise model, use a URL with eBay's Model filter.
  • reached_saved_sales: with Only new sales on, 5 pages in a row held only sales an earlier run saved. This is the normal end of a scheduled run.
  • newer_sales_cap: only for older tasks that still send the deprecated soldTo input. With a soldTo date in the past, the actor skips the newer sales page by page, because eBay can't start a search at a date. It stops after 50 pages (6,000 listings) of newer sales. Use a later soldTo, or narrow the search with filters.

Why are some listings of other models left out?

eBay's sold search matches loosely: for "playstation 5 slim konsole" on ebay.de it also returns PlayStation 4 and PlayStation 3 sales (their titles contain "Slim", "Konsole" or "5 Spiele"), and for "iphone 14 128gb" it returns iPhone 14 Pro, 14 Plus and 12 Pro. With skipOtherModels on (the default), the actor looks at each word followed by a number in your keyword ("playstation 5", "iphone 14", "galaxy s23") and leaves out a sale when:

  • the title has that word only with a different number ("PlayStation 4", "iPhone 12", "iPhone 5s" for "iphone 13"), or
  • every "word number" in the title is followed by pro, max, plus, mini, ultra, lite or fe and your keyword doesn't contain that word ("iPhone 14 Pro Max" for "iphone 14", but not for "iphone 14 pro max").

The check is deliberately cautious: titles that don't contain the word with a number ("PS4 Slim", "I Phone 14"), years such as "Pokemon 2023 151", and sizes such as "1 TB" or "10.2 inch" are kept. Skipped sales are counted as otherModel in SUMMARY. The check applies to keyword searches; for a URL, pick eBay's Model filter instead. Set skipOtherModels to false to keep everything eBay returns, for example if "iphone 14" should include the Pro and Plus.

How far back can I go?

eBay keeps roughly the last 90 days of sold listings. Dates before that return nothing. To keep a longer history, schedule the run with Only new sales and keep the datasets.

How does Only new sales work?

With onlyNewSales: true, each search remembers the sales it saved, by listing ID and sale day, in the key-value store ebay-sold-listings-history on your Apify account. A search is the marketplace, the keyword or URL, and its filters; days and maxItems can change without starting a new history. On later runs, sales already in the history are skipped, not charged, and counted as alreadySaved in SUMMARY. A listing that sells again on a later day (multi-quantity listings) counts as a new sale. Sales older than 100 days are forgotten, since eBay no longer shows them. To start over, delete the record named in SUMMARY (history.key) or the whole store.

Changing anything in the search, even one filter in a URL, starts a new history. Don't run the same search twice at the same time with this option on: the run that finishes last overwrites the other's history.

Can I get sales between two dates?

Not directly: eBay's search can't start at a date, so the actor always starts at the newest sales. Use days to go back from today, and filter the dataset on soldAt for a range. For ranges further back, schedule a run with Only new sales and combine the datasets. Older tasks that send soldFrom and soldTo keep working; soldTo logs a warning because skipping the newer sales makes those runs slow.

Is the Buyer Protection fee always removed correctly?

The fee schedule (£/€0.10 + 7% of the price up to 20, 4% from 20 to 300, 2% from 300 to 4,000) matched eBay's item-page price for every private-seller sale we checked, from £2 to £2,500, on the UK, French and Italian sites. Above 4,000 the actor assumes no further percentage. We haven't checked prices that high.

Can I see the accepted Best Offer price?

No. eBay doesn't publish it to buyers, in search results or on the item page. The actor flags these sales with bestOfferAccepted instead of guessing.

How do I find an eBay category ID?

Search the eBay category ID lookup by name, or open a category on eBay and copy the number after _sacat= in the address bar. 0 means all categories. The same number can mean a different category on another marketplace, so look the ID up for the site you search.

Can I call it from my own app or AI agent?

Yes. Start a run through the Apify API with a keyword and read the rows back as JSON; the examples in Use through the Apify API show how. AI agents can call it as a tool through the Apify MCP server. Keep maxItems small (for example 20 to 50) when a person or an agent is waiting for the answer.

How fast is it?

In our tests on October 3, 2026, each run timed twice with different keywords:

RunTime
50 sold listings on ebay.com7 seconds
3 keywords × 100 sold listings16–18 seconds
500 sold listings on ebay.com14–16 seconds
100 sold listings on ebay.co.uk16–20 seconds

UK, French and Italian runs take longer because of the extra private-seller search that removes the Buyer Protection fee. We timed these runs from our own machine through Apify Residential Proxy. On Apify, add a few seconds for the run to start.

Do I need proxies, an eBay account or an API key?

No. The actor uses Apify Residential Proxy in the marketplace's country, and handles retries itself. If that country keeps failing, the last retries use a residential IP in another country. eBay returns the same results there, because the actor asks for the marketplace and its currency explicitly.

The actor collects publicly visible sold-listing data and no buyer data. Seller usernames are public on eBay. You are responsible for how you use the data, including eBay's terms and laws such as GDPR.

Cost

This actor uses pay-per-event pricing. You pay for each sold listing saved to the dataset:

EventPrice per 1,000 resultsCharged when
result$2 to $3.50, by Apify planA sold listing is saved to the default dataset.

Apify also charges its standard tiny "Actor start" event ($0.00005) when a run starts. Nothing else is charged:

  • A run that eBay blocks saves nothing, so it costs nothing for results.
  • Listings skipped by filters, date range, exclude keywords, "fewer words" fallbacks or Only new sales aren't saved or charged. A search that keeps finding nothing is stopped (low_yield).
  • SUMMARY and PRICE_STATS aren't charged.
  • The extra private-seller search on ebay.co.uk, ebay.fr and ebay.it isn't charged.

Example runs at the free-plan price:

RunCost
50 sold listings for one product$0.18
1,000 sold listings$3.50
5 products × 100 sold listings, with statistics$1.75
3 products × 30 sold listings, daily for 30 days$9.45

Set a maximum cost per run in the run options. The actor stops cleanly when it's reached, and the status message says so. The Pricing tab always shows the current prices.

Use through the Apify API

curl "https://api.apify.com/v2/acts/epicscrapers~ebay-sold-listings-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-X POST \
-H "Content-Type: application/json" \
-d '{"keywords": ["vintage seiko"], "site": "ebay.com", "days": 14, "maxItems": 50}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('epicscrapers/ebay-sold-listings-api').call({
keywords: ['vintage seiko'],
site: 'ebay.com',
days: 14,
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const summary = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('SUMMARY');
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("epicscrapers/ebay-sold-listings-api").call(run_input={
"keywords": ["vintage seiko"],
"site": "ebay.com",
"days": 14,
"maxItems": 50,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Responsible use

Use this actor only for lawful purposes. Follow eBay's terms, applicable laws and data protection rules. Don't use the data to contact or profile individual buyers or sellers.

Support

Report problems or request features in the Issues tab. Include the run ID, the input and what you expected. The SUMMARY record usually shows what happened. Don't include your API token.

This actor is not affiliated with or endorsed by eBay Inc. "eBay" is a trademark of eBay Inc.