Dorotheum.com Auction & Artist Scraper
Pricing
from $7.50 / 1,000 results
Dorotheum.com Auction & Artist Scraper
Dorotheum.com auction scraper โ real unpaywalled realized prices back to 1998, upcoming estimates, and artist profiles, with built-in delta mode.
Pricing
from $7.50 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
dorotheum-scraper
Scrapes auction lots and artist profiles from Dorotheum.com โ one of Europe's oldest auction houses. Real, unpaywalled realized prices for historical sales going back to 1998, upcoming-auction estimates, and the artist directory, all from one Actor.
Contents
- Key features
- Output
- Input
- Input examples
- Incremental (delta) mode
- How to scrape Dorotheum.com
- You might also like
- FAQ
๐ Key features
- Real hammer prices, completely open. Unlike Artprice.com's paywalled "Cote" price index, Dorotheum publishes every historical lot's realized price with no login and no subscription.
- Three entity types, one Actor.
entityType: currentAuctions(upcoming, not yet resolved),auctionResults(historical, with real realized prices โ the default), orartists. - Unusually cheap to crawl at scale. Each auction-event page embeds every lot in that sale already priced โ one request returns a whole auction's results (confirmed live: 312 lots from a single fetch), not one request per lot. A full historical crawl costs on the order of the number of auctions (~9,300), not the number of lots.
- Full historical archive in scope by default.
auctionResultswalks the complete auction sitemap back to 1998 when unbounded (maxItems: null) โ not a recent-years-only sample. - Delta mode, tuned per entity type.
auctionResultsandartistsdefault to the usual auto-incremental behavior (full scan first run, changes only after).currentAuctionsalways fully refreshes every run instead โ upcoming-sale estimates change as a sale date approaches, so a full picture beats a delta for that one. - Honest about what "artist rollup" means here.
entityType: artistsreports real bio fields (name, life dates, nationality) plus a recent-activity summary from the artist's own page โ not a full-catalogue rollup like the other art actors in this account compute. See Output's known gaps for why, and what a real one would take.
๐ Output
One dataset item per lot or artist, depending on entityType โ see
.actor/dataset_schema.json for the full field list, or the Output
tab's per-entity-type views for a readable table.
Example lot record (historical, sold):
{"source": "dorotheum","entity_type": "auctionResults","external_id": "dorotheum_10204744","url": "https://www.dorotheum.com/en/l/10204744/","title": "Peter Paul Rubens Nachfolger des 19. Jahrhunderts","auction_name": "Summer auction","auction_date": "2026-07-29","lot_number": "5","price": 1170,"currency": "EUR","starting_bid": 900.0,"sold": true,"change_type": "new"}
Example artist record:
{"source": "dorotheum","entity_type": "artists","external_id": "dorotheum_artist_alvar-aalto","url": "https://www.dorotheum.com/en/k/alvar-aalto/","name": "Alvar Aalto","birth_year": 1898,"death_year": 1976,"nationality": "Finland","recent_lot_count": 30,"recent_avg_price": 4294.73,"change_type": "new"}
Results can be downloaded as JSON, CSV, or Excel from the Console's Output tab, or pulled via the Apify API/dataset endpoint.
Known gaps:
priceis only set once a lot is actually sold (sold: true) โ the same underlying site field means "starting bid" instead when a lot hasn't sold, and this Actor doesn't conflate the two.estimate_low/estimate_highare only populated when Dorotheum itself shows a genuine estimate range for a lot โ many lots (especially recent ones) only ever show a singlestarting_bidinstead; that field is populated far more often and isn't a proxy for a missing estimate.descriptionis the full free-text field (medium, dimensions, condition are embedded in prose) โ not split into structured fields. The format varies too widely across 25+ years and every object category (paintings, furniture, jewelry, coins, ...) to extract reliably without guessing.entityType: artists'recent_*fields come from that artist's own page, which shows their most recent lots only (confirmed capped around 30 for a prolific artist) โ not their full historical catalogue at Dorotheum. A true full-catalogue rollup would mean cross-referencing everyauctionResultslot ever fetched against the artist โ a real follow-up, not built here.artist_name/artist_idare only populated when Dorotheum's own system attributes a lot to a named artist โ works catalogued as "follower of", "school of", or fully anonymous carry the attribution in the free-texttitleinstead, with these fields left null.
โ๏ธ Input
See .actor/input_schema.json for the full JSON schema.
| Parameter | Type | Default | Description |
|---|---|---|---|
entityType | String | auctionResults | currentAuctions, auctionResults, or artists. |
startUrls | Array of strings | (none) | Specific auction URLs (.../en/a/{id}/) or artist URLs (.../en/k/{slug}/) to scrape directly, instead of the full sitemap-driven crawl. Scope is always "custom" โ no delisting-detection, no persisted baseline (a hand-picked list is necessarily partial). |
maxItems | Integer | 50 | Stop after pushing this many dataset items (lots or artists). Defaults to a fast, cheap preview (also what keeps an unconfigured run within Apify's automated 5-minute QA check). A full auctionResults crawl covers the entire historical archive โ raise this or clear it (set to null) for that. |
mode | String | auto | auto (recommended): the usual full-then-incremental behavior for auctionResults/artists; always full for currentAuctions regardless of an existing baseline (see Key features). full/incremental override this per run. |
impersonate | String | firefox (internal) | curl_cffi TLS-impersonation target. Dorotheum's Cloudflare Bot Management challenges plain requests, so this is set internally by default โ override only if firefox stops working. |
proxyConfiguration | Object | {"useApifyProxy": false} | Apify Proxy config. Off by default โ this Actor clears Cloudflare fine without one. |
๐งช Input examples
Quick preview of recent historical results (the default):
{ "entityType": "auctionResults" }
Full historical archive (exhaustive, slow โ every auction event back to 1998, maxItems: null
explicitly overrides the 50-item default):
{ "entityType": "auctionResults", "maxItems": null }
What's currently up for auction, fully refreshed:
{ "entityType": "currentAuctions", "maxItems": null }
Full artist directory:
{ "entityType": "artists", "maxItems": null }
A specific auction's results:
{ "entityType": "auctionResults", "startUrls": ["https://www.dorotheum.com/en/a/123940/"] }
Scheduled tracking run โ full, uncapped run (maxItems cleared โ required for the baseline to
save and delistings to be detected):
{ "entityType": "auctionResults", "mode": "incremental", "maxItems": null }
๐ Incremental (delta) mode
Every run classifies each item as new, changed (price/sold-status moved, for lots; recent
activity moved, for artists), unchanged, or delisted, using a state baseline persisted in a
named Apify Key-Value Store scoped to entityType.
auctionResults/artists:mode: auto(default) โ first run for a scope pushes everything (full); later runs push onlynew/changed/delisted(incremental).currentAuctions:mode: autoalways behaves asfull, every run โ see Key features for why.- A
startUrls-scoped run is always partial and never updates the baseline or reports delistings.
Full design: ../../docs/incremental-mode.md.
๐ How to scrape Dorotheum.com
- Open the Dorotheum Auction Results & Artist Scraper in Apify Console and go to the Input tab.
- Pick
entityType(currentAuctions,auctionResults, orartists). maxItemsdefaults to 50 (a quick preview) โ clear it (set tonull) for a full, uncapped run.- Click Start.
- When the run finishes, browse results in the Output tab, or download as JSON/CSV/Excel, or fetch them via the API.
- To track over time instead of scraping once: create a Schedule with
mode: auto.
๐ You might also like
- Artcurial Auction Results & Artist Scraper โ a second Auction houses entry, same open-realized-price idea applied to France's leading independent auction house, with both hammer and all-in final prices per lot.
- SaatchiArt Artist & Artwork Scraper, Artmajeur Artist & Artwork Scraper, and Artsper Artist & Artwork Scraper โ art marketplace data (current listings and artist profiles) rather than auction-house realized prices, for cross-referencing the same artist's market presence across primary and secondary markets.
โ FAQ
Is it legal to scrape Dorotheum.com? It's legal to collect publicly available auction-result data such as lot descriptions, prices, and public artist directory information. Scrape it only with a legitimate purpose under GDPR.
How do I get only new/changed items? Use mode: auto (or incremental) on a schedule โ see
Incremental mode.
Why is price sometimes null even for a lot that's clearly listed on the results page? That
lot didn't sell โ see Known gaps under Output. Check starting_bid instead.
Search keywords
dorotheum scraper, auction house scraper, auction results scraper, art price data, art market analytics, realized price data, auction price index, art collector data feed