{
  "openapi": "3.0.1",
  "info": {
    "title": "LiveAuctioneers Scraper — Auction Lots & Prices Realized",
    "description": "Paste any LiveAuctioneers search, category, catalogue, auctioneer or lot URL — or search by keyword. One row per lot: title, lot number, auction house, category path up to 4 levels, estimates, current bid, price realized, sale date, condition report, images, venue address and buyer premium.",
    "version": "0.1",
    "x-build-id": "TgxbWtA2RHNjNVIYH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~liveauctioneers-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-liveauctioneers-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapersdelight~liveauctioneers-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-liveauctioneers-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapersdelight~liveauctioneers-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-liveauctioneers-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Any liveauctioneers.com URL. Five shapes are recognised and each is routed to the right walker: a search page (https://www.liveauctioneers.com/search/?keyword=tiffany+lamp&status=online — its keyword, status and sort are read out of the URL and override the fields below), a browse category (https://www.liveauctioneers.com/c/art/paintings/ or https://www.liveauctioneers.com/c/jewelry/asian/6/158/), a sale catalogue (https://www.liveauctioneers.com/catalog/424639_slug/ — zero pagination drift, measured 0.00% duplicates over 12 contiguous pages), an auctioneer page (https://www.liveauctioneers.com/auctioneer/197/freemans/), or a single lot (https://www.liveauctioneers.com/item/82260058_slug — pasted lots are fetched 50 at a time). A /price-result/ page carries a slug and no lot id, so it is rejected with a message instead of being guessed at. Each URL is billed only for the lots it actually returns.",
            "items": {
              "type": "string"
            }
          },
          "source": {
            "title": "What to scrape",
            "enum": [
              "search",
              "category",
              "auctionHouse",
              "catalogs"
            ],
            "type": "string",
            "description": "'Search' walks a keyword query, 'Category' walks a LiveAuctioneers browse category, 'Auction house' walks every current lot from a given house, and 'Auction catalogues' walks specific sale catalogues you paste in. Catalogues are the only source with zero pagination overlap (measured 0.00% duplicates over 12 contiguous pages) — the search index is re-ranked between requests, so search/category/house runs de-duplicate as they go.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search terms (source = search)",
            "type": "array",
            "description": "Keywords typed exactly as you would into the LiveAuctioneers search box, e.g. 'ming vase', 'rolex submariner', 'tiffany lamp', 'roseville pottery'. Each term is walked page by page until the lot cap is hit, and the cap is split evenly between terms so one busy keyword cannot eat the whole run.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories (source = category)",
            "type": "array",
            "description": "A top-level slug (art, collectibles, fashion, furniture, home-and-decor, jewelry), a full browse path ('/c/art/paintings/', '/c/jewelry/rings/'), a full browse URL, or a numeric LiveAuctioneers category id. Sub-category slugs are resolved against the live taxonomy, so a typo is reported with the list of valid children rather than silently widening your query to the parent you did not ask for.",
            "items": {
              "type": "string"
            }
          },
          "auctionHouses": {
            "title": "Auction houses (source = auctionHouse)",
            "type": "array",
            "description": "Numeric house ids, or auctioneer page URLs such as https://www.liveauctioneers.com/auctioneer/197/freemans/ — the id is read out of the URL. One house returns every lot that house currently has listed (or every sold lot it published, with Sold selected).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "catalogUrls": {
            "title": "Auction catalogues (source = catalogs)",
            "type": "array",
            "description": "Full catalogue URLs, e.g. https://www.liveauctioneers.com/catalog/424639_splendid-relics-the-art-of-asian-dynasties/ , or just the numeric catalogue id (424639). A LOT url (/item/…) does not contain the catalogue id and is skipped with a warning — paste it into Start URLs above instead. Past catalogues work too and carry the prices realized.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "lotStatus": {
            "title": "Upcoming lots or prices realized",
            "enum": [
              "upcoming",
              "sold"
            ],
            "type": "string",
            "description": "'Upcoming / live' returns lots you can still bid on (current bid, estimates, closing time). 'Sold' reads the price-results archive and fills salePrice (measured 100% fill on a 600-lot sold sample). IMPORTANT: LiveAuctioneers hard-blocks unauthenticated deep paging of sold lots — a single sold query stops at roughly 1,200 rows (measured: page 10 of 120 OK, page 11 returns HTTP 403). Run several narrow sold queries instead of one broad one. Ignored when source = catalogs, and overridden by a status= parameter in a pasted search URL.",
            "default": "upcoming"
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "-publishDate",
              "-estimatedPrice",
              "-relevance",
              "saleStart",
              "-bidCount"
            ],
            "type": "string",
            "description": "The sort key decides how much the index drifts while you page through it, so this is a coverage setting. Measured over 12 contiguous pages of 120 lots (live index, keyword 'antique'): 'Highest estimate' 0.00% duplicate cards, 'Newest listed' 4.24%, 'Most relevant' 5.07%, 'Sale date' 13.89%. Duplicates are always removed before billing, but a drifting index also SKIPS rows, so deep sweeps should stay on 'Newest listed' (the default) or 'Highest estimate'. On sold queries the sort also decides WHICH 1,200 rows you get: 'Newest listed' returned 2026 only, 'Sale date' returned 2009-2010, 'Highest estimate' spanned 2009-2026. Ignored when source = catalogs.",
            "default": "-publishDate"
          },
          "includeLotDetails": {
            "title": "Add the full description and condition report",
            "type": "boolean",
            "description": "ON (default): one extra batched call per 50 lots adds the auction house's full lot description, condition report (60.3% fill on upcoming lots), dimensions, weight and shipping dimensions. OFF: rows still carry the ~200-character teaser description that comes with the listing card, and conditionReport is empty.",
            "default": true
          },
          "includeCategories": {
            "title": "Add the category path, medium and creator",
            "type": "boolean",
            "description": "ON (default): one extra batched call per 50 lots adds LiveAuctioneers' own classification — category, sub-category, the full category path up to 4 levels deep (93.3% fill; the depth is whatever the lot was filed under, so 'Home & Decor > Lighting > Lamps > Table Lamps' but also just 'Art > Paintings'), artist/maker (39.6%), material (69.6%), origin and style period, flattened into readable strings rather than the raw nested objects the API returns. OFF: every category column comes back empty.",
            "default": true
          },
          "includeAuctionDetails": {
            "title": "Add the sale venue address and buyer's premium",
            "type": "boolean",
            "description": "ON (default): each unique auction is looked up once (cached, batched 20 at a time) to add the venue street address, city/state/postcode, latitude/longitude (99.4% fill), preview arrangements and the buyer's premium percentage (100% fill). OFF: those columns are empty and a big multi-auction run finishes slightly sooner.",
            "default": true
          },
          "maxLots": {
            "title": "Max lots per run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on lots returned this run — this is also your cost cap. 50 lots = $0.15, 1,000 = $3, 10,000 = $30. Set 0 for no cap. When you list several keywords / categories / houses / URLs the cap is split evenly between them (unused share rolls forward). Note the server-side ceilings on top of this: a single upcoming-lot query is walkable to about 10,000 rows and a sold query to about 1,200.",
            "default": 200
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "The default Apify proxy (datacenter) is enough. Measured through it: 10 contiguous search pages plus the hydrate, detail, category and catalogue routes = 14/14 successful, and three separate 20-request concurrent bursts = 20/20 each. Residential bandwidth buys nothing here, so this Actor does not ask you to pay for it.",
            "default": {
              "useApifyProxy": true
            }
          },
          "requestConcurrency": {
            "title": "Request concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Parallel enrichment requests. Kept low on purpose to stay polite to LiveAuctioneers; values above 5 are clamped and 4 is the measured-comfortable setting.",
            "default": 4
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}