Dorotheum.com Auction & Artist Scraper avatar

Dorotheum.com Auction & Artist Scraper

Pricing

from $5.25 / 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 $5.25 / 1,000 results

Rating

0.0

(0)

Developer

Artsiom Kunitsyn

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 days ago

Last modified

Categories

Share

Dorotheum Scraper — auction results & realized prices since 1998

Scrape auction results, upcoming lots and artists from Dorotheum, Vienna's auction house since 1707 and one of the largest in Europe. Get the realized (hammer) price, estimate range, starting bid, sale date and artist for every lot in Dorotheum's public archive, going back to 1998. That's an open alternative to paywalled auction price databases. No login or subscription.

Covers every Dorotheum department: Old Master and modern paintings, contemporary art, furniture, jewelry, watches, coins, antiques, design, classic cars and more. Export Dorotheum auction data to JSON, CSV or Excel, or pull it into Python, Google Sheets or an AI agent.

Dorotheum Auktionsergebnisse, Zuschlagspreise und Schätzpreise als Datensatz.

Contents

What data can you extract from Dorotheum?

Three data types, chosen with entityType:

auctionResults (default) and currentAuctionsartists
Lot title, number, URL, image URLName, profile URL
Full lot description (medium, size, condition, provenance)Birth and death year, nationality
Auction name, date, type, branchRecent lot count at Dorotheum
Realized price and currency (sold lots)Recent average price
Estimate low / highRecent sale categories
Starting bidLatest lot title and price
Sold flag
Artist name, id and profile URL
  • auctionResults: past sales with realized prices, back to 1998.
  • currentAuctions: lots coming up for sale, with estimates and starting bids.
  • artists: Dorotheum's artist directory.

Every record also carries a change_type (new, changed, unchanged, delisted). The Output tab has a readable table view per data type with the full field list.

Why this Dorotheum scraper

  • Real realized prices, completely open. Dorotheum publishes each historical lot's price with no login, and this actor turns 25+ years of it into a clean dataset.
  • Cheap at scale. One auction page carries every lot in that sale, so a whole auction's results come from a single request. A full historical crawl costs roughly the number of auctions (~9,300), not lots.
  • Complete archive by default. auctionResults walks every auction back to 1998 when uncapped.
  • Reliable. Built to get past Dorotheum's bot protection with residential proxies and a browser fingerprint.

Sample output

Real rows from a recent run (Old Master Paintings sale, 29 March 2000):

LotEstimate (EUR)Realized (EUR)
Lucas Cranach the Elder290,000–360,000265,837
Jan van Goyen102,000–116,000196,972
Bernardino Licinio87,000–100,000102,904
Jan Sanders van Hemessen73,000–110,00089,532
Bartolomé Esteban Murillo100,000–130,00080,579
Johann Carl Loth, called Carlotto16,000–20,00060,027

Lot record (JSON):

{
"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"
}

Artist record (JSON):

{
"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"
}

Good to know:

  • price is set only when a lot actually sold (sold: true). For an unsold lot the site shows the starting bid in the same place; the actor keeps that in starting_bid and never mixes the two.
  • estimate_low/estimate_high are filled only when Dorotheum shows an estimate range. Many lots, especially recent ones, show only a starting bid, which is in starting_bid.
  • description is Dorotheum's full free text. Medium, size and condition sit inside it and aren't split into separate fields, because the format varies too much across 25 years and every object category.
  • The artists data type's recent_* fields come from the artist's own Dorotheum page, which lists only their most recent lots (about 30 at most). They aren't a lifetime total.
  • artist_name/artist_id are filled only when Dorotheum attributes a lot to a named artist. Works catalogued as "follower of", "school of" or anonymous keep the attribution in title.

Who uses this Dorotheum scraper?

  • Art-market analysts and price databases: realized prices, estimate accuracy and sell-through rates across 25+ years.
  • Appraisers, insurers and art-lending firms: auction comparables for valuations.
  • Dealers and collectors: track upcoming lots and see what similar works fetched.
  • Researchers and journalists: price history for artists, schools and object categories.

How much does it cost?

Pay per result: you're charged per lot or artist record delivered. There's no monthly rental or separate proxy fee to estimate. See the Pricing tab for current prices, including automatic discounts on higher Apify plans.

The default run returns 50 lots, so trying it costs well under a cent. The monthly credit on Apify's free plan covers a good-sized first dataset.

How to scrape Dorotheum auction results

  1. Click Try for free (or open the actor in Apify Console) and go to the Input tab.
  2. Choose entityType: auctionResults, currentAuctions or artists.
  3. Optionally paste specific auction or artist URLs into startUrls.
  4. maxItems defaults to 50, a quick preview. Clear it (null) for the full archive.
  5. Leave the Residential proxy setting on (the default).
  6. Click Start.
  7. Browse the results in the Output tab, or download them as JSON, CSV, Excel or HTML.
  8. To collect new results as they're published, add a Schedule with mode: auto.

Input

ParameterTypeDefaultDescription
entityTypeStringauctionResultscurrentAuctions, auctionResults or artists.
startUrlsArray of strings(none)Specific auction URLs (.../en/a/{id}/) or artist URLs (.../en/k/{slug}/) to scrape instead of the full crawl. Such runs are always partial: no delisting detection, no saved baseline.
maxItemsInteger50Stop after this many lots or artists. A full auctionResults crawl covers the whole archive; raise this or clear it (null) for that.
modeStringautoauto (recommended): full scan first, changes only after, for auctionResults/artists. currentAuctions always returns everything, because estimates change as a sale approaches. full/incremental override this per run.
impersonateStringchrome (internal)Browser fingerprint used for requests. Dorotheum's bot protection challenges plain requests; change only if chrome stops working.
proxyConfigurationObjectResidentialApify Proxy settings. Keep the Residential default: Dorotheum blocks datacenter and cloud IPs.

Input examples

Quick preview of historical results (the default):

{ "entityType": "auctionResults" }

Full historical archive back to 1998 (slow):

{ "entityType": "auctionResults", "maxItems": null }

Everything currently up for auction:

{ "entityType": "currentAuctions", "maxItems": null }

Full artist directory:

{ "entityType": "artists", "maxItems": null }

Results of one specific auction:

{ "entityType": "auctionResults", "startUrls": ["https://www.dorotheum.com/en/a/123940/"] }

Scheduled run for new results (keep maxItems cleared so the baseline is saved):

{ "entityType": "auctionResults", "mode": "incremental", "maxItems": null }

Track new results over time

Every run labels each item new, changed (price or sold status moved for lots; recent activity moved for artists), unchanged or delisted. The baseline is saved per entityType.

  • auctionResults/artists: mode: auto (default) returns everything on the first run, then only new/changed/delisted.
  • currentAuctions: mode: auto always returns everything.
  • A startUrls run is always partial and never updates the baseline.

Use it from Python or the API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("artsiom_k/dorotheum-scraper").call(
run_input={"entityType": "auctionResults", "maxItems": 5000}
)
for lot in client.dataset(run["defaultDatasetId"]).iterate_items():
if lot["sold"]:
print(lot["auction_date"], lot["title"], lot["price"], lot["currency"])

The same works from JavaScript, plain HTTP, Make, Zapier, n8n and Google Sheets integrations. AI agents such as Claude or Cursor can call it through Apify's MCP server.

FAQ

Does Dorotheum have an API for auction results? No, there's no public Dorotheum API. This actor returns Dorotheum's public auction results as structured data, so it works as one.

How far back do Dorotheum auction results go? To 1998. An uncapped auctionResults run walks the full archive.

Why is price empty for a lot that's listed in the results? That lot didn't sell. Check starting_bid. See Good to know.

Is the price the hammer price or does it include buyer's premium? It's the result price exactly as Dorotheum publishes it on the lot page.

Which departments are covered? All of them: paintings from Old Masters to contemporary, prints, furniture, jewelry, watches, coins, antiques, design, arms, toys, classic cars and more. Filter by auction_name or title after the run.

Can I export Dorotheum results to Excel or CSV? Yes: JSON, CSV, Excel, XML or HTML from the Output tab, or through the API.

How do I get only new results? Run it on a schedule with mode: auto (or incremental) and maxItems cleared.

Is it legal to scrape Dorotheum? This actor collects publicly available auction-result data: lot descriptions, prices and the public artist directory. Use it for a legitimate purpose and in line with GDPR where personal data is involved.

Something doesn't work or a field is missing? Open an issue on the Issues tab; issues are answered promptly.

Same design, same output style, so results combine easily: