{
  "openapi": "3.0.1",
  "info": {
    "title": "Bidsquare Scraper - Auction House Contacts & Lots",
    "description": "From $4.50 per 1,000 rows, no start fee. Bidsquare's whole 505-house auctioneer directory - phone, email, street address, coordinates, socials - plus every catalogue lot with estimate, current bid, bid count, condition, premium and the realized hammer price hidden behind 'Login for Price'.",
    "version": "0.1",
    "x-build-id": "tbxyE3kFyRn7dzymG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~bidsquare-lot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-bidsquare-lot-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~bidsquare-lot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-bidsquare-lot-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~bidsquare-lot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-bidsquare-lot-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "auction-houses",
              "lots"
            ],
            "type": "string",
            "description": "Auction houses (default) returns one row per auction house on bidsquare.com — name, phone, email, street address, city/state/postcode, coordinates, logo and social profiles, plus how many sales that house currently has on the calendar. Lots returns one row per catalogue lot — estimate band, current or asking price, bid count, lot number, image and the selling house's contact joined on. Both row shapes cost the same per row.",
            "default": "auction-houses"
          },
          "houseScope": {
            "title": "Which auction houses",
            "enum": [
              "all",
              "selling-now"
            ],
            "type": "string",
            "description": "Auction-houses mode only. All houses reads bidsquare's own sitemap — 505 houses on 2026-09-18, including the ones with nothing on the calendar right now. Selling now keeps only the houses with an upcoming sale (63 on 2026-09-18), which is the warmer list if you are pitching a service that depends on active sale volume.",
            "default": "all"
          },
          "houseSlugs": {
            "title": "Specific auction houses",
            "type": "array",
            "description": "Optional. Limit the run to these houses. Accepts a slug (\"clars-la\") or a full profile URL (\"https://www.bidsquare.com/auction-house/clars-la\"). In auction-houses mode these become the rows; in lots mode only sales run by these houses are walked. Leave empty for every house.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "auctionStatus": {
            "title": "Upcoming or past sales",
            "enum": [
              "upcoming",
              "past",
              "both"
            ],
            "type": "string",
            "description": "Lots mode only. Upcoming walks the live sale calendar (132 sales, ~48,300 advertised lots on 2026-09-18). Past walks the closed-sale archive, which is 91 pages deep — that is where realized hammer prices live, so pair it with \"Fetch each lot page\".",
            "default": "upcoming"
          },
          "auctionUrls": {
            "title": "Specific auction URLs",
            "type": "array",
            "description": "Optional. Scrape exactly these sale catalogues instead of walking the calendar — paste any bidsquare auction URL, for example https://www.bidsquare.com/auctions/millea-bros/abc-estate-finds-books-day-3-of-3-24704. A /catalog suffix or query string is stripped for you.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxAuctions": {
            "title": "Max auctions to walk",
            "minimum": 0,
            "type": "integer",
            "description": "Lots mode only. How many sale catalogues to page through before stopping. Set 0 for no limit. Catalogues run from a few dozen lots to nearly 3,000, so this is the main cost lever alongside the row cap.",
            "default": 5
          },
          "keywords": {
            "title": "Keyword filter",
            "type": "array",
            "description": "Optional. Keep only lots whose title (or description, when lot pages are fetched) contains one of these words — for example \"Rolex\", \"Tiffany\", \"Qing\". Matching is case-insensitive. Filtered-out lots are never delivered and never charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minEstimate": {
            "title": "Minimum estimate",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Drop lots whose high estimate is below this figure, in the sale's own currency. Lots with no published estimate are dropped too."
          },
          "maxEstimate": {
            "title": "Maximum estimate",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Drop lots whose low estimate is above this figure, in the sale's own currency."
          },
          "onlyWithEstimate": {
            "title": "Only lots with a published estimate",
            "type": "boolean",
            "description": "Drop lots that carry no estimate band. Buy Now sales price their lots outright and publish no estimate, so this filter removes those entirely.",
            "default": false
          },
          "lotDetails": {
            "title": "Fetch each lot page",
            "type": "boolean",
            "description": "Lots mode only, and one extra request per lot. Adds the full description, the condition report, the category path, the buyer's premium percentage, every photo, the sale timezone — and the realized hammer price. Closed lots replace their price with a \"Login for Price\" button on the catalogue page, but the lot page still publishes it in schema.org, so this is the only way to get prices realized. Off by default because it multiplies the request count by about 96.",
            "default": false
          },
          "includeHouseContact": {
            "title": "Join the selling house's contact onto every lot",
            "type": "boolean",
            "description": "Lots mode only. Adds the house's phone, email, street, city, state, country and coordinates to each lot row. Costs one extra request per distinct house in the run, not per lot, because the contact page is fetched once and cached.",
            "default": true
          },
          "maxRecords": {
            "title": "Max rows",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on rows delivered, and therefore on what you are charged — the cap is counted against rows produced, not batches flushed, so a cap of 60 charges exactly 60. Set 0 for no limit; the whole 505-house directory is one run at 0. Left at the default a run stops at 75 rows, which is a $0.34 ceiling on an accidental run.",
            "default": 75
          },
          "maxConcurrency": {
            "title": "Concurrent requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many pages to fetch at once. 8 is a good balance: bidsquare answered 60 concurrent house pages in 9 seconds at this setting with no throttling. Lower it if you see failures in the run summary.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy is strongly recommended — bidsquare.com sits behind Cloudflare. The datacenter pool was measured at 60/60 successful house pages and 100% on catalogue pages on 2026-09-18; switch to RESIDENTIAL if the run summary starts reporting blocked responses.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}