# European Auction Scraper: Troostwijk, Vavato & Surplex (`bostomate/european-auction-scraper`) Actor

Scrape live industrial & liquidation auction lots from Troostwijk, Vavato, Surplex and other TBAuctions brands. bids, closing times, locations and true all-in price estimates.

- **URL**: https://apify.com/bostomate/european-auction-scraper.md
- **Developed by:** [Tommy Bos](https://apify.com/bostomate) (community)
- **Categories:** Automation, E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## European Auction Scraper — Troostwijk, Vavato & Surplex

### What is European Auction Scraper?

European Auction Scraper extracts **live industrial and liquidation auction lots** from the biggest European online auction platforms of the TBAuctions group — **Troostwijk Auctions, Vavato and Surplex** — through one actor, one input, one dataset. Together these platforms typically carry **75,000+ open lots**: machinery, forklifts, tools, vehicles, warehouse equipment, IT hardware, office furniture and full bankruptcy inventories across the Netherlands, Belgium, Germany and the rest of Europe.

Instead of checking three auction sites (or paying for three separate scrapers), you get a single normalized feed of every open lot with its **current bid, bid count, closing time, location and lot URL** — plus something no other auction scraper offers: an optional **all-in price estimate** (bid + buyer premium + VAT) straight from the platform's own fee calculator, so you know what a lot would *actually* cost, not just its hammer price.

### What can you do with it?

- **Source resale inventory**: find underpriced forklifts, machines, tools or e-bikes before they close.
- **Price research**: build datasets of realized auction interest (bids, followers) per category.
- **Deal monitoring**: schedule runs with a `closingWithinHours` window and get lots closing today.
- **Market analysis**: track supply by country, category keyword or platform over time.

### Input

| Field | What it does |
|---|---|
| `platforms` | Which platforms to scrape. Default: Troostwijk (TWK), Vavato (VAVATO), Surplex (SPX) — the brands with the bulk of live inventory. Ten more TBAuctions brands are selectable. |
| `keyword` | Case-insensitive filter over lot title + description (e.g. `forklift`, `Makita`). |
| `maxItems` | Cap on returned lots — you pay per returned lot, never per page fetched. |
| `closingWithinHours` | Only lots closing within N hours (0 = off). Lots are scanned in closing-time order. |
| `countryCodes` | Only lots located in these countries (e.g. `NL`, `BE`, `DE`). |
| `includeFees` | Adds `allInPriceEstimate` (bid + buyer premium + VAT) for lots with a bid. |
| `maxPagesPerPlatform` | Search depth (100 lots/page). Raise it for deep keyword searches. |

Example input:

```json
{
    "platforms": ["TWK", "VAVATO", "SPX"],
    "keyword": "forklift",
    "maxItems": 100,
    "closingWithinHours": 48,
    "countryCodes": ["NL", "BE"],
    "includeFees": true
}
```

### Output

One dataset item per lot:

```json
{
    "platform": "TWK",
    "platformName": "Troostwijk Auctions",
    "displayId": "A1-47915-1",
    "title": "1999 Massey Ferguson 6245 Four Wheel Tractor",
    "description": "Runs and drives, 6800 hours...",
    "currentBid": 9000.0,
    "currency": "EUR",
    "bidsCount": 12,
    "followersCount": 41,
    "closesAt": "2026-07-06T17:01:00+00:00",
    "minutesToClose": 512,
    "city": "Wien",
    "countryCode": "at",
    "imageUrl": "https://...jpg",
    "lotUrl": "https://www.troostwijkauctions.com/l/1999-massey-ferguson-6245...",
    "allInPriceEstimate": 11812.5,
    "allInPriceCurrency": "EUR",
    "buyerPremiumPercent": 19.0,
    "vatPercent": 21.0
}
```

### Pricing

You are charged **per returned lot** (pay-per-event) — filtering, pagination and fee lookups are included. A 100-lot run costs a few cents. Tip: use `maxItems` to control spend precisely; the actor stops the moment your budget or cap is reached.

### FAQ

**Is scraping auction lots legal?** The actor only reads publicly available lot listings — no login, no personal data, no paywalled content. Auction lots are business inventory, not personal information.

**Why is a lot's bid so low?** Online auctions concentrate bidding in the final minutes (platforms use a 2–6 minute soft-close). A bid seen hours before close is not a price signal — use `closingWithinHours` for meaningful prices.

**What is `allInPriceEstimate`?** The platform's own estimate of the total you would pay at the current bid: bid + buyer premium + VAT/BTW. Typically 25–45% above the hammer price — this is the number that matters for resale math.

**Why do some platforms return zero lots?** Ten smaller TBAuctions brands are selectable but hold little or no inventory on the shared storefront most of the time. Troostwijk, Vavato and Surplex carry the volume. For brands without verified lot-page URLs, `lotUrl` is `null` rather than a guessed link.

**Can it search by keyword server-side?** The storefront API has no keyword search, so the actor filters fetched pages (closing-soonest first). For deep searches raise `maxPagesPerPlatform` (up to 40 pages = 4,000 lots per platform).

**Looking for consumer marketplaces instead?** Try our monitors: [Marktplaats Monitor](https://apify.com/bostomate/marktplaats-monitor) (NL/BE classifieds), [Kleinanzeigen Monitor](https://apify.com/bostomate/kleinanzeigen-monitor) (German classifieds), or the [AutoScout24 Price Monitor](https://apify.com/bostomate/autoscout-price-monitor) for used-car price drops across 7 European markets.

### Disclaimer

This is an independent tool, not affiliated with or endorsed by TBAuctions, Troostwijk Auctions, Vavato, Surplex or any of their brands. All trademarks belong to their owners. The actor reads only publicly accessible listing data and collects no personal data.

# Actor input Schema

## `platforms` (type: `array`):

Which TBAuctions-group platforms to scrape. Troostwijk (TWK), Vavato (VAVATO) and Surplex (SPX) carry the bulk of live inventory (~79k open lots combined). The other brands are valid but often have little or no inventory on this storefront.

## `keyword` (type: `string`):

Only return lots whose title or description contains this text (case-insensitive). Leave empty for all lots. Filtering happens across fetched pages - raise 'Max pages per platform' to search deeper into the catalog.

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

Stop after this many lots (you are only charged per returned lot).

## `closingWithinHours` (type: `integer`):

Only lots that close within N hours. 0 = no closing-time filter. Auction bids are only meaningful near close (2-6 min soft-close), so for price research use a narrow window.

## `countryCodes` (type: `array`):

Only lots located in these ISO country codes (e.g. NL, BE, DE). Empty = all countries.

## `includeFees` (type: `boolean`):

For lots with a bid, also fetch the platform's own estimated full price (bid + buyer premium + VAT) - the number you would actually pay. Capped at the first 100 results to keep runs fast.

## `maxPagesPerPlatform` (type: `integer`):

How deep to paginate each platform (100 lots per page, sorted by closing time). Raise this when using a keyword filter to search deeper.

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

Optional. The storefront API is public and normally needs no proxy; configure one only if your runs get blocked.

## Actor input object example

```json
{
  "platforms": [
    "TWK",
    "VAVATO",
    "SPX"
  ],
  "keyword": "forklift",
  "maxItems": 50,
  "closingWithinHours": 0,
  "countryCodes": [],
  "includeFees": false,
  "maxPagesPerPlatform": 10
}
```

# 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 = {
    "keyword": "forklift"
};

// Run the Actor and wait for it to finish
const run = await client.actor("bostomate/european-auction-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 = { "keyword": "forklift" }

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

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

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

```

## CLI example

```bash
echo '{
  "keyword": "forklift"
}' |
apify call bostomate/european-auction-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=bostomate/european-auction-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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