# LiveAuctioneers Scraper (`normdata/liveauctioneers-scraper`) Actor

Scrape LiveAuctioneers prices realized and upcoming lots: hammer price, estimates, AI market estimate, bids, auction house, rating, location, shipping, photos. Condition reports and dimensions as an add-on. Every filter, no 1,200 result cap.

- **URL**: https://apify.com/normdata/liveauctioneers-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $14.00 / 1,000 lots

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🔨 LiveAuctioneers Scraper

Extract auction lots from **LiveAuctioneers**, the marketplace where thousands of auction houses sell art, jewelry, watches, antiques, coins, furniture and collectibles. Get **prices realized** (what each lot actually sold for, going back more than 15 years) or **upcoming and live lots** with their current bids, in one clean table.

Each lot comes with:

- **Hammer price**, low and high **estimate**, and how the hammer compared to the estimate in %.
- LiveAuctioneers' own **market estimate** (low, high and confidence).
- Starting bid, current bid, **number of bids**, reserve met, Buy Now price.
- Auction date, lot closing time, auction type (live, timed, timed+), auction title and size.
- **Auction house** name and ID, city, state, country, **rating**, review count and Top Rated badge.
- Where the lot is (city, region, postal code, country) and the shipping options.
- Every photo, and the link to the lot.
- Add-on: the full catalog **description**, **condition report**, dimensions and weights.

### 🎯 Who uses it?

#### 🧑‍⚖️ Appraisers, insurers and estate planners

Pull every comparable sale of a maker, model or category with hammer prices and estimates, filtered by date and price, for valuations you can back up.

#### 💎 Dealers, resellers and flippers

See what Rolex Submariners, Tiffany lamps or Banksy prints really sell for, then find upcoming lots with no bids or with free shipping and bid below the market.

#### 📊 Market researchers and collectors

Track prices for an artist, a brand or a period year by year. Compare estimates with hammer prices to spot categories that sell above or below expectations.

#### 🏛️ Auction houses

Benchmark competitors: what they sell, how their lots perform against estimate, their ratings and reviews.

### ✨ What it does

- **Past sales or upcoming lots.** Past sales give hammer prices; upcoming lots give current bids and closing times.
- **Search the way you think:**
  - Search terms ("rolex submariner", "tiffany lamp", "banksy"), several per run.
  - **389 categories and subcategories**, from Jewelry > Watches > Wristwatches to Furniture > Chairs > Windsor Chairs.
  - **Maker, artist or brand** ("Lalique", "Rolex", "Andy Warhol").
  - Material or technique ("Porcelain", "Sterling silver"), style or period ("Art Deco", "Qing Dynasty") and **93 origins** ("Asian > Chinese", "European > French").
- **Or paste LiveAuctioneers links:** a lot, a **whole auction catalog** (every lot in the sale), a category page, a search or a price results page.
- **Every useful filter:**
  - **Auction date range**: exact dates, or periods like "30 days" (ago for past sales, ahead for upcoming lots).
  - **Hammer price**, **estimate** and **current bid** ranges.
  - Auction house country, **auction houses near a ZIP or postal code**, auction type, shipping options (free shipping, LiveShip, local pickup...).
  - 10 sort orders: most recent sale or soonest auction, oldest, newly listed, highest and lowest price, highest and lowest estimate, most bids, most popular, best match.
- **Extra filters:** title words to include or exclude, specific auction houses, Top Rated houses only, minimum house rating, bid count range (0 finds lots nobody has bid on), Buy Now only.
- **New lots only.** For scheduled runs: saves only lots the same search has not saved before.

### 🏆 Why this scraper

- **No 1,200 result cap.** LiveAuctioneers shows at most 1,200 past sales per search. This scraper splits big searches into sale date windows (and price bands for very large auctions), so you get **every** lot: tested at 7,256 lots for a single day, matching the site's own count exactly.
- **Fast.** About 1,000 lots in 7 seconds.
- **Prices you can analyse.** Hammer price, estimates, hammer vs estimate %, market estimate and bids are numbers. Dates are ISO. Every photo URL is ready to download.
- **Full catalog text as an add-on.** Description and condition report come as clean plain text, not HTML.
- **No proxy needed.** Nothing extra to set up or pay for.

### ⚖️ How it compares

Based on each Actor's public input options (October 2026).

| Capability | This actor | scrapersdelight | ivanvs | jungle_synthesizer | muhammadafzal |
|---|:--:|:--:|:--:|:--:|:--:|
| Search terms | **yes** | yes | links only | yes | yes |
| Past sales (prices realized) | **yes** | yes | links only | art only | no |
| Upcoming lots | **yes** | yes | links only | no | yes |
| Categories | **389** | yes | no | by ID | no |
| Maker, material, style, origin | **yes** | no | no | no | no |
| Lot, auction, category and search links | **yes** | yes | yes | lots only | yes |
| Auction date range | **yes** | no | no | no | no |
| Hammer, estimate and current bid ranges | **yes** | no | no | no | no |
| Country, auction type, shipping | **yes** | no | no | no | no |
| Auction houses near a ZIP code | **yes** | no | no | no | no |
| Auction house filter | **yes** | yes | no | by ID | no |
| Top Rated, rating and bid count filters | **yes** | no | no | no | no |
| Title must / must not contain | **yes** | no | no | no | no |
| Full description and condition report | **add-on** | yes | no | no | yes |
| New lots only (monitoring) | **yes** | no | no | no | no |
| Sort orders | **10** | 5 | none | none | none |

### 📦 What data you get

| Field | Description |
| --- | --- |
| `itemId`, `url` | LiveAuctioneers lot ID and the lot page. |
| `title`, `summary`, `lotNumber` | The lot as listed in the catalog. |
| `status` | `sold`, `upcoming`, `live` or `closed`. |
| `hammerPrice`, `currency` | Final price at the fall of the hammer (before buyer's premium), in the lot's currency. |
| `lowEstimate`, `highEstimate`, `hammerVsEstimatePct` | The house's estimate, and the hammer as a % of the middle of the estimate (100 = right on estimate). |
| `marketEstimateLow`, `marketEstimateHigh`, `marketEstimateConfidence` | LiveAuctioneers' market estimate for the lot and its confidence (0 to 1). |
| `startingBid`, `currentBid`, `bidCount`, `reserveMet`, `buyNowPrice` | Bidding data. `currentBid` is for lots not yet sold. |
| `saleType`, `auctionDate`, `lotClosesAt` | Live, timed or timed+ auction; when the auction starts and when the lot closes (UTC). |
| `auctionId`, `auctionTitle`, `auctionStatus`, `lotsInAuction` | The auction catalog the lot belongs to. |
| `auctionHouse`, `auctionHouseId`, `houseCity`, `houseState`, `houseCountry` | Who sells it. |
| `houseRating`, `houseReviews`, `houseTopRated` | The house's rating (1 to 5), number of reviews and Top Rated badge. |
| `lotCity`, `lotRegion`, `lotPostalCode`, `lotCountry` | Where the lot is. |
| `freeShipping`, `liveShipping`, `shipsInHouse`, `freeLocalPickup`, `flatRateShipping` | Shipping options; `flatRateShipping` is the flat amount. |
| `promoted` | Promoted lot. |
| `description`, `conditionReport`, `dimensions`, `weight`, `shippingDimensions`, `shippingWeight` | Full lot details (add-on, otherwise empty). |
| `image`, `images`, `imageCount` | Main photo and every photo, full size. |
| `searchedFor` | Which of your searches or links found it. |
| `scrapedAt` | When the row was collected (UTC). |

#### Example row (trimmed)

```json
{
  "itemId": 66576190,
  "title": "Rolex Daytona 6241 \"Paul Newman Panda\"",
  "lotNumber": "0234",
  "status": "sold",
  "hammerPrice": 255000,
  "currency": "USD",
  "lowEstimate": 300000,
  "highEstimate": 400000,
  "hammerVsEstimatePct": 72.9,
  "startingBid": 100000,
  "bidCount": 7,
  "reserveMet": true,
  "saleType": "Live auction",
  "auctionDate": "2018-12-11T19:00:00.000Z",
  "auctionId": 129651,
  "auctionTitle": "Important Vintage & Modern Watches",
  "lotsInAuction": 138,
  "auctionHouse": "Mhaponnos Luxury Auction",
  "auctionHouseId": 6399,
  "houseCity": "Miami",
  "houseState": "FL",
  "houseCountry": "US",
  "lotPostalCode": "33131",
  "image": "https://p1.liveauctioneers.com/6399/129651/66576190_1_x.jpg?version=1542492495",
  "imageCount": 7,
  "url": "https://www.liveauctioneers.com/item/66576190_rolex-daytona-6241-paul-newman-panda",
  "searchedFor": "\"rolex\"",
  "scrapedAt": "2026-10-05T14:02:11.000Z"
}
```

### 💡 Use cases

#### 📈 Every Rolex Submariner sold in the last 3 years

```json
{ "searchTerms": ["rolex submariner"], "dateFrom": "3 years", "maxItems": null }
```

#### 🏺 Chinese porcelain vases that sold for $1,000 to $10,000

```json
{ "searchTerms": ["vase"], "material": "porcelain", "origin": "162", "minHammerPrice": 1000, "maxHammerPrice": 10000, "maxItems": null }
```

#### 🎨 Upcoming Andy Warhol lots, soonest first, with full details

```json
{ "mode": "upcoming", "makers": ["Andy Warhol"], "includeDetails": true, "maxItems": null }
```

#### 🔔 New watches with no bids near New York, every morning

```json
{ "mode": "upcoming", "categories": ["97"], "nearZip": "10001", "radiusMiles": 50, "maxBids": 0, "onlyNew": true, "maxItems": null }
```

#### 📚 A whole auction catalog

```json
{ "urls": ["https://www.liveauctioneers.com/catalog/433559_certified-timepiece-jewels-liquidation-05/"], "maxItems": null }
```

#### 🏆 Top results for an artist, highest hammer first

```json
{ "searchTerms": ["banksy"], "sortBy": "price_high", "maxItems": 500 }
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum lots** and **What to scrape** | Always first: caps the whole run (shared across your searches; empty means no limit), and past sales or upcoming lots. |
| **What** | Search terms, links, categories, makers, material, style and origin. |
| **When and where** | Auction date range, auction house country, auction houses near a ZIP code. |
| **Prices and auction type** | Estimate, hammer price and current bid ranges, auction type, shipping, sort. |
| **Extra filters** | Title words, auction houses, Top Rated, rating, bids, Buy Now. |
| **Add-ons** | Full lot details. |
| **Monitoring** | New lots only, with an optional monitor name. |

Search terms, categories and makers combine: each term is searched in each category, for each maker. Material, style and origin narrow every search.

### 💰 Pricing

Pay-per-event: a one-time **$0.003** when the run starts, plus a price per lot saved to your dataset that drops with your Apify plan. Full lot details are an optional add-on per lot.

| Your Apify plan | Per lot | With full details | 1,000 lots | 1,000 lots with details |
| --- | --- | --- | --- | --- |
| Free | $0.020 | +$0.006 | $20.00 | $26.00 |
| Bronze | $0.018 | +$0.005 | $18.00 | $23.00 |
| Silver | $0.016 | +$0.0045 | $16.00 | $20.50 |
| Gold / Platinum / Diamond | $0.014 | +$0.004 | $14.00 | $18.00 |

Lots dropped by your filters are not charged. There are no proxy costs. New Apify accounts start with $5 in free credit. On the Free plan a run saves up to 10 lots.

**Speed:** about 1,000 lots in 7 seconds.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the LiveAuctioneers Scraper.
3. Type a search term (or keep the prefilled one), pick past sales or upcoming lots and your filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

You can also:

- Run it programmatically through the Apify API (`run-sync-get-dataset-items`) or the ApifyClient for JavaScript and Python.
- Schedule it with Apify's built-in Scheduler, with **New lots only** on, to catch new lots every day.

### 🤖 Use with AI agents (MCP)

Give an AI agent live access to auction prices through the Model Context Protocol:

```
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/liveauctioneers-scraper"
```

Then prompt it in plain language, for example "what did Tiffany Favrile vases sell for this year?".

### 🔧 Troubleshooting

**The log says a search was "split into sale date windows".**
That's normal. LiveAuctioneers lists at most 1,200 past sales per search, so bigger searches are collected window by window. Past the first 1,200, rows come in date order.

**A maker was "searched as keywords".**
The name is not a LiveAuctioneers creator, so it was added to the search words instead. Results are still relevant, just less strict.

**Prices are in different currencies.**
Each lot keeps its house's currency (`currency`). Price filters apply in that currency.

**Near a ZIP code shows lots far away.**
The ZIP filter finds auction **houses** near you. A house can sell lots stored elsewhere; check `lotPostalCode`.

**A scheduled "New lots only" run saved nothing.**
Nothing new matched since the last run. Changing terms, links or filters starts a fresh memory; set a **Monitor name** to keep it.

### ❓ FAQ

| Question | Answer |
| --- | --- |
| Do I need a LiveAuctioneers account? | No. Only public lot data is read. |
| Does the hammer price include the buyer's premium? | No, it's the hammer price as LiveAuctioneers shows it. |
| How far back do past sales go? | More than 15 years. Use the date range to pick a period. |
| Is there a result limit? | No. Leave the maximum empty to get the whole search, even past 1,200. |
| Does it need a proxy? | No. There is an optional proxy setting if you ever need one. |
| Can I track new lots? | Yes. Turn on **New lots only** and schedule the run. |

### 🛡️ Limits & responsible use

This Actor reads only public lot data shown on LiveAuctioneers. It never signs in, never bids and never contacts auction houses. Use the data in line with LiveAuctioneers' terms.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

### 🧪 Local development

```powershell
bun install
bun run typecheck
bun test/qa.mjs
apify run
```

Local results are stored in `storage/datasets/default`.

# Actor input Schema

## `maxItems` (type: `integer`):

Stop after this many lots in total. Leave empty for no limit (every matching lot, even past the 1,200 results the site shows per search). The Apify Free plan is always capped at 10.

## `mode` (type: `string`):

Past sales are lots already auctioned, with the hammer price (prices realized), back to 2009. Upcoming lots are open for bidding now or in future auctions, with the current bid.

## `searchTerms` (type: `array`):

One search per line, e.g. "rolex submariner", "tiffany lamp", "banksy". Leave empty to browse a whole category or everything.

## `urls` (type: `array`):

Lot pages (liveauctioneers.com/item/...), whole auctions (/catalog/...: every lot in the sale), category pages (/c/...), searches (/search/?keyword=...) or price results pages (/price-result/...).

## `categories` (type: `array`):

Pick one or more of 389 LiveAuctioneers categories and subcategories. Each one is searched separately and combined with the search terms.

## `makers` (type: `array`):

LiveAuctioneers creator names, e.g. "Lalique", "Rolex", "Andy Warhol", "Tiffany & Co.". Each one is searched separately. A name the site does not list as a creator is searched as keywords.

## `material` (type: `string`):

One material, e.g. "Porcelain", "Sterling silver", "Bronze", "Oil on canvas". Narrows every search.

## `stylePeriod` (type: `string`):

One style or period, e.g. "Art Deco", "Mid-Century Modern", "Qing Dynasty", "Victorian". Narrows every search.

## `origin` (type: `string`):

One origin, e.g. Asian > Chinese, European > French or American > North American > Native American. Narrows every search.

## `dateFrom` (type: `string`):

Past sales: sold on or after this date. Upcoming lots: auction on or after it. A date like "2024-01-01", or a period like "30 days" (ago for past sales, from now for upcoming lots).

## `dateTo` (type: `string`):

Same format as "Auction date from", e.g. "2024-12-31" or "7 days".

## `countries` (type: `array`):

Keep only lots sold by houses in ANY of these countries.

## `nearZip` (type: `string`):

Only lots from auction houses within the radius of this ZIP or postal code, e.g. "10001". Handy for pickup.

## `nearCountry` (type: `string`):

Country of the ZIP or postal code above.

## `radiusMiles` (type: `integer`):

Distance from the ZIP or postal code to the auction house. Defaults to 50 miles.

## `minEstimate` (type: `integer`):

Lots whose estimate range reaches at least this amount.

## `maxEstimate` (type: `integer`):

Lots whose estimate range starts at or below this amount.

## `minHammerPrice` (type: `integer`):

Past sales only. Final price at the fall of the hammer, before buyer's premium.

## `maxHammerPrice` (type: `integer`):

Past sales only.

## `minCurrentBid` (type: `integer`):

Upcoming lots only.

## `maxCurrentBid` (type: `integer`):

Upcoming lots only. Set 0 for lots with no bids yet.

## `saleTypes` (type: `array`):

Keep only ANY of these.

## `shipping` (type: `array`):

Keep only lots that offer ANY of these.

## `sortBy` (type: `string`):

Order of the results. Matters most when you set a Maximum.

## `titleIncludes` (type: `array`):

Keep only lots whose title or summary contains ANY of these words, e.g. "18k", "signed", "provenance". Not case sensitive.

## `titleExcludes` (type: `array`):

Drop lots whose title or summary contains any of these words, e.g. "reproduction", "style of", "lot of".

## `auctionHouses` (type: `array`):

Keep only lots from houses whose name contains ANY of these (e.g. "Heritage", "Bonhams") or with this house ID.

## `topRatedOnly` (type: `boolean`):

Keep only lots from houses LiveAuctioneers marks as Top Rated.

## `minHouseRating` (type: `number`):

Keep only houses rated at least this, from 1 to 5, e.g. 4.5.

## `minBids` (type: `integer`):

Keep only lots with at least this many bids.

## `maxBids` (type: `integer`):

Keep only lots with at most this many bids. 0 finds lots nobody has bid on yet.

## `buyNowOnly` (type: `boolean`):

Keep only lots with a Buy Now price.

## `includeDetails` (type: `boolean`):

Add the full catalog description, condition report, dimensions and weight to every lot. Charged as an add-on per lot that has them.

## `onlyNew` (type: `boolean`):

For scheduled runs: save only lots this same search has not saved before. The first run saves everything; later runs save just what is new. Kept per search (terms, links and filters).

## `monitorName` (type: `string`):

Optional. Give "New lots only" a fixed name to keep its memory even after you change the filters.

## `proxyConfiguration` (type: `object`):

Optional, off by default. LiveAuctioneers works fine without one. Turn it on only if your runs get blocked. Proxy traffic is billed to your Apify account.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "sold",
  "searchTerms": [
    "rolex submariner"
  ],
  "nearCountry": "US",
  "sortBy": "recent",
  "topRatedOnly": false,
  "buyNowOnly": false,
  "includeDetails": false,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `lots` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10,
    "searchTerms": [
        "rolex submariner"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/liveauctioneers-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxItems": 10,
    "searchTerms": ["rolex submariner"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/liveauctioneers-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "searchTerms": [
    "rolex submariner"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call normdata/liveauctioneers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/liveauctioneers-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/iMZE0FdFaLDgraBhL/builds/pSKt6WSdnLBDLOsal/openapi.json
