Skip to content
    ↑↓ to choose · Enter to open

    · 12 min read

    Sotheby's Lot Scraper: 26 Data Fields, Up to 1,000 Free Results/Month

    By CrawlerBros Engineering Team

    Each record carries 26 output fields covering lot identifiers, low and high estimates, realized sale prices, and full catalog descriptions. The Actor pulls both upcoming bidding events and past sold catalogs across departments such as fine art, jewelry, watches, and decorative items at $5.00 per 1,000 results on the free-plan price. It is built for art advisors, collectors, and valuation analysts tracking secondary market pricing trends. It is not suitable for buyers seeking private seller contact information or unlisted reserve figures, which are not included in the output.

    Try it: open Sotheby's Lot Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try Sotheby's Lot Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Sotheby's Lot Scraper a month, before run-start charges and platform usage.

    The example request further down caps maxItems at 50, so a first run returns at most 50 results and costs at most $0.25 in result charges. That is enough to see the real shape of the data before deciding anything.

    Sotheby's Lot Scraper was last updated on 2026-05-27. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 680,173 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Sotheby's Lot Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The primary driver of result charges is the maxItems limit alongside the breadth of your query or category selection. The cheapest way to test your parsing pipeline is to run the Actor with maxItems set to 50, which caps result charges at $0.25 while returning full lot payloads.

    How do you run Sotheby's Lot Scraper from the API?

    The schema marks 1 of its 8 controls as required: mode. The payload below uses the schema's own prefilled values, so it runs as written once you substitute your API token.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~sothebys-lot-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"search","query":"contemporary art","category":"contemporary-art","saleType":"upcoming","department":"","maxItems":50}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "search",
      "query": "contemporary art",
      "category": "contemporary-art",
      "saleType": "upcoming",
      "department": "",
      "maxItems": 50
    }
    
    run = client.actor("crawlerbros~sothebys-lot-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "search",
      "query": "contemporary art",
      "category": "contemporary-art",
      "saleType": "upcoming",
      "department": "",
      "maxItems": 50
    }
    
    const run = await client.actor('crawlerbros~sothebys-lot-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    The synchronous endpoint holds the connection open until the run finishes, which is convenient for small batches and wrong for large ones. For anything long running, start the run asynchronously and poll, or attach a webhook, so a dropped connection does not cost you the results.

    Which Sotheby's Lot Scraper inputs matter, and which can you skip?

    The mode parameter dictates your scraping path, letting you toggle between free-text search, direct lot scraping, category browsing, and specific auction slugs. Most first-time runs should stick to mode set to search paired with a specific query and leave department unset until filtering is required.

    • mode (string): What to fetch. Default: "search".
    • query (string): Keyword to search for (e.g. 'Rolex', 'Picasso', 'diamond necklace'). Used in mode=search. Default: "contemporary art".
    • category (string): Department/category slug to browse. Used in mode=byCategory. Default: "contemporary-art".
    • auctionSlug (string): The auction sale number or slug (e.g. 'hk0241', 'n11071'). Found in the Sotheby's auction URL. Used in mode=byAuction.
    • saleType (string): Filter by sale type. Default: "upcoming".
    • department (string): Restrict search results to a specific department. Default: "".
    • lotUrl (string): Full URL of a specific Sotheby's lot page. Used in mode=byLot.
    • maxItems (integer): Maximum number of lots to return. Default: 50.

    Fixed-choice controls: mode accepts search (Search lots by keyword), byLot (Get details of a specific lot URL), byCategory (Browse lots by category/department), byAuction (Browse lots for a specific auction); category accepts 12 values (default contemporary-art), including contemporary-art (Contemporary Art), jewelry-watches (Jewelry & Watches), fine-art (Fine Art), modern-art (Modern Art); saleType accepts upcoming (Upcoming / Buy Now lots), sold (Past sold lots); department accepts 15 values (default ""), including "" (All departments), Art, Jewelry, Watches.

    What does Sotheby's Lot Scraper return?

    The dataset delivers structured auction intelligence including lotId, estimateLow, estimateHigh, salePrice, and currency alongside descriptive copy and image URLs. It does not provide private consignor identities, confidential reserve amounts, or real-time paddle bidding histories.

    • lotId: String - Sotheby's internal lot identifier
    • title: String - Full lot title / description
    • department: String - Category (Contemporary Art, Jewelry, Watches, etc.)
    • artistName: String - Artist or maker name
    • brand: String - Brand name (for watches, jewelry, etc.)
    • auctionTitle: String - Name of the auction event
    • auctionType: String - In-Room / Online Auctions / etc.
    • saleType: String - auction or buy_now
    • lotNumber: String - Lot number within the sale
    • saleNumber: String - Sale identifier
    • auctionStartDate: String - ISO auction start date
    • auctionEndDate: String - ISO auction end date
    • auctionDetails: String - Human-readable date/location string
    • estimateLow: Float - Low estimate
    • estimateHigh: Float - High estimate
    • currency: String - Currency code (USD, GBP, EUR, etc.)
    • listPrice: Float - Buy-now price (for retail lots)
    • salePrice: Float - Final realized price (for sold lots)
    • location: String - Sale location city
    • region: String - Geographic region (Europe, North America, etc.)
    • description: String - Full lot description text
    • imageUrl: String - Primary image URL
    • imageAltText: String - Image alt text
    • lotUrl: String - Full URL of the lot page
    • slug: String - URL slug identifier
    • scrapedAt: String - ISO timestamp of when data was scraped

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Sotheby's Lot Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Select mode as search to query broad artist or object terms, or set it to byAuction with a known auctionSlug to target a specific sale catalog.
    2. Choose saleType based on your target: upcoming for active bidding and buy-now inventory, or sold to capture historical hammer data.
    3. Restrict results by setting department to a relevant category like Contemporary Art or Watches, or leave it blank to pull all matching inventory.
    4. Set maxItems to 50 on your initial trial run to verify dataset formatting before scheduling automated extractions.
    5. Review the returned items and confirm key numeric fields like estimateLow, estimateHigh, salePrice, and the currency match the auction location.
    6. Verify that the lotUrl and lotId fields are populated correctly to serve as stable unique keys in your database.
    7. Scale up maxItems or widen category choices once schema structure and price parsing meet pipeline requirements.

    How do you apply it? Three worked playbooks

    These are Sotheby's Lot Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Art market research

    Outcome: Art market research: Track estimates and realized prices for specific artists or periods

    Configure: mode set to search, query set to Picasso, saleType set to sold, department set to Contemporary Art, and maxItems set to 50.

    Working method: Run the Actor using a single artist name under past sold lots. Verify that realized hammer prices appear in salePrice and estimates in estimateLow and estimateHigh. Compare multi-year records by running additional runs for historical periods.

    Deliverable: A structured dataset containing past auction results, realized values, and estimate spreads for the specified artist.

    Stop condition: Stop if salePrice is consistently null across returned sold lots.

    Use case 2: Price benchmarking

    Outcome: Price benchmarking: Compare Sotheby's prices against other auction houses

    Configure: mode set to search, query set to Rolex Daytona, saleType set to sold, department set to Watches, and maxItems set to 50.

    Working method: Extract historical sale records for specific watch or art models from Sotheby's. Match lot titles, reference numbers, and currencies against datasets from other auction providers to calculate valuation differences across venues.

    Deliverable: A cross-market valuation table aligning Sotheby's estimate ranges and realized prices against external auction house figures.

    Stop condition: Stop if currency values are omitted, preventing standardized cross-currency normalization.

    Use case 3: Auction monitoring

    Outcome: Auction monitoring: Stay updated on upcoming sales matching your collecting interests

    Configure: mode set to byCategory, category set to jewelry-watches, saleType set to upcoming, and maxItems set to 50.

    Working method: Schedule periodic queries against upcoming sales in your target department. Filter out previously seen lotId values and evaluate upcoming estimateLow thresholds to identify lots entering active bidding.

    Deliverable: An alert-ready catalog of upcoming auction lots, buy-now listings, dates, and preliminary estimates.

    Stop condition: Stop if auctionStartDate or auctionEndDate strings fail to parse into valid ISO timestamps.

    What breaks, and how do you design around it?

    Sotheby's search typically returns up to 32 items per page view, so broad queries require setting maxItems appropriately. If a field like description is omitted in a search response, we accept that only populated fields will appear in the output as documented in the schema.

    When should you not use Sotheby's Lot Scraper?

    Do not use this Actor if your analysis requires real-time live bidding increments or private consignor contact records. If your research targets European mid-market curated auctions with weekly bidding cycles rather than high-end global auction events, use Catawiki Auction Scraper. For monitoring competing blue-chip sales catalogs, look at Christie's Lot & Auction Scraper, and for mid-century furniture and industrial design specialists, use Wright Auctions Scraper.

    What should you check before trusting the output?

    • Verify currency is present whenever estimateLow, estimateHigh, or salePrice contains numeric values.
    • Ensure salePrice is populated for records scraped under saleType set to sold.
    • Check that lotId and lotUrl are not null to prevent duplicate record insertion in downstream databases.
    • Flag records where department or artistName arrives empty when running structured category queries.
    • Abort downstream ingestion if maxItems was requested but zero dataset items are written.

    None of this proves a record is correct. It gives a scheduled Sotheby's Lot Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    How much does it cost to scrape 1,000 Sotheby's lots?

    Extracting 1,000 records costs $5.00 on the free-plan price, billed at $0.005 per dataset result alongside standard Apify platform usage charges. Paid Apify tiers reduce this unit cost.

    Does this scraper require Sotheby's account credentials or API tokens?

    No. All scraped data is from Sotheby's publicly accessible search pages. No credentials or API keys are required.

    What is the difference between upcoming and sold under saleType?

    Setting saleType to upcoming fetches active listings, upcoming live auctions, and buy-now retail lots. Setting it to sold returns historical sales containing final realized prices.

    Can I scrape a specific auction using its sale number?

    Yes. Set mode to byAuction and enter the sale number or identifier (such as hk0241 or n11071) into the auctionSlug field to fetch lots belonging to that specific event.

    Are all prices returned in US dollars?

    No. Prices and estimates are recorded in the sale's primary currency, such as USD for New York, GBP for London, EUR for Paris, and HKD for Hong Kong.

    Where to go next

    When you are ready to run it, open Sotheby's Lot Scraper on Apify; the free plan covers up to 1,000 results a month.

    Other Actors we maintain for related data:

    • Catawiki Auction Scraper: Scrape live auction lots from Catawiki - Europe's curated auction marketplace for art, watches, jewellery, classic cars, wine, and collectibles.
    • Christie's Lot & Auction Scraper: Scrape Christie's - one of the world's leading auction houses.
    • Doyle Auctions Scraper: Scrape Doyle Auctions (doyle.com) - one of the world's leading fine art, jewelry, silver, coins, and decorative arts auction houses.
    • Wright Auctions Scraper: Scrape Wright (wright20.com) - America's leading auction house for art and design.
    • Toomey & Co Auctions Scraper: Scrape Toomey & Co (toomeyco.com) - a leading American auction house specializing in art, design, and decorative arts.

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-27.

    • Actor last updated by its maintainers on 2026-05-27.

    • Run outcome figures cover the 30 day public window ending 2026-09-27.

    • Sotheby's Lot Scraper on Apify

    Featured actors

    Sotheby's Lot Scraper

    Scrape Sotheby's, one of the world's oldest and largest auction houses with upcoming auctions and buy-now lots spanning art, jewelry, watches, furniture, and collectibles globally.

    Run on Apify ↗