{
  "openapi": "3.0.1",
  "info": {
    "title": "Troostwijk Auction Scraper - Industrial Lots, Bids, Close Times",
    "description": "From $1.70 per 1,000 lots, no start fee. Every live lot on Troostwijk Auctions (TBAuctions: Troostwijk, Surplex, Vavato) with its real per-lot closing time, current bid, bid count, city and country. Optional lot pages add specs, brand, year, photos and the inspection/collection address.",
    "version": "0.1",
    "x-build-id": "8tfl6u0JnXq6ld9OG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~troostwijk-lot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-troostwijk-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~troostwijk-lot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-troostwijk-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~troostwijk-lot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-troostwijk-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": {
          "auctionUrls": {
            "title": "Specific auctions (optional)",
            "type": "array",
            "description": "Auction URLs, slugs or display ids - e.g. \"https://www.troostwijkauctions.com/en/a/vehicles-and-trailers-A1-49582\", \"vehicles-and-trailers-A1-49582\" or just \"A1-49582\". Every lot in each named auction is returned (subject to your row cap). An auction that has already closed is reported in the run summary as not-on-the-live-board and costs you nothing. Note there is deliberately no \"lot URL\" input: a lot page does not publish its own closing time, so every row here is built from its auction's lot list instead - see the README.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countryCodes": {
            "title": "Countries",
            "type": "array",
            "description": "Keep only lots physically located in these countries, matched on the lot's own location. Multiple entries are OR-ed. Leave empty for all 21.",
            "items": {
              "type": "string",
              "enum": [
                "be",
                "nl",
                "de",
                "fr",
                "at",
                "pl",
                "ro",
                "bg",
                "it",
                "gb",
                "hr",
                "si",
                "es",
                "rs",
                "ch",
                "sk",
                "hu",
                "cz",
                "lu",
                "gr",
                "dk"
              ],
              "enumTitles": [
                "Belgium (879 collection locations)",
                "Netherlands (807)",
                "Germany (148)",
                "France (103)",
                "Austria (28)",
                "Poland (21)",
                "Romania (17)",
                "Bulgaria (14)",
                "Italy (11)",
                "United Kingdom (9)",
                "Croatia (9)",
                "Slovenia (8)",
                "Spain (7)",
                "Serbia (3)",
                "Switzerland (3)",
                "Slovakia (3)",
                "Hungary (3)",
                "Czechia (2)",
                "Luxembourg (2)",
                "Greece (1)",
                "Denmark (1)"
              ]
            },
            "default": []
          },
          "platforms": {
            "title": "TBAuctions brand",
            "type": "array",
            "description": "The troostwijkauctions.com storefront also serves lots belonging to its sibling TBAuctions brands. Measured over 568 real lot rows: TWK 448, SPX 103, VAVATO 17. Leave empty for all three.",
            "items": {
              "type": "string",
              "enum": [
                "TWK",
                "SPX",
                "VAVATO"
              ],
              "enumTitles": [
                "TWK - Troostwijk (448 of 568 sampled lots)",
                "SPX - Surplex (103 of 568)",
                "VAVATO - Vavato (17 of 568)"
              ]
            },
            "default": []
          },
          "keywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep only lots whose TITLE contains one of these, case-insensitively - \"excavator\", \"Deutz\", \"CNC\". Multiple entries are OR-ed. This matches the title only, because that is the only text the lot list publishes (lot descriptions live on the lot page and are 0% present on the list surface). For description matching, turn on \"Fetch each lot page\" and filter the dataset afterwards.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "closingWithinHours": {
            "title": "Only lots closing within N hours",
            "minimum": 0,
            "type": "integer",
            "description": "0 = off. This is the cheapest filter in the actor and the one worth using: every auction publishes minEndDate, the earliest close among its lots, and that is a true lower bound (verified on 14 auctions, 14/14). So an auction whose first lot closes after your window is skipped whole - all of its lots, up to 5,784 of them, without a single request. Bids concentrate in the last minutes (the site soft-closes: a bid inside the final 2 minutes extends the lot by 2 minutes), so a 24-48h window is where the prices mean something.",
            "default": 0
          },
          "onlyWithBids": {
            "title": "Only lots that already have a bid",
            "type": "boolean",
            "description": "Measured over 568 live lot rows: 213 (37.5%) carry at least one bid. The other 62.5% genuinely have none yet - that is not missing data, and a starting bid still shows in currentBid.",
            "default": false
          },
          "minCurrentBid": {
            "title": "Minimum current bid",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only lots at or above this current bid. Every captured lot was priced in EUR. Measured over 568 rows: min EUR 1, median EUR 700, max EUR 60,000."
          },
          "maxCurrentBid": {
            "title": "Maximum current bid",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only lots at or below this current bid."
          },
          "includeNotYetOpen": {
            "title": "Include auctions that have not opened yet",
            "type": "boolean",
            "description": "Measured on the live board: 492 auctions are BIDDING_OPEN and 14 are BIDDING_NOT_YET_OPENED. Off by default because a pre-announced auction usually publishes no lots yet.",
            "default": false
          },
          "auctionOrder": {
            "title": "Which auctions first",
            "enum": [
              "closingSoonest",
              "newest",
              "mostLots",
              "siteOrder"
            ],
            "type": "string",
            "description": "Default is closing-soonest, so a capped run hands you the lots that are about to close rather than an arbitrary slice of 77,868. Note that the site's own board order is RECOMMENDED, which pushes the very large long-running auctions to the front - useful to know if you pick \"Site order\".",
            "default": "closingSoonest"
          },
          "maxLots": {
            "title": "Max lots",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on rows delivered, and therefore on rows charged. 0 means no cap - the whole live board was 77,868 lots when this was written, which is roughly 1,640 requests and about 20 minutes without lot detail, or many hours with it. Rows rejected by your filters do not count against the cap and are not charged.",
            "default": 500
          },
          "includeLotDetails": {
            "title": "Fetch each lot page (specs, photos, collection address)",
            "type": "boolean",
            "description": "OFF (default): every row still carries closing time, current bid, bid count, followers, city, country, status, image and the parent auction - all at 100% fill - for one request per 48 lots. ON: one extra request per lot (about 65 KB) adds the description (77.1%), full specs (89.6%), brand (72.9%), year of build (56.3%), every photo (100%), the starting bid, the reserve status, the VAT margin flag, the collection/viewing street address (91.7%) and the collection contact email (50.0%). It costs you no extra charge - the price is per row either way - but it makes the run roughly 25x slower, so cap it. Detail is only ever fetched for rows that already passed your filters and fit inside the cap.",
            "default": false
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Measured through the Apify proxy on 2026-09-18: 60 lot pages at concurrency 5 returned 60/60 HTTP 200 in 33 s, and 30 auction pages returned 30/30 in 20 s. At concurrency 10 and 16 the same list dropped 2 and 1 requests to connection errors. 5 is the measured sweet spot; raising it trades reliability for speed.",
            "default": 5
          },
          "useFastJsonRoute": {
            "title": "Use the site's JSON route where possible",
            "type": "boolean",
            "description": "The site serves the same rows twice: as HTML (88 KB) and as JSON behind a build-specific URL (56 KB). Verified identical element-for-element. The JSON URL embeds a build id that changes on every site deploy, so this actor reads the id fresh on each run and falls back to HTML automatically if it has rotated mid-run. Turn this off to use the HTML route only - slower, one less moving part.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Measured 2026-09-18: the Apify proxy is clean on this target - the auto pool returned 3/3 HTTP 200 and RESIDENTIAL/NL 3/3, and a 90-request sustained load through the auto pool returned 90/90. The site does emit a rare transient 403 under load (1 in 48 from a bare home IP); it is a rate-limit blip, not a challenge, and the actor retries it on a fresh session. Residential works but costs far more per GB and is not needed here.",
            "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}