Dorotheum.com Auction & Artist Scraper avatar

Dorotheum.com Auction & Artist Scraper

Pricing

from $7.50 / 1,000 results

Go to Apify Store
Dorotheum.com Auction & Artist Scraper

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

Artsiom Kunitsyn

Maintained by Community

Actor 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

  • 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), or artists.
  • 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. auctionResults walks the complete auction sitemap back to 1998 when unbounded (maxItems: null) โ€” not a recent-years-only sample.
  • Delta mode, tuned per entity type. auctionResults and artists default to the usual auto-incremental behavior (full scan first run, changes only after). currentAuctions always 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: artists reports 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:

  • price is 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_high are only populated when Dorotheum itself shows a genuine estimate range for a lot โ€” many lots (especially recent ones) only ever show a single starting_bid instead; that field is populated far more often and isn't a proxy for a missing estimate.
  • description is 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 every auctionResults lot ever fetched against the artist โ€” a real follow-up, not built here.
  • artist_name/artist_id are 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-text title instead, with these fields left null.

โš™๏ธ Input

See .actor/input_schema.json for the full JSON schema.

ParameterTypeDefaultDescription
entityTypeStringauctionResultscurrentAuctions, auctionResults, or artists.
startUrlsArray 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).
maxItemsInteger50Stop 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.
modeStringautoauto (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.
impersonateStringfirefox (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.
proxyConfigurationObject{"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 only new/changed/delisted (incremental).
  • currentAuctions: mode: auto always behaves as full, 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

  1. Open the Dorotheum Auction Results & Artist Scraper in Apify Console and go to the Input tab.
  2. Pick entityType (currentAuctions, auctionResults, or artists).
  3. maxItems defaults to 50 (a quick preview) โ€” clear it (set to null) for a full, uncapped run.
  4. Click Start.
  5. When the run finishes, browse results in the Output tab, or download as JSON/CSV/Excel, or fetch them via the API.
  6. To track over time instead of scraping once: create a Schedule with mode: auto.

๐Ÿ”— You might also like

โ“ 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