eBay logo

Online shops · Live on Apify

eBay Sold Listings Scraper: Real Sold Prices and Dates

Search eBay sold and completed listings by keyword. You see what items really sold for, and when. eBay shows this only to signed-in users. So you use your own session or API key.

About $3.60 for 1,000 sold listings$0.0036 per sold listing + $0.005 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

itemId920040007475
titleApple iPhone 13 - 128 GB - Blue (Unlocked)
urlhttps://www.ebay.com/itm/920040007475

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: iphone 13 in Search queries. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Get eBay sold and completed listings by keyword: the real sold price, sale date, shipping, condition, bids, listing type, photo and item link, from 8 eBay sites. eBay shows sold results only to signed-in users, so you choose the access: your own eBay session (cookies from your browser) or your own key from a sold-data API.

Good for

  • Resellers and flippers: check what an item really sold for before you buy or list it.
  • Price research and appraisal: collect recent sold prices for a model, with condition and date.
  • Market analysts: compare auction and Buy It Now prices, or watch how prices change week by week with a schedule.

Not a good fit

  • Only sold and completed listings. For active listings use eBay search or another Actor.
  • eBay shows mostly the last 90 days of sales; a few older sales can appear. You cannot ask for older periods.
  • With your eBay session, the seller name is not shown on eBay's sold result cards, so seller is null. Paid shipping is often not shown either; then shipping is null (it is 0 for free shipping). Some API sources return them.
  • We tested your eBay session live on ebay.com, and API keys live on ebay.com, ebay.co.uk and ebay.de. The other sites use the same page format but were not tested live with a session.
  • For an accepted best offer, eBay hides the real amount. The row shows the listed price and priceType = best_offer_listed.
  • The field names are this Actor's own. They are not the same as other eBay sold Actors, so check your integration after you switch.

Who uses it

Resellers and flippers

Check what an item really sold for before you buy or list it.

Appraisers

Collect recent sold prices for a model with condition and date.

Market analysts

Compare auction and Buy It Now prices week by week.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.005Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Sold listing saved$0.0036 (from $0.00225 on paid Apify plans)One sold eBay listing saved to the dataset.
eBay results page read$0.02One page of eBay sold search results (up to 240 listings) read with your eBay session, even when your filters keep none of them. Blocked or failed requests are not charged.
API results page read$0.005One page of sold results read from the API service of your own key, even when your filters keep none of them. Failed requests are not charged.

Examples

  • One sold listing: about $0.0086.
  • 1,000 sold listings: about $3.60.
  • Every day 100 sold listings, for 30 days: about $10.95 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,300 sold listings.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Do I need an eBay account?

Yes, or a key from a sold-data API. eBay shows sold results only to signed-in users.

How far back does the data go?

Mostly the last 90 days. You cannot ask for older periods.

Why is seller or shipping empty?

eBay hides them on sold cards. Some API sources return them.

What about accepted best offers?

eBay hides the real amount. The row shows the listed price and marks it.

How fresh and complete is the data?

Rows come live from eBay (or the API) at run time, mostly newest sales first (eBay's own sort). eBay keeps mostly 90 days of sales and shows at most about 2000 results per search; use narrower words or filters for more.

Why do I see other models (for example iPhone 12) for "iphone 13"?

eBay's own search also returns related items. Turn on strictTitleMatch to keep only titles with every word.

Details

Step by step on Apify
  1. Open the Input tab. The search iphone 13, the site ebay.com (US) and Max sold listings per query = 20 are already filled in.
  2. Keep Data source = My eBay session. Paste your eBay cookies and your browser User-Agent (see the guide). Or pick an API service and paste your API key.
  3. Click Start.
  4. Open the Output tab. You see the Sold listings table with title, sold price, date, condition and type.
Use cases
TaskInputYou getKey fieldsNext step
Price check before buying or listingqueries: one model, maxItems: 50sold listingssoldPrice, condition, soldAtmedian price in a spreadsheet
Auction vs fixed pricebuyingFormat: auction or buy_it_nowsold listingslistingType, bids, soldPricecompare two runs
Weekly price trackingsoldWithinDays: 7, a schedulesold listings of the last weeksoldAt, soldPrice, itemIdGoogle Sheets or a webhook
Clean list for one exact modelstrictTitleMatch: true, minPriceonly matching titlestitle, soldPrice, epidyour pricing tool via API
Tips for better results
  • Use exact model words. eBay can mix in similar models.
  • Look at the median price, not one sale. It is a better guide.
  • Set a maximum cost per run. The tool stops and keeps what it saved.
Limits and good to know
  • Max cost per run: set it in the run options. The Actor stops before a page or row it cannot pay for, keeps what it saved and ends Succeeded with status PARTIAL
  • Failed run: you pay only the start and the pages that were really read before the stop
  • Limits we tested: up to 4000 rows in one run (about 7 minutes) and 20 searches in one run. eBay usually gives about 2000 sold rows per search (9 pages). A run stops reading at 30 minutes and saves a summary
  • Speed: about 240 rows in 5 seconds; 1000 rows in about 30 seconds (1 GB memory). Each new search waits 6–12 seconds

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "itemId": "920040007475",
  "title": "Apple iPhone 13 - 128 GB - Blue (Unlocked)",
  "url": "https://www.ebay.com/itm/920040007475",
  "soldPrice": 230,
  "soldPriceMax": null,
  "priceType": "sold",
  "currency": "USD",
  "shipping": 0,
  "totalPrice": 230,
  "soldAt": "2026-10-14",
  "condition": "Pre-Owned",
  "bids": null,
  "listingType": "buy_it_now",
  "bestOfferAccepted": false,
  "seller": null,
  "sellerFeedbackScore": null,
  "sellerPositivePercent": null,
  "location": "United States",
  "image": "https://i.ebayimg.com/images/g/cokAAeSwholqz9qG/s-l1600.webp",
  "epid": "22049282568",
  "site": "com",
  "query": "iphone 13",
  "source": "ebayCookies",
  "fetchedAt": "2026-10-15T01:11:41.395Z"
}

Use it from code

Actor ID: cliqtomedia/ebay-sold-listings. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/ebay-sold-listings").call(run_input={
    "queries": [
        "iphone 13"
    ],
    "site": "com"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~ebay-sold-listings/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["iphone 13"], "site": "com"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/ebay-sold-listings")
result = tool.invoke({"run_input": {"queries": ["iphone 13"], "site": "com"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (24)
FieldTypeMeaning
itemIdstringeBay item number (the digits in the /itm/ link).
titlestringListing title.
urlstringItem page on the chosen eBay site.
soldPricenumberSale price in currency, without shipping. For a variation listing it is the lowest price of the range; for an accepted best offer it is the listed price (eBay hides the accepted amount).
soldPriceMaxnumberHighest price when eBay shows a price range for a multi-variation listing; otherwise null.
priceTypestringsold = the price paid; range = variation listing (soldPrice..soldPriceMax); best_offer_listed = a best offer was accepted below this listed price.
currencystringISO currency code, e.g. USD, GBP, EUR.
shippingnumberShipping cost shown with the sale; 0 for free shipping; null when not shown.
totalPricenumbersoldPrice + shipping when both are known.
soldAtstringSale (end) date, YYYY-MM-DD. eBay shows the date, not the time.
conditionstringCondition label as on eBay, e.g. Pre-Owned, Brand New.
bidsintegerNumber of bids for auctions; null when not an auction or unknown.
listingTypestringauction, buy_it_now or best_offer.
bestOfferAcceptedbooleanTrue when eBay marks the sale "Best offer accepted".
sellerstringSeller username when the data source returns it.
sellerFeedbackScoreintegerSeller feedback count when the data source returns it.
sellerPositivePercentnumberSeller positive feedback percent when the data source returns it.
locationstringItem location as shown, e.g. "United States".
imagestringMain photo URL.
epidstringeBay catalog product id when the listing is linked to one.
sitestringeBay site searched, e.g. com, co.uk, de.
querystringSearch query that found the listing.
sourcestringData source used: ebayCookies, soldcomps, compsniper, esl, trawl or openwebninja.
fetchedAtstringWhen the Actor saved the row (ISO 8601).
Input settings (13)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Search queries requiredqueriesarray["iphone 13"]
eBay sitesitestring"com"
Max sold listings per querymaxItemsinteger20
Sold within the last N dayssoldWithinDaysinteger
Conditionconditionstring"any"
Min priceminPricenumber
Max pricemaxPricenumber
Buying formatbuyingFormatstring"all"
Every query word must be in the titlestrictTitleMatchbooleanfalse
Data sourcedataSourcestring"ebayCookies"
eBay cookiesebayCookiesstring
Browser User-AgentuserAgentstring
API keyapiKeystring

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure