# Troostwijk Auctions Scraper (`lowlanddata/troostwijk-scraper`) Actor

Troostwijk Auctions runs Europe's largest industrial and agricultural equipment auctions, and the category pages hold more live lots than any dashboard shows at once. Rows give current bid in cents, bid count, closing time, city and country. No bidder or seller identity collected.

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

## Pricing

from $1.79 / 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.
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

## Troostwijk Auctions Scraper — GDPR-safe industrial auction data

Extract live lots from **troostwijkauctions.com** — Europe's largest industrial and agricultural auction platform, auctioning everything from tractors and harvesters to construction equipment and transport vehicles — as clean, structured JSON. Current bid, bid count, closing time, location and category, ready for price research, market monitoring and data pipelines.

**No bidder or seller personal data, ever.** Troostwijk's own lot data carries no bidder or seller name to begin with — there is nothing to filter out. The only identity information in the output is a lot's city and two-letter country code.

### Quick start (30 seconds)

1. Browse [troostwijkauctions.com](https://www.troostwijkauctions.com), pick a category (e.g. Agricultural → Harvesters), and paste its URL into **categoryUrls**.
2. Click **Start**. That's the whole minimum setup.
3. When the run finishes, open the dataset's **Overview** tab for a clean table, or **Export** it as CSV/Excel/JSON.

Add more category URLs to sweep several at once — they share the same `maxItems` budget. Everything works on a daily Schedule.

### What you can build with it

- **Price research for used equipment.** Query "Harvesters" or "Excavators" and get every live lot's current bid, bid count and closing time — a real-time read on what a category is actually selling for, not a list price.
- **Cross-auction category monitoring.** Track a category across multiple auctions at once; `followersCount` is a built-in demand signal for which lots are drawing the most bidder interest.
- **Closing-time alerts.** Sort by `endDate` in your own pipeline to flag lots closing soon in a category you're watching, before the auction ends.
- **Feed an AI agent clean data.** Every field is structured, predictable and free of personal data, so an assistant or pipeline can consume it directly — no scrubbing, no compliance review before you store it.

### What you get

Each lot is one dataset item:

```json
{
  "lotId": "0f210f7d-ea96-41b6-83fc-05a68f66cd06",
  "itemId": "8a85a8d7-1b1d-485a-afd4-501b14be2524",
  "auctionId": "17fee8b9-9c37-4bbe-8890-5583759f67ba",
  "displayId": "A1-50501-10",
  "title": "Claas - Tucano 320 with C490 header - combine harvester",
  "description": null,
  "url": "https://www.troostwijkauctions.com/en/l/claas-tucano-320-with-c490-header-combine-harvester-A1-50501-10",
  "biddingStatus": "BIDDING_OPEN",
  "bidsCount": 13,
  "saleTerm": "OPEN_RESERVE_PRICE_NOT_ACHIEVED",
  "currentBidCents": 3350000,
  "currency": "EUR",
  "startDate": "2026-09-25T10:00:00.000Z",
  "endDate": "2026-10-06T09:40:00.000Z",
  "city": "Rietberg",
  "countryCode": "de",
  "category": "Harvesters",
  "imageUrl": "https://media.tbauctions.com/image-media/d3d45c06-3d62-4daf-8800-c5b878f605ed/file",
  "followersCount": 76
}
```

Field notes, so you know exactly what you are buying:

- `currentBidCents` is the **current highest bid**, not a final sale price — it keeps rising until `endDate`, and `saleTerm` tells you whether a reserve has been met.
- `itemId` stays the same if the same physical item is relisted in a later auction (a no-sale re-offer); `lotId` and `auctionId` change each time.
- `city`/`countryCode` are locality-level only — no street address, no coordinates.
- `description` is frequently `null`: most lots rely on the title and photo alone.

### How much does it cost to scrape Troostwijk?

$1.99 per 1,000 lots delivered, pay-as-you-go: no subscription, and you pay per result rather than per hour. A run that finds nothing still costs the $0.005 actor start. In plain dollars:

- **100 lots ≈ $0.20** — a category spot-check.
- **500 lots ≈ $1.00** — a full category sweep.
- **A 2,000-lot crawl ≈ $4.00** — several categories at once, deduplicated.

The price is all-inclusive: your runs' platform usage is covered by it, with no separate compute or proxy charges. Datacenter proxies are sufficient — no residential proxy surcharge needed.

Free-plan runs are limited to a sample of 5 items, enough to evaluate the output format against your real category.

### Not technical? Let your AI assistant set it up

Copy this into ChatGPT, Claude or any AI assistant, fill in the one line, and follow the conversation:

```text
Help me set up the "Troostwijk Auctions Scraper" actor on Apify
(https://apify.com/lowlanddata/troostwijk-scraper). Guide me one step at a time.

What I want to watch: [E.G. "used agricultural harvesters across Europe"]

Guide me to:
1. Browse troostwijkauctions.com, find the matching category page, and propose
   its URL as categoryUrls (an array - more than one category can be swept at
   once), plus maxItems.
2. Explain that this actor reads category pages, not keyword search, because
   Troostwijk's own search page is excluded by its robots.txt.
3. Create a free Apify account (apify.com), open the actor page, paste the
   values into the Input form, and start a run.
4. Set up a daily Schedule in the Apify Console with the same input, plus an
   email or Slack integration so new lots reach me automatically.
5. Show me how to export results as CSV/Excel, or read them from the API if I code.
6. If the results are what I wanted, remind me at the end to leave a quick rating on the actor page, and to report anything broken or missing on its Issues tab.
```

### Input

| Field                | Description                                                 |
| -------------------- | ----------------------------------------------------------- |
| `categoryUrls`       | One or more Troostwijk category page URLs (see below).      |
| `maxItems`           | Stop after this many lots, shared across all category URLs. |
| `proxyConfiguration` | Keep Apify proxy enabled.                                   |

A run needs at least one category URL; anything else fails readably with the reason in the run's status message.

#### Finding a category URL

Troostwijk's own keyword search page is excluded by the site's `robots.txt` (`Disallow: */search*` and its filter query parameters), so this actor reads category pages instead — the one part of the site robots.txt leaves open. Browse [troostwijkauctions.com](https://www.troostwijkauctions.com), use the site's own category menu to narrow down to the equipment type you want (e.g. Agricultural → Harvesters → Combine Harvesters), and copy that page's URL into `categoryUrls`. Each category page already lists every live lot in it across all current auctions, so this reaches the same lots a keyword search would have, without touching the disallowed path.

### Use it from your code

Run the actor and get items straight back with one HTTP call (fine for scoped runs up to ~5 minutes):

```bash
curl "https://api.apify.com/v2/acts/lowlanddata~troostwijk-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -X POST -H "Content-Type: application/json" \
  -d '{"categoryUrls": ["https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b"], "maxItems": 100}'
```

Node.js:

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lowlanddata/troostwijk-scraper').call({
  categoryUrls: [
    'https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b',
  ],
  maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lowlanddata/troostwijk-scraper").call(
    run_input={"categoryUrls": ["https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b"], "maxItems": 100})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

For large crawls, start the run asynchronously and fetch the dataset when the finished-run webhook fires. Schedules (e.g. a daily category snapshot), webhooks and the Make/Zapier/n8n integrations all work out of the box — this is a standard Apify actor.

### Use it with AI agents (MCP)

Claude, Cursor and other MCP-capable agents can run this scraper as a tool through Apify's hosted MCP server: the agent fills in the category itself, starts the run and reads the results — no glue code.

Claude Code:

```bash
claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/troostwijk-scraper"
```

Cursor or Claude Desktop (add a custom connector / MCP server with this URL):

```text
https://mcp.apify.com?actors=lowlanddata/troostwijk-scraper
```

Sign in with your Apify account when prompted — runs are billed to it. Setup details per client: [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp), or start from this actor's own MCP page: [apify.com/lowlanddata/troostwijk-scraper/api/mcp](https://apify.com/lowlanddata/troostwijk-scraper/api/mcp).

Prompts that work once connected:

- "Pull every live harvester lot on Troostwijk and tell me the median current bid."
- "Snapshot the construction-equipment category and flag anything closing in the next 24 hours."
- "Watch this excavator category daily and tell me when a lot's bid count jumps."

### Beyond the result window

Each category page returns up to 62 lots before pagination; this actor pages through automatically up to `maxItems`, deduplicating by `lotId`. A category with more live lots than that is swept in full across as many pages as it takes — there is no hard cap beyond `maxItems` itself.

### Is it legal to scrape Troostwijk?

Public lot data — current bid, bid count, closing time, location, category — is public commercial information, and this scraper is built so that the hard part of the question never arises: **no personal data enters your dataset in the first place**, because Troostwijk's own lot data carries none to begin with.

This actor only reads category pages, which Troostwijk's `robots.txt` leaves open; its keyword search page and filter query parameters are explicitly excluded by that same file and are never requested. Requests are paced, run through standard datacenter proxies, and nothing here works around any access control.

One honest limit: lot titles are the auctioneer's own words, delivered as-is.

### Is there a Troostwijk API alternative?

Troostwijk publishes no public API for lot data. This actor is the practical alternative: the same lots as structured JSON through one HTTP call (`run-sync-get-dataset-items`), on a schedule, or as an MCP tool for AI agents — with the GDPR question already answered in the data itself.

### Does Troostwijk block scrapers?

Category pages serve their data openly to a plain request — and this actor stays inside that welcome: paced requests, standard datacenter proxies, load kept negligible. No CAPTCHA fights, no bot-wall cat-and-mouse — which is also why runs are fast and reliable enough for daily schedules.

### How do I monitor Troostwijk prices?

Add a daily Schedule in the Apify Console with your category URL(s) and an email/Slack integration on the runs — the current bid and bid count for every lot land in your inbox, so a jump in bidding activity on a watched category is visible the next morning.

### FAQ

**Can I get bidder or seller names?** No — there is nothing to get. Troostwijk's own lot data never carries a bidder or seller name, so this actor has no such field to switch off.

**Why category URLs instead of a keyword search?** Troostwijk's `robots.txt` explicitly excludes its search page and filter parameters. Category pages are not excluded and already list every live lot in that category, so this actor uses them instead of working around the disallowed path.

**Can I get only lots closing soon?** Not as a built-in filter in v1 — every live lot in the category comes back with its real `endDate`, so sort or filter on that field in your own pipeline or spreadsheet.

**How fresh is the data?** Live at run time — every run queries Troostwijk directly. For continuous freshness, schedule the actor.

**Can I export to Excel or CSV?** Yes — every dataset exports as CSV, Excel, JSON or XML from the Apify Console or API.

**What happens on a very large category?** The actor pages through automatically, deduplicating by `lotId`, until either the category is exhausted or `maxItems` is reached — raise `maxItems` to see more of a big category.

**Does `currentBidCents` include buyer's premium?** No — it is the raw current bid as Troostwijk reports it. Troostwijk's own buyer's premium and VAT are added at payment time and are not reflected here.

**Does it work with Make, Zapier or n8n?** Yes — it is a standard Apify actor; all platform integrations, webhooks and schedules apply.

### Related scrapers

Working European B2B or industrial data? The same GDPR-clean guarantee, same output shape:

- [TruckScout24 Scraper](https://apify.com/lowlanddata/truckscout24-scraper) — commercial trucks and trailers for sale across Europe.
- [Mascus Scraper](https://apify.com/lowlanddata/mascus-scraper) — used agricultural, construction and material-handling equipment for sale worldwide.

### Troubleshooting

The actor fails fast with the reason in the run's status message:

- **"Not a Troostwijk category URL."** — `categoryUrls` entries must be full `https://www.troostwijkauctions.com/<locale>/c/...` category page URLs, not a search link or a single lot page.
- **"Troostwijk blocked the run before any lots could be fetched."** — usually temporary; retry in a few minutes.
- **Fewer items than requested on a free plan** — the 5-item free sample cap; run on a paid Apify plan for full results.

### Support

Found an issue or missing a field you need? Open an issue on the actor's **Issues tab** — reports get fixed, this actor is actively maintained.

Working well for you? A **rating on this page** takes ten seconds and helps other buyers find a GDPR-clean option among the lookalikes — it is also the clearest signal of what we should build next.

# Actor input Schema

## `categoryUrls` (type: `array`):

One or more Troostwijk Auctions category page URLs to sweep, e.g. https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b. Browse troostwijkauctions.com, pick a category, and paste its URL here - the site's own keyword search is not used by this actor (see "Finding a category URL" below for why).

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

Stop after this many lots, across all category URLs combined. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 500.

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

Proxy settings. Keep Apify proxy enabled.

## `reportFailures` (type: `boolean`):

When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. <b>Your input itself, your results and your identity are never sent, and successful runs send nothing at all.</b> Switch this off and the actor behaves exactly the same.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b"
  ],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "reportFailures": true
}
```

# Actor output Schema

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

Scraped Troostwijk Auctions lots, one JSON object per lot.

# 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 = {
    "categoryUrls": [
        "https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b"
    ],
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lowlanddata/troostwijk-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 = {
    "categoryUrls": ["https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b"],
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("lowlanddata/troostwijk-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 '{
  "categoryUrls": [
    "https://www.troostwijkauctions.com/en/c/agricultural/harvesters/4bf74b6b-1c39-4fe8-a9ed-89dcd1793f5b"
  ],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call lowlanddata/troostwijk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lowlanddata/troostwijk-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/DIIaqpZravvfxoIBq/builds/vxbzAY0EXfebYJW3U/openapi.json
