Apify actor · whoareyouanas/ebay-sold-listings-scraper
eBay Sold Listings Scraper with Validated Data
Collect eligible sold-listing observations for supplied eBay keywords and marketplaces. Keep displayed price, sold-date context, provenance, and quality flags for resale and product research.
Documentation checked 2026-10-29 · deployed build 1.0.1 · run through your Apify account
01 / Overview
Match the actor to the job.
Focused sold-listing research
Set keywords, marketplace, date window, price or condition filters, and exact output limits.
Source provenance
Keep source type, provider, and source-run references alongside observations.
Separate budgets
Control the actor's output charges and optional upstream retrieval budget independently.
02 / Input
Start with a clear, bounded input.
keywords is required. Start with a small maxResults and maxResultsPerKeyword. retrievalMode hybrid can use a separately billed upstream provider, controlled by upstreamBudgetUsd.
{
"keywords": [
"nintendo switch oled"
],
"ebaySites": [
"ebay.com"
],
"daysToScrape": 30,
"maxResultsPerKeyword": 5,
"maxResults": 5,
"retrievalMode": "hybrid",
"upstreamBudgetUsd": 0.05,
"maxConcurrency": 1
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| keywords | arrayRequired | Not specified | One to 100 searches. Shared filters apply to each keyword/site pair. |
| ebaySites | array | ["ebay.com"] | US (ebay.com) has passed live retrieval checks. UK (ebay.co.uk) is beta; results and GBP fields require successful source validation. |
| maxResultsPerKeyword | integer | 20 | Maximum matched unique items for each keyword/site query, including overlap already emitted elsewhere. Minimum: 1 · Maximum: 10000 |
| maxResults | integer | 100 | Exact global cap on unique marketplace/item observations. Summaries and repeated query matches do not count. Minimum: 1 · Maximum: 10000 |
| daysToScrape | integer | 30 | Displayed calendar-date window anchored to UTC date at run start; each explicit bound overrides its corresponding rolling bound. Minimum: 1 · Maximum: 90 |
| maxConcurrency | integer | 2 | At most two API searches run together. Paid hybrid searches may run sequentially to protect the remaining output budget. Minimum: 1 · Maximum: 16 |
| retrievalMode | string | "hybrid" | Hybrid tries native retrieval first, then caffein.dev/ebay-sold-listings. API calls that provider directly; native has no fallback and currently encounters access blocks. Caffein fees are separate and limited by upstreamBudgetUsd. Options: hybrid, native, api |
| upstreamBudgetUsd | number | 1 | Separate aggregate event-charge limit for Caffein child runs, including startup and fetched rows later excluded or deduplicated. This does not replace the Actor’s own max cost per run. Uncertain starts stop additional paid calls. Minimum: 0.01 · Maximum: 1000 |
All other input controls (13)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| dateFrom | string | Not specified | Inclusive YYYY-MM-DD displayed calendar-date label within the supported public window. Not an exact UTC transaction boundary. |
| dateTo | string | Not specified | Inclusive YYYY-MM-DD displayed calendar-date label; cannot exceed the UTC date at run start. |
| categoryId | string | "0" | Use 0 for the API fallback. Other categories require verified native controls and stop before a paid fallback call. |
| minPrice | number | Not specified | eBay source price filter, in each marketplace display currency. Not a hidden accepted-offer amount. Minimum: 0 |
| maxPrice | number | Not specified | Upper eBay displayed-price filter. Must be >= minPrice. Minimum: 0 |
| itemCondition | string | "any" | Initial broad eBay condition filter. Preserve observed condition labels and derived-ID provenance. Options: any, new, used, forParts |
| buyingFormat | string | "all" | Filter tested on the supported source: all, auction, or fixed-price listings. Options: all, auction, buyItNow |
| itemLocation | string | "default" | Use default for the API fallback. Domestic/worldwide require verified native controls and stop before paid fallback retrieval. Options: default, domestic, worldwide |
| includeBestOffers | boolean | true | Include explicitly detected Best Offer records with asking-price labels. False cannot exclude undisclosed offers. |
| includeRaw | boolean | true | Preserve short non-secret price/date/shipping/status strings for auditing. No full-page HTML in listing rows. |
| includeAnalytics | boolean | true | Included key-value-store summary of conservative currency-separated cohorts; never an extra billable row. |
| proxyConfiguration | object | {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]} | Apify proxy for the native attempt only. API mode does not use your proxy configuration. Hybrid can use its paid fallback if proxy setup fails. |
| dateWindowPolicy | string | "strict" | Strict excludes undated/ambiguous-year rows. Include unknown emits them with DATE_WINDOW_UNVERIFIABLE and uncertain date matching. Options: strict, includeUnknown |
03 / Output
Know what each returned row represents.
- actualSalePrice stays null: a displayed sold-listing amount does not reveal a hidden accepted offer or verify payment.
- Day-level soldDate does not imply a precise soldAt timestamp. Preserve unknown shipping and quality flags, and inspect RUN_SUMMARY for coverage.
{
"itemId": "820190412353",
"url": "https://www.ebay.com/itm/820190412353",
"title": "Nintendo Switch OLED 64 GB White + Case, Dock, Joycons, and Original Cables",
"marketplace": "ebay.com",
"displayedPrice": "170",
"currency": "USD",
"actualSalePrice": null,
"bestOfferAccepted": null,
"soldDate": "2026-10-01",
"soldAt": null,
"sourceType": "upstream_actor",
"sourceProvider": "caffein.dev/ebay-sold-listings",
"sourceRunId": "kqLvZHG0kqto6K0Ig"
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
title
Title
marketplace
Marketplace
displayedPrice
Displayed price
currency
Currency
priceKind
Price meaning
actualSalePrice
Actual sale price
soldDate
Sold date label
bestOfferAccepted
Accepted offer
shippingPrice
Shipping price
shippingType
Shipping
condition
Condition
url
Listing
sourceType
Source type
sourceProvider
Source provider
sourceRunId
Provider run
qualityFlags
Uncertainty
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
Dataset links and run artifacts (5)
- Listing observations
- Available through the actor's Output tab for your run.
- Run summary
- Available through the actor's Output tab for your run.
- Query coverage and matches
- Available through the actor's Output tab for your run.
- Comps summary (when enabled)
- Available through the actor's Output tab for your run.
- Upstream retrieval and cost diagnostics
- Available through the actor's Output tab for your run.
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
Validated sold listing sold-listing | $0.002 / event | One unique eligible listing observation saved to the dataset. External Caffein Actor fees are separate. $2.00 per 1,000 of this event. Other events and separate services are additional. |
Actor Start apify-actor-start | $0.00005 / event | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). Start units depend on allocated memory: one event per GB, with at least one event. |
- The actor bills unique eligible saved observations. Overlapping query matches and summary records do not add another sold-listing event.
- Upstream Caffein actor charges are additional and can include rows later excluded locally. The parent budget and upstreamBudgetUsd are separate caps, not a combined invoice estimate.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~ebay-sold-listings-scraper/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- A complete processing scope does not guarantee complete historical eBay coverage.
- Displayed prices are not verified settlement amounts, and totals do not automatically include taxes or buyer fees.
Questions
Before you build an integration.
What do I need to provide?
keywords is required. Start with a small maxResults and maxResultsPerKeyword. retrievalMode hybrid can use a separately billed upstream provider, controlled by upstreamBudgetUsd.
What should I check in the output?
- actualSalePrice stays null: a displayed sold-listing amount does not reveal a hidden accepted offer or verify payment.
- Day-level soldDate does not imply a precise soldAt timestamp. Preserve unknown shipping and quality flags, and inspect RUN_SUMMARY for coverage.
How do I budget the run?
- The actor bills unique eligible saved observations. Overlapping query matches and summary records do not add another sold-listing event.
- Upstream Caffein actor charges are additional and can include rows later excluded locally. The parent budget and upstreamBudgetUsd are separate caps, not a combined invoice estimate.
Keep exploring