Invaluable Scraper: Auction Lots, Prices Realized & Houses
The price realized next to the estimate. Bidders reduced to counts.
Auction lots from Invaluable in two modes: sold lots with the price realized next to the low and high estimate, and upcoming lots with the current bid, bid count and watchers. Plus directories of auction houses and artists, with no bidder identifier ever leaving the Actor.
oswaldocarabano/invaluable-auctions-scraper
{
"outputType": "lots",
"searchMode": "past",
"keyword": "tiffany lamp",
"sortBy": "relevance",
"maxItems": 200,
"scrapeDetails": false
}- Version
- v0.1.5
- Memory
- 512 MB
- Browser
- none
- Proxy
- None for search; residential for lot pages
Short answer
The Invaluable Auctions Scraper exports lots from invaluable.com in two modes: sold lots with the price realized next to the low and high estimate, and upcoming lots with the current bid, bid count and watchers. Measured on Apify on 1 October 2026 over a stratified sample of 1,020 sold and 1,020 upcoming lots from 138 auction houses in 12 countries, price realized was filled on 100% of sold lots and the estimate on 91.7%. Each lot keeps its own currency, a zero in the source is delivered as null, and no bidder identifier is ever output. Pricing is $4.70 per 1,000 lots. Invaluable's Terms of Use prohibit robots and data extraction without written permission, which anyone running the Actor should weigh first.
Key points
- Price realized was filled on 100% of 1,020 sold Invaluable lots measured on 1 October 2026, and the low and high estimate on 91.7% of the same sample.
- Invaluable estimate coverage depends on the search: 91.7% over a 16-keyword sample of 1,020 sold lots, 85.2% over 480 sold lots in 8 categories, and 70.8% over the 1,000 most recent sold lots.
- Invaluable stores a missing estimate or result as 0, and the Actor delivers those as null so an average of price realized is not dragged down by zeros that are not prices.
- Every Invaluable lot keeps its own currency — USD, EUR, GBP, AUD, CAD, JPY and others — and the Actor never converts a price silently.
- Bidder, watcher and winner identifiers are present in Invaluable's search index, and the Actor outputs only counts and a `has_winner` flag; 0 bidder IDs were found across 110 platform runs.
- Invaluable's Terms of Use, version 3.11, prohibit robots, spiders and any form of data extraction without written permission, and the header of its robots.txt repeats the prohibition.
- Artist attribution on Invaluable is sparse outside fine art: `artist_name` was filled on 10.9% of 1,020 sold lots overall and on 43.4% of those in Fine Art.
What it does
Auction lots from Invaluable in two modes: sold lots with the price realized next to the low and high estimate, and upcoming lots with the current bid, bid count and watchers. Plus directories of auction houses and artists, with no bidder identifier ever leaving the Actor.
{
"row_type": "lot",
"lot_id": "205866906",
"title": "Vintage Rolex Day-Date President Gold and Diamond Watch",
"status": "sold",
"auction_date": "2026-09-25T14:00:00.000Z",
"currency": "USD",
"estimate_low": 7000,
"estimate_high": 10000,
"price_realized": 13000,
"bid_count": 17,
"watcher_count": 50,
"supercategory": "Jewelry",
"category": "Watches, Women's",
"house_name": "Charlton Hall",
"location": "West Columbia, SC, US",
"country": "United States of America",
"lot_url": "https://www.invaluable.com/auction-lot/vintage-rolex-day-date-president-gold-and-diamond-656-c-692359e70e"
}Why this one
Zeros that are not prices
Invaluable stores "no estimate" and "no result" as 0. A dataset that passes those through makes every average wrong in the same direction, and the error has no symptom. The Invaluable Auctions Scraper delivers them as null, so a mean of `price_realized` or of the estimate is computed over lots that actually have one.
Bidders reduced to counts
The search index carries the identifiers of watchers, bidders and winners, and each bidder's maximum bid. None of it leaves the Actor: the output has `watcher_count`, `bidder_count` and `has_winner`, and every row of 110 platform runs was checked for bidder IDs, with zero found.
Keywords that contain the keyword
With the index's default typo tolerance, a date-ordered search for "rolex" returned 45 of 100 lots that actually contained the word, and "patek" returned 3 of 100. Tightened, the same searches returned 100, 100 and 98 of 100. Every filter — category, country, house, artist, sale type, estimate, price and date — matched 100% of delivered rows in the test runs.
Lot pages optional, and priced as what they cost
A lot page carries every photo, the buyer's premium tiers, bid increments, the house address and, when the house wrote them, dimensions, medium, condition and provenance. It also weighs about 71 times the bytes of a search result and sits behind a web application firewall, so `scrapeDetails` is off by default and billed as its own $0.003 event only when the page is read.
Use cases
- Price an object from sold comparables: price realized against the low and high estimate, sale date, house and full description.
- Build a price index for a maker, category or artist from prices realized in their original currencies.
- Source upcoming lots before the sale by keyword, category, estimate, country or house, sorted by ending soonest or most bids.
- Track demand for a category through bid counts, bidders, watchers and favorites on upcoming lots.
- Export the directory of about 6,900 auction houses with their country and number of upcoming lots.
Input
Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.
| Field | Default | What it does |
|---|---|---|
outputTypestring | lots | What to scrape`lots`, `auctionHouses` or `artists`. One row type per run. |
searchModestring | past | Past or upcoming lots`past` for sold lots with prices realized, newest first; `upcoming` for lots open for bidding, with live bid data. |
keywordstring | — | KeywordLike the search box on invaluable.com, such as `tiffany lamp`. A pasted invaluable.com search URL also works; other URLs are rejected. |
categoriesstring[] | all | CategoriesAny of the 14 top-level Invaluable categories, from Fine Art to Farm & Agriculture. |
countriesstring[] | all | Auction house countriesAs Invaluable writes them, such as `Germany`. `USA` and `UK` are accepted as aliases. |
auctionHousesstring[] | all | Auction housesExact house names, such as `Bonhams`. Run once with `outputType: auctionHouses` to get the list. |
artiststring | — | ArtistExact artist name as Invaluable attributes it, such as `Pablo Picasso`. |
saleTypestring | any | Sale typeLive or Timed. Upcoming lots only. |
minEstimate / maxEstimatenumber | — | Estimate rangeLow estimate at least, high estimate at most, in each lot's own currency. |
minPrice / maxPricenumber | — | Price rangePrice realized for past lots, current bid for upcoming ones, in each lot's own currency. |
dateFrom / dateTostring | — | Auction date range`YYYY-MM-DD`, UTC, inclusive. |
includeUnsoldboolean | false | Include lots without a price realizedOff returns only lots with a published hammer price. On adds past lots that passed or have no published result. |
sortBystring | date | Sort bydate, dateAsc, relevance, priceHigh, priceLow, newlyListed or mostBids. Price sorts compare raw numbers across currencies. |
maxItemsinteger | 100 | Maximum resultsHard cap on rows delivered and charged, up to 100,000. Searches larger than 20,000 are split by date automatically. |
scrapeDetailsboolean | false | Add full lot page datapersonal dataEvery photo, dimensions, medium, condition, provenance, house address, buyer's premium tiers and bid increments. About 1.5 s per lot, charged as a separate event. |
maxConcurrencyinteger | 3 | Lot pages in parallelOnly used with lot pages; 1 to 5. The site paces lot pages and 3 is the measured sweet spot. |
maxCacheAgeDaysinteger | 7 | Reuse lot page data up to (days)Applies only to lot page data; rows say so in `detail_from_cache` and `detail_fetched_at`. 0 always fetches fresh. Search results are always live. |
proxyConfigurationobject | built-in | ProxyOptional. Only lot pages use a proxy; the search does not need one. |
Output and fill rates
A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.
| Field | Filled | Meaning |
|---|---|---|
price_realizednumber | 100% | The result for sold lots, described by the Actor as the hammer price. In the lot's own currency; 0 in the source becomes null. |
estimate_lownumber | 91.7% | With `estimate_high`. Sold lots, n = 1,020; 77.5% of upcoming lots. Other samples gave 85.2% and 70.8%. |
currencystring | 100% | On every row. Prices are never converted. |
titlestring | 100% | With `description`, `lot_number`, `lot_url`, `status` and `sale_type` (Live or Timed). |
auction_datedatetime | 100% | ISO, UTC, with `auction_date_local`. Delivered as Invaluable shows it. |
house_namestring | 100% | With `house_ref`, `catalog_ref`, `location` and `country`. |
categorystring | 100% | With `supercategory`; `subcategory` on upcoming lots. |
current_bidnumber | 100% | With `bid_count` and `watcher_count`. Present in both modes. |
bidder_countinteger | 100% | Upcoming lots, with `favorite_count`, `activity_count` and `posted_at`. A count, never an identifier. |
has_winnerboolean | not measured | Sold lots; true on 43.2% of 1,020. Replaces the winner identifier the index carries. |
artist_namestring | 10.9% | With `artist_ref`. 43.4% of sold Fine Art lots; 24.4% of upcoming lots. |
more_textstring | 44.4% | Extra catalogue notes and footnotes. 63.8% of upcoming lots. |
end_timedatetime | 16.1% | Timed auctions only. 33.1% of upcoming lots. |
reserve_pricenumber | 4.1% | Upcoming lots only, n = 1,020. |
photosstring[] | 100% | Lot pages only, n = 120: 4.7 photos per lot on average, against 1 from the search. |
buyers_premium_tiersobject[] | 100% | Lot pages only, n = 120, with `buyers_premium` and `bid_increments`. |
condition_reportstring | 50% | Lot pages only, n = 120. 56.5% on an earlier sample of 23. |
usd_conversion_ratenumber | 66.7% | Lot pages only, n = 120. The site's own rate when it gives one. |
dimensionsstring | 15% | Lot pages only, n = 120. With `medium` at 8.3%. |
provenancestring | 3.3% | Lot pages only, n = 120. |
Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.
Datasets
Different record types go to different datasets, so the main table never carries columns that are blank on most rows.
defaultOne row type per run: auction lots (92 fields), auction houses or artists. `RUN_SUMMARY` and `ERRORS` are written to the key-value store.billedError rowsInput errors and pages that could not be read, with the reason.never billed
Pricing
Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.
| Event | Price | Notes |
|---|---|---|
apify-actor-startActor start | $0.00001 | The platform minimum, once per run. |
lotAuction lot | $0.0047 | One lot: title, description, estimate, current bid or price realized, auction date, category, house, location and image. Never charged for errors, duplicates or failed pages. |
lot-detailFull lot page | $0.003 | Optional. Every photo, dimensions, medium, condition, provenance, house address, buyer's premium tiers and bid increments. Charged only when the page is read. |
auction-houseAuction house | $0.001 | Name, ID, country, logo and number of upcoming lots. |
artistArtist | $0.001 | Name, aliases, genres, total, upcoming and past lot counts, and followers. |
Measurements
Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.
Lot fill-rate sample
1,020 sold + 1,020 upcoming lots
16 keyword searches per mode on Apify, 1 October 2026, from 138 auction houses in 12 countries. The lot rates on this page come from it.
Estimate coverage by sample
91.7%, 85.2% and 70.8%
Sold lots: the 1,020-lot stratified sample; 480 lots across 8 categories on 23 September; and the 1,000 most recent sold lots. Coverage follows what you search.
Lot page sample
120 lot pages
60 sold and 60 upcoming paintings, rings and chairs. 4.7 photos per lot on average; an earlier sample of 23 pages gave 4.3.
Throughput
1,000 lots in 2.1 to 3.6 s
Platform runs at 512 MB on builds 0.1.3 and 0.1.4, with 1,000 delivered, 1,000 charged and 0 duplicates.
Lot page access
577 requests, 1 WAF challenge, 0 blocks
Aggregated from the run summaries of 97 platform runs through a residential proxy. The challenge was answered by changing IP, never by solving it.
Bidder identifiers output
0 across 110 platform runs
Every row of every run checked by script.
Keyword precision
"rolex" 45 of 100 before, 100 of 100 after
Lots containing the searched word in a date-ordered search, before and after tightening the index's typo tolerance. "patek" went from 3 to 98 of 100.
What it will not do
Stated plainly so you can judge fit before spending anything.
- Invaluable's Terms of Use (§5.2 and §4.2) prohibit robots and data extraction without written permission, and the robots.txt header says the same. Anyone running the Actor should read those terms and make their own decision.
- On a sold lot page, an anonymous visitor was shown "Sold: Log in to view" when the developer checked on 1 October 2026; the price realized the Actor delivers comes from the search index and the page state, which are served without a session. Invaluable also sells access to its results database by subscription.
- Lot pages ignore robots.txt's `Crawl-delay: 10`: the Actor requests them at about 1.5 seconds per page per session. Search queries go to the search index host rather than to `www.invaluable.com`.
- Artist is filled on 10.9% of sold lots overall (43.4% in Fine Art), and the estimate's coverage swings between 70.8% and 91.7% depending on the sample.
- Sorting by price compares raw numbers across currencies, because nothing is converted. `usd_conversion_rate` appears on 66.7% of lot pages.
- The sale-type filter works only for upcoming lots: the site does not keep sale type filterable for past ones.
- Some sold lots carry an auction date a few days ahead of the result, because some houses publish results under the catalogue's closing date. The date is delivered as Invaluable shows it.
- Invaluable's counters are approximate: two queries on 23 September 2026 put sold lots with a price at 8.74 and 10.10 million.
Privacy
- The seller on Invaluable is always a registered auction house: 0 of 960 lots sampled had a seller that was not a house. House names, addresses and logos are business data and are delivered.
- No bidder, watcher or winner identifier is ever output, and no bidder's maximum bid. Only counts and a `has_winner` flag.
- Of 960 lot descriptions, 2.4% contained something shaped like an email and 4.5% like a phone number; in the sample they were the auction house's own contacts and are delivered as written.
- Removal requests: privacy@actorstack.dev
See also the data removal process.
Frequently asked questions
Are Invaluable prices converted to US dollars?
Does the price realized include the buyer's premium?
Does the Invaluable Auctions Scraper log in?
What do Invaluable's terms say about scraping?
How many lots can one run return?
Guides for this Actor
- Asking price vs price realizedTwo marketplaces, two kinds of price. Empire Flippers publishes what sellers asked, Invaluable publishes what auctions realized — and a comparables dataset that mixes the two up measures the wrong thing.
- Invaluable auction results dataPrices realized, estimates and live bids from Invaluable, with the coverage measured on 2,040 lots — and the Terms of Use and robots.txt that prohibit automated access, stated plainly.