How to use it: 3 steps
- 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.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
iphone 13in Search queries. Each start is one run. - 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
sellerisnull. Paid shipping is often not shown either; thenshippingisnull(it is0for 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 for | Price | When |
|---|---|---|
| Start fee | $0.005 | Charged 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.02 | One 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.005 | One 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
- Open the Input tab. The search
iphone 13, the siteebay.com (US)and Max sold listings per query = 20 are already filled in. - 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.
- Click Start.
- Open the Output tab. You see the Sold listings table with title, sold price, date, condition and type.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Price check before buying or listing | queries: one model, maxItems: 50 | sold listings | soldPrice, condition, soldAt | median price in a spreadsheet |
| Auction vs fixed price | buyingFormat: auction or buy_it_now | sold listings | listingType, bids, soldPrice | compare two runs |
| Weekly price tracking | soldWithinDays: 7, a schedule | sold listings of the last week | soldAt, soldPrice, itemId | Google Sheets or a webhook |
| Clean list for one exact model | strictTitleMatch: true, minPrice | only matching titles | title, soldPrice, epid | your 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.
{
"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.
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 -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"}'# 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)
| Field | Type | Meaning |
|---|---|---|
itemId | string | eBay item number (the digits in the /itm/ link). |
title | string | Listing title. |
url | string | Item page on the chosen eBay site. |
soldPrice | number | Sale 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). |
soldPriceMax | number | Highest price when eBay shows a price range for a multi-variation listing; otherwise null. |
priceType | string | sold = the price paid; range = variation listing (soldPrice..soldPriceMax); best_offer_listed = a best offer was accepted below this listed price. |
currency | string | ISO currency code, e.g. USD, GBP, EUR. |
shipping | number | Shipping cost shown with the sale; 0 for free shipping; null when not shown. |
totalPrice | number | soldPrice + shipping when both are known. |
soldAt | string | Sale (end) date, YYYY-MM-DD. eBay shows the date, not the time. |
condition | string | Condition label as on eBay, e.g. Pre-Owned, Brand New. |
bids | integer | Number of bids for auctions; null when not an auction or unknown. |
listingType | string | auction, buy_it_now or best_offer. |
bestOfferAccepted | boolean | True when eBay marks the sale "Best offer accepted". |
seller | string | Seller username when the data source returns it. |
sellerFeedbackScore | integer | Seller feedback count when the data source returns it. |
sellerPositivePercent | number | Seller positive feedback percent when the data source returns it. |
location | string | Item location as shown, e.g. "United States". |
image | string | Main photo URL. |
epid | string | eBay catalog product id when the listing is linked to one. |
site | string | eBay site searched, e.g. com, co.uk, de. |
query | string | Search query that found the listing. |
source | string | Data source used: ebayCookies, soldcomps, compsniper, esl, trawl or openwebninja. |
fetchedAt | string | When 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.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Search queries required | queries | array | ["iphone 13"] |
| eBay site | site | string | "com" |
| Max sold listings per query | maxItems | integer | 20 |
| Sold within the last N days | soldWithinDays | integer | |
| Condition | condition | string | "any" |
| Min price | minPrice | number | |
| Max price | maxPrice | number | |
| Buying format | buyingFormat | string | "all" |
| Every query word must be in the title | strictTitleMatch | boolean | false |
| Data source | dataSource | string | "ebayCookies" |
| eBay cookies | ebayCookies | string | |
| Browser User-Agent | userAgent | string | |
| API key | apiKey | string |
Use cases with this tool
Each guide shows all the steps and the other tools.



