Invaluable Auctions Scraper - Lots, Prices Realized & Artists avatar

Invaluable Auctions Scraper - Lots, Prices Realized & Artists

Pricing

from $3.12 / 1,000 results

Go to Apify Store
Invaluable Auctions Scraper - Lots, Prices Realized & Artists

Invaluable Auctions Scraper - Lots, Prices Realized & Artists

Scrape Invaluable auction lots with prices realized, upcoming lots open for bidding, and the artist directory. 130 fields including provenance, literature, condition and medium. 28 filters.

Pricing

from $3.12 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

8 days ago

Last modified

Categories

Share

ParseForge

Invaluable Auctions Scraper - Lots, Prices Realized & Artists API

Scrape Invaluable, the marketplace that aggregates live and timed auctions from thousands of houses worldwide. Get the archive of past lots with the price realized on each one, the lots open for bidding right now with live bid counts, and the artist directory with lifetime lot counts. 130 fields, 28 filters, three result types. No login, no API key, no browser. Export to CSV, JSON, Excel, or XML.

Every run delivers a 35-field lot row for one flat price. Twelve further data blocks — provenance, estimates, bidding, images, artist biography and the rest — are off by default: tick one and you get it, leave it and you are neither sent it nor billed for it.

Invaluable publishes no public API and its search runs entirely client-side, so an HTML scraper sees an empty shell. This Actor reads the same JSON endpoints the site's own front end uses, which is why a run of 5,000 lots finishes in about 8 seconds instead of loading 5,000 pages.

Who uses itWhat they scrape Invaluable for
Appraisers and valuersComparable hammer prices for a maker, period or medium, with provenance and condition on each comp
Art-market analyticsPrice realized against low and high estimate across 14 currencies, normalised to USD
Dealers and collectorsUpcoming lots in their category, filtered by house, country and estimate band, before the sale
Auction aggregators and price databasesWhole departments in one run, deduplicated, with stable ids to join on
Provenance and catalogue researchersProvenance, literature and exhibition history, the fields that only exist on the lot page
Insurers and estate professionalsRealized values by category and date range for schedules and probate

What it does

Pick one of three result types and the Actor returns flat rows.

🔨 Past lots and prices realized — one row per archived lot: hammer price in the sale currency, low and high estimate, bid count, the selling house, the sale date, the department and category, and the artist Invaluable matched to it.

🔔 Upcoming lots — one row per lot open for bidding: current bid, bid count, reserve, the sale's close time, venue latitude and longitude, watcher and favourite counts, and the sale type (live, timed, or view-only).

🎨 Artist directory — one row per artist: display name, aliases, genres, follower count, and how many lots Invaluable holds for them, split into past and upcoming.

Every run also gives you:

  • 🧾 Provenance, literature and exhibited. Switch on includeLotDetails and each row gains the connoisseurship block that exists only on the lot's own page: provenance, literature, exhibition history, condition, medium, dimensions, signature, marks, buyer's premium and view count.
  • 🚫 Duplicates removed before you are billed. Invaluable's index re-serves records on deep pages — measured on one Fine Art query, pages 19 and 20 shared 612 of 1,000 lot references. Every row is deduplicated by lot reference, so you are never charged twice for the same lot.
  • 🪟 Past the index ceiling. A single query stops serving at roughly 20,000 distinct lots no matter how many million it claims to hold. When your row target is higher, the Actor splits the sale-date range and drains each window separately.
  • 💱 14 currencies, one comparable number. convertToUsd adds priceResultUsd, estimateLowUsd, estimateHighUsd and currentBidUsd using Invaluable's own rates.
  • 🔤 Mojibake repaired. Invaluable's feed ships some text as UTF-8 already decoded as Latin-1 — "Grandma’s Sunday" for "Grandma's Sunday". Those strings are repaired; text that is already clean is never touched.
  • 🔗 Stable ids to join on. lotRef, catalogRef, houseRef and artistRef are Invaluable's own permanent references and survive title and spelling changes.

Results export to CSV, JSON, Excel, or XML, or stream from the API.

What you can do with Invaluable data

📊 Build a price database for a maker or category.

Filter by artist, department and date range, sort by price realized, and switch on USD conversion. Estimates come with every row, so you can measure how often a category beats its high estimate.

🔍 Assemble appraisal comparables with provenance.

includeLotDetails gives you the provenance, literature and condition text on each comparable — the part an appraisal actually has to cite, and the part a listing-only scraper cannot reach.

🔔 Watch a category before the hammer falls.

Run upcoming filtered to your department and estimate band, sorted by newestListed, and see what is coming to market with venue coordinates and current bids.

🏛️ Profile the houses and artists behind a market.

includeHouseProfile and includeArtistProfile attach the selling house's address and founding date, and the artist's dates, profession and genres — each fetched once and cached across the whole run.

Why choose this scraper

What you get
Three result typesPast lots with prices realized, upcoming lots with live bids, and the artist directory — one Actor, one schema.
130 fields35 in the base row, 89 more across twelve optional blocks you switch on individually.
28 filtersDepartment, category, style, house, artist, country, state, currency, sale type, price band, estimate band, bid count, date range and more. Filtered rows are never written and never charged.
DeduplicatedThe source re-serves records on deep pages. Every lot is written once, so your bill and your dataset both stay honest.
Reaches past the ceilingAutomatic sale-date slicing when one query stops serving before your row target.
USD normalisation14 sale currencies converted with Invaluable's own rates, so prices compare directly.
Fast, because there is no browser5,000 lots in about 8 seconds, 30,000 in under a minute. Measured, not estimated.
Filter without buying the columnEstimate, bid and price filters read the complete row before anything is stripped, so you can narrow by a field you did not pay for.
Nothing you did not ask forAll twelve optional blocks are off by default. A block you did not tick is stripped before the row is written, so it is never delivered and never billed.
Honest emptiesA field Invaluable does not publish is absent from the row, never a guessed value and never a null.
Four export formatsCSV, JSON, Excel, and XML, from the dashboard or the API.

How it compares

There are two other Invaluable Actors in the Store. Their columns reflect what their own public listings state, not a test run of them.

FeatureParseForgelexis-solutionslulzasaur
Past lots with prices realizedYesYesYes
Upcoming lotsYes, with live bid count, reserve and venue coordinatesCurrent bids statedYes
Artist directoryYes, 258,000 artistsNot statedNot stated
Provenance, literature, exhibitedYesNot statedNot stated
Condition, medium, dimensions, signatureYesNot statedNot stated
Sale venue address and viewing notesYesNot statedNot stated
Auction house and artist profilesYes, cached per referenceNot statedNot stated
USD normalisation across 14 currenciesYesNot statedNot stated
Duplicate lots removedYesNot statedNot stated
Reaches past the ~20,000-row index ceilingYes, by date slicingNot statedNot stated
Filters28Not statedKeyword, past or upcoming
Default memory512 MB4,096 MB4,096 MB
Actor start fee$0.054 per GB$0.00005$0.00005
Price per row (base)$0.005$0.0049$0.005
Pay only for the data you tick12 optional blocks, all off by defaultOne price, everything bundledOne price, everything bundled

Per base row the three are within a hundredth of a cent of each other. The difference is what the row contains and what you can decline: their price is a bundle, so a run that only needs titles, houses and hammer prices pays for the descriptions and images too. Here that run pays $5.00 per 1,000 and nothing else, and a run that wants provenance and biographies can buy exactly those. Our start fee is higher, so below roughly 45 rows they are cheaper; above it the bundling difference decides.

What a lot looks like

At the defaults, every lot returns as one flat 35-field row. This is a real record:

{
"rowType": "past-lot",
"lotRef": "C6AB47CC42",
"lotId": "200214796",
"lotUrl": "https://www.invaluable.com/lot/C6AB47CC42",
"lotNumber": "2287",
"lotTitle": "Cosmograph Daytona “The King”, Reference 6270 | A highly important yellow gold, diamond and sapphire-set chronograph wristwatch with bracelet, Circa 1985",
"priceResult": 40635000,
"sold": true,
"resultsPosted": true,
"currencyCode": "HKD",
"currencySymbol": "HK$",
"catalogRef": "10VJHYYSZ5",
"catalogUrl": "https://www.invaluable.com/catalog/10VJHYYSZ5",
"saleType": "Live",
"saleDate": "2025-10-21T03:00:00.000Z",
"saleDateLocal": "Oct 21, 11:00 AM HKT",
"closed": true,
"onlineOnly": false,
"houseName": "Sotheby's",
"houseRef": "4WSXVOTIS6",
"houseUrl": "https://www.invaluable.com/auction-house/4WSXVOTIS6",
"location": "Hong Kong, HK",
"countryName": "Hong Kong",
"category": "Jewelry",
"subcategory": "Watches, Men's",
"hasImage": true
}

Tick includeEstimates, includeDescription, includeImages and includeBidding and the same row also carries:

{
"estimateLow": 16000000,
"estimateHigh": 32000000,
"lotDescription": "Rolex Cosmograph Daytona “The King”, Reference 6270 … Dial: pavé-set diamond. Calibre: cal. 727 mechanical, 17 jewels …",
"imageUrl": "https://image.invaluable.com/housePhotos/…/H4891-L351953283.jpg",
"thumbnailUrl": "https://image.invaluable.com/housePhotos/…/H4891-L351953283_thz.jpg",
"bidCount": 0
}

Add the page-reading blocks — includeLotDetails, includeCatalogDetails, includeArtistProfile — and convertToUsd, and it also carries:

{
"medium": "18k yellow gold, diamond and sapphire",
"dimensions": "37 mm diameter",
"condition": "Very good.",
"provenance": "Private collection, acquired directly from Asprey of London",
"literature": "Cf. Pucci Papaleo, Ultimate Rolex Daytona, p. 412",
"exhibited": "Sotheby's Hong Kong, October 2025",
"lotSignature": "case, dial and movement",
"buyersPremiumPct": 26,
"viewCount": 8412,
"catalogTitle": "Important Watches",
"venueCity": "Hong Kong",
"venueCountry": "Hong Kong",
"saleTimeZone": "HKT",
"priceResultUsd": 5210000,
"estimateLowUsd": 2051000,
"usdConversionRate": 0.1282
}

What you always get, and what you add

Always in the row — covered by the result-item price

35 fields, on every lot, with no box to tick:

GroupFields
IdentitylotRef, lotId, lotUrl, lotNumber, lotTitle, rowType
Price realizedpriceResult, sold, resultsPosted, currencyCode, currencySymbol
SalecatalogRef, catalogUrl, saleType, saleDate, saleDateLocal, saleEndDate, listedDate, closed, onlineOnly, featured, unlotted
SellerhouseName, houseRef, houseUrl, location, countryName
ArtistartistName, artistRef, artistUrl
Taxonomycategory, subcategory, style, houseCategory
Media flaghasImage

That is a complete auction record on its own: what sold, for how much, in which currency, at which house, on what date, in which category, by which artist.

Add a block when you need it

Each box below is off by default. Tick it and the block is delivered and billed; leave it and neither happens. The first six come from the same search response the base row does, so they cost no extra request. The last six read another page, which is why they cost more.

CheckboxAddsEventPrice
includeDescriptionlotDescription, extraTextdescription-text$0.0008
includeEstimatesestimateLow, estimateHighestimate-band$0.0008
includeBiddingcurrentBid, bidCount, reservePricebidding-data$0.0006
includeImagesimageUrl, thumbnailUrl, imageWidth, imageHeightimage-urls$0.0005
includeGeolatitude, longitude, stateNamegeo-location$0.0004
includeEngagementwatcherCount, favoriteCount, activityCountengagement-stats$0.0004
includeLotDetails27 fields: provenance, literature, exhibited, condition, medium, dimensions, signature, marks, buyer's premium, view countslot-details$0.006
includeAllImagesimages (every photo at three resolutions), imageCountimage-set$0.002
includeCatalogDetails19 fields: sale title, description, venue address, viewing notes, timezonecatalog-details$0.004
includeArtistProfile8 fields: artist dates, profession, aliases, genres, biographyartist-profile$0.004
includeHouseProfile11 fields: house address, phone, founding date, profile texthouse-profile$0.003
convertToUsdpriceResultUsd, estimateLowUsd, estimateHighUsd, currentBidUsd, usdConversionRateprice-usd$0.0008

A block you ticked but that Invaluable did not publish is not charged. The charge is decided by reading the finished row, not by reading your checkbox, so a lot with no provenance costs you nothing for includeLotDetails.

You can filter on a field without buying it

Filters run against the complete row, before any block is stripped. So this works:

{ "estimateMin": 5000, "minBidCount": 3, "soldOnly": true }

with includeEstimates and includeBidding both off. You get the lots that match, priced as base rows, without the estimate or bidding columns. Pay for the columns only when you want to read them, not to filter on them.

Configure the run

SettingWhat it does
resultTypepast for the archive with prices realized, upcoming for lots open for bidding, artists for the artist directory.
searchQueryFull-text query across lot title, description and artist. Leave empty to browse by department, house or date alone.
maxItemsCeiling on rows written. One request returns up to 1,000 rows, so this is the main lever on run cost.
sortByRelevance, price realized, sale date or lot number on past lots; bid count, current bid and newest-listed on upcoming lots; alphabetical on artists.
lotUrlsSkip search entirely and read these lots directly. Accepts full lot URLs or bare lot references. The same checkboxes apply.
proxyConfigurationOff by default. Search needs no proxy; the six blocks that read another page do — see below.

Narrow the run with filters

Every filter is applied before a row is written, so rows you filter out are never charged.

FilterWhat it keeps
categoriesAny of the 15 departments: Fine Art, Collectibles, Decorative Art, Furniture, Jewelry, Asian Art & Antiques, Firearms, Wines & Spirits and the rest.
subcategoriesAny of 97 categories: Painting, Prints, Sculpture, Rings, Clocks, Whiskey, Rifles, Toys and so on.
stylesThe third taxonomy level — Landscape, Abstract, Portrait, Nude. Invaluable only publishes it on upcoming lots.
auctionHouses / houseRefsOnly these selling houses, by name or by Invaluable reference.
artistNames / artistRefsOnly these artists, by name or by reference.
countriesSeller country, from the 31 Invaluable indexes.
statesSeller state or province. Indexed on upcoming lots.
currenciesSale currency: USD, EUR, GBP, AUD, CAD, CHF, JPY, HKD, SGD, KRW, THB, COP, ZAR, PLN.
saleTypesLive, Timed or View Only. Upcoming lots.
catalogRefsOnly these sales, by catalog reference.
priceResultMin / priceResultMaxHammer price band, in the sale's own currency.
estimateMin / estimateMaxEstimate band. Works with includeEstimates off.
currentBidMin / currentBidMaxLive bid band. Works with includeBidding off.
minBidCountLots that already attracted at least this many bids. Works with includeBidding off.
dateFrom / dateToInclusive sale-date range, YYYY-MM-DD.
soldOnly / unsoldOnlyLots with, or without, a published hammer price.
onlineOnlySales that ran online only.
withImagesOnlyDrops lots the house listed without a photo. Works with includeImages off.
withArtistOnlyLots Invaluable matched to an artist record. Upcoming lots.
featuredOnlyLots the house paid to feature. Upcoming lots.
excludeClosedDrops lots whose bidding already closed. Upcoming lots.

A note on the upcoming-only filters: styles, states, withArtistOnly, featuredOnly and excludeClosed are indexed on upcoming lots but not on the archive. Applying them to past would silently return zero rows, so the Actor ignores them there instead.

Proxy: not for search, yes for the six blocks that fetch a page

The search index tolerates sustained querying and needs no proxy at all — a 35,000-hit run completed from a single unproxied IP with zero blocks. That is why proxyConfiguration is off by default and why a default run costs you no proxy traffic.

The endpoints behind includeLotDetails, includeAllImages, includeCatalogDetails, includeArtistProfile and includeHouseProfile are the opposite. They answer a burst of about four requests per IP and then return HTTP 202 with a zero-length body — not 429, not 403. A client that trusts the status code reads that as success and writes empty rows. This Actor validates every response by body, never by status code.

Requests are spread over eight proxy sessions, each with its own reservation clock, and the gap between them is steered by what actually comes back — a throttle widens it, a clean response narrows it. Measured recovery from a drained IP is about 40 seconds, and the penalty lengthens the more the source is pushed, so throughput depends on how rested your proxy pool is rather than on any fixed rate. Across measured runs, enriching a lot with all five page-reading blocks took between 6 and 10 seconds; residential proxies were consistently around three times faster than datacenter and failed roughly seven times less often.

Two consequences worth planning around:

  • Those blocks are for hundreds of lots, not tens of thousands. A base run of 30,000 rows takes under a minute; the same 30,000 with includeLotDetails would take hours. Filter down to the lots you actually need the provenance for.
  • If the source stops answering, the run stops asking. After twelve consecutive dead fetches the Actor switches those blocks off for the rest of the run, says so in the log, and finishes on base rows. You are not charged for blocks that never arrived.

If you tick a page-reading block, turn on Apify Proxy — residential — in proxyConfiguration. The Actor warns you in the log if you forget.

Pricing

This Actor is pay per event. You are charged for what a run actually delivers: never for a row a filter rejected, never for a duplicate the index re-served, and never for a block you did not tick.

A run left at its defaults fires exactly three events: result-item per row, one search-query per request, and apify-actor-start once.

The unbundled prices below take effect on 4 September 2026. Until then the Actor bills its previous rate of $0.0035 per row, and the six blocks that come from the search response — description, estimates, bidding, images, geo and engagement — are delivered without a charge, exactly as they were when they sat inside the base row.

EventPriceWhen it fires
result-item$0.005One row written to the dataset, with all 35 base fields.
search-query$0.009One search request, returning up to 1,000 lots with every filter already applied.
apify-actor-start$0.054Once when the run starts, per GB of memory. This Actor runs in 512 MB, so that is one event.
description-text$0.0008Optional — includeDescription.
estimate-band$0.0008Optional — includeEstimates.
bidding-data$0.0006Optional — includeBidding.
image-urls$0.0005Optional — includeImages.
geo-location$0.0004Optional — includeGeo.
engagement-stats$0.0004Optional — includeEngagement.
lot-details$0.006Optional — includeLotDetails. One rate-limited page read per lot.
image-set$0.002Optional — includeAllImages. Shares the lot-details request.
catalog-details$0.004Optional — includeCatalogDetails. One read per sale, cached.
artist-profile$0.004Optional — includeArtistProfile. One read per artist, cached.
house-profile$0.003Optional — includeHouseProfile. One read per house, cached.
price-usd$0.0008Optional — convertToUsd.

1,000 lots at the defaults cost $5.06, or $5.00 per 1,000 rows plus the start fee.

Add the six index blocks — description, estimates, bidding, images, geo, engagement — and the same 1,000 lots cost $8.56. Turn on everything, including the five page-reading blocks, and it is $28.36, because each of those lots is then an individual throttled request rather than one bulk query.

Cached blocks are why sale, artist and house details stay cheap in practice: a 500-lot catalogue is one catalog-details read, not 500.

Free users

Apify free-plan runs are capped at 25 rows per run. Everything else is identical: all 35 base fields, all twelve optional blocks, all 28 filters, all three result types. Upgrade your Apify plan to lift the cap.

Run it

  1. Open the Actor in Apify Console, pick a result type, and type a keyword or choose a department.
  2. Set maxItems to the number of rows you want.
  3. Click Start, then export the dataset as CSV, JSON, Excel, or XML.

Or from the API:

curl -X POST "https://api.apify.com/v2/acts/parseforge~invaluable-auctions-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"resultType":"past","searchQuery":"rolex daytona","soldOnly":true,"sortBy":"priceDesc","maxItems":100}'

Use with AI agents (MCP)

The Actor is exposed over Apify's MCP server, so an agent can call it as a tool:

https://mcp.apify.com/sse?actors=parseforge/invaluable-auctions-scraper

Ask things like "what did Picasso lithographs sell for at auction last year" and the agent fills the input itself.

Troubleshooting

No rows came back.

Invaluable's index answers a filter value it does not recognise with zero rows, not an error. Check spelling against the dropdowns — house and artist names must match Invaluable's own spelling exactly, and Sotheby's needs its apostrophe. Also check that your filters are not mutually exclusive, such as soldOnly together with unsoldOnly.

The run stopped well short of maxItems.

That is the index ceiling, not a bug. A single query stops serving at roughly 20,000 distinct lots however many millions it reports holding. The Actor automatically splits the sale-date range to reach further; if it still falls short, narrow the query — one department or one date range at a time — and run it more than once.

Why is the reported total so much bigger than what I got?

Invaluable returns an approximate count and flags it as an estimate; repeating the same query returns 85 million one moment and 110 million the next. The log prints the estimate for orientation only, and the run reads until the index actually runs dry.

Enrichment fields are missing on some rows.

Those endpoints throttle hard, and how hard depends on how recently the source has been pushed. The Actor retries, rotates proxy sessions and paces itself against the responses, but a lot whose request never got through is written without the block rather than with invented values. Switch proxyConfiguration to residential proxies, ask for fewer rows, or come back later.

The log says enrichment was switched off part-way.

That is the circuit breaker. After twelve consecutive dead detail fetches the Actor stops asking, because at that point the source has stopped answering this proxy pool entirely and retrying only burns run time. The listing fields are complete and unaffected, and nothing is charged for the blocks that did not arrive. Re-run with residential proxies for the lots you still need.

Why is priceResult zero on a past lot?

Invaluable writes 0 both for a lot that did not sell and for a house that withholds its results. sold and resultsPosted tell the two apart. Use soldOnly to keep only lots with a published hammer price.

Why does an upcoming lot have no priceResult?

Because it has not been sold yet. The field is omitted rather than written as zero, so an empty cell is never mistaken for a lot that failed to sell.

A field stopped filling.

Invaluable changed its index or its lot payload. Email us with your run ID so we can update the parser.

FAQ

QuestionAnswer
Do I need an Invaluable account or API key?No. This reads public Invaluable data, so there is nothing to register or authenticate.
How far back does the archive go?Invaluable's archive spans decades of sales. Use dateFrom and dateTo to pick a window; the earliest and latest dates your filters actually reach are printed in the log.
Are prices before or after buyer's premium?priceResult is the hammer price in the sale's own currency, and it is in the base row. Tick includeLotDetails to add buyersPremiumPct and compute the total.
Can I compare prices across countries?Yes. Tick convertToUsd and every price, estimate and bid also arrives in USD with the rate used on the row.
Can I get every lot in one sale?Yes. Put the sale's code in catalogRefs and leave the keyword empty.
Does it cover live bidding?It reads the current bid, bid count and reserve as the index publishes them. It does not place bids and does not stream a live sale.
How many rows per run?Free plan: 25. Paid: up to 100,000, bounded by how many distinct lots your filters actually reach.
Can I avoid the optional charges entirely?Yes. Leave every box unticked, which is how the Actor ships. A default run bills result-item, search-query and apify-actor-start, and nothing else.
Do I need a proxy?Not for search, and it is off by default. Yes for the five blocks that read a lot, sale, artist or house page, which throttle per IP.
Is this an official Invaluable product?No. It is unofficial and reads only publicly available Invaluable data.

Browse the full ParseForge collection for more scrapers.

🆘 Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Invaluable LLC or any auction house listed on it. It collects only publicly available Invaluable data. Invaluable and the auction houses assert rights over their catalogue text and images; you are responsible for using this data in compliance with Invaluable's terms and applicable law, and for obtaining a licence where your use requires one.