# Catawiki Scraper (`aurenic/catawiki-scraper`) Actor

Extract auction lots from Catawiki — Europe's curated auction marketplace. Get current bids, expert estimates, reserve status, closing times, and seller info.

- **URL**: https://apify.com/aurenic/catawiki-scraper.md
- **Developed by:** [Aurenic](https://apify.com/aurenic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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/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

## Catawiki Scraper

Extract auction lots from Catawiki — Europe's curated auction marketplace — with current bids, expert estimates, reserve status, closing times, and seller info.

### What does Catawiki Scraper do?

Scrape live auction data from Catawiki across all categories: watches, art, jewelry, classic cars, wine, coins, and collectibles. Search any keyword or paste a category URL and get structured data ready for deal-finding, market research, or price tracking.

Catawiki publishes the expert estimate for every lot in its page JSON. This Actor extracts both the current bid and the expert estimate range, giving you a direct comparison for spotting undervalued lots.

### Output fields

| Field | Description |
|---|---|
| id | Catawiki lot ID |
| title | Lot title |
| description | Lot description (up to 2000 chars) |
| currentBid | Current highest bid |
| currency | Currency code (EUR, GBP, USD) |
| estimateLow | Expert estimate — low end |
| estimateHigh | Expert estimate — high end |
| discountPct | Current bid as % below the low estimate |
| reserveMet | Whether the reserve price has been met |
| closingTime | Auction closing timestamp |
| bidCount | Number of bids placed |
| category | Lot category |
| sellerName | Seller display name |
| sellerId | Seller internal ID |
| sellerCountry | Seller country |
| images | Array of image URLs |
| imageCount | Number of images |
| coverImage | Primary image URL |
| url | Direct URL to the lot |
| scrapedAt | ISO scrape timestamp |

### Who is it for?

- **Collectors** spotting lots trading below expert estimates
- **Deal hunters** filtering by discountPct and closing time
- **Market researchers** analysing auction price trends across categories
- **Data scientists** building auction datasets for valuation models
- **Investors** tracking demand in watches, art, and classic cars

### Pricing

**$0.0010 per result** ($1.00 per 1,000 lots). No subscription.

| Results | Cost |
|---|---|
| 100 | $0.10 |
| 1,000 | $1.00 |
| 10,000 | $10.00 |

### How to use it

1. Enter a **Search Query** (e.g., "rolex", "picasso", "game boy").
2. Or paste Catawiki search or category URLs into **Catawiki URLs**.
3. Set **Max Items** (default 100) and **Max Search Pages** (default 5).
4. Click **Start**.

### Output example

```json
{
  "id": "102667218",
  "title": "Rolex Submariner 16610 — 1999",
  "description": "Stainless steel, automatic, 40mm...",
  "currentBid": 7250,
  "currency": "EUR",
  "estimateLow": 9000,
  "estimateHigh": 11000,
  "discountPct": 19,
  "reserveMet": true,
  "closingTime": "2026-09-18T19:30:00.000Z",
  "bidCount": 12,
  "category": "Watches",
  "sellerName": "EN Gallery Tokyo",
  "sellerId": "987654",
  "sellerCountry": "Japan",
  "images": ["https://cdn.catawiki.net/..."],
  "imageCount": 6,
  "coverImage": "https://cdn.catawiki.net/...",
  "url": "https://www.catawiki.com/en/l/102667218",
  "scrapedAt": "2026-09-17T10:00:00.000Z"
}

```

### Technical details

- Fetches search pages and lot detail pages server-side — no browser
- Extracts from Next.js `__NEXT_DATA__` and the internal batch endpoint `buyer/api/v3/bidding/lots`
- Uses **Dutch residential proxies** (pre-configured) — Catawiki serves clean content to EU residential IPs
- Two-phase extraction: search page for lot IDs and titles, then batch API for pricing in groups of 50
- No named third-party anti-bot vendor — IP-reputation filtering only

### Known limits

- **Catawiki only exposes live lots.** Once a lot closes, it disappears from search.
- **Bidding API is undocumented.** Apify Actor auto-falls back to search-page data (id, title, image, URL) when the batch endpoint returns nothing, so the dataset is never empty.
- **Discount comparison requires expert estimates.** Not every lot has published low/high estimates.

### FAQ

**Do I need to configure proxies?** No. Dutch residential proxies are pre-configured.

**Can I scrape any category?** Yes — search any keyword or paste any category URL.

**How do I find the best deals?** Sort by `discountPct` descending and filter by `closingTime` within the next 24 hours.

**What if `currentBid` is null?** The lot's detail page didn't surface price data and the batch API missed it. The listing still appears with id, title, image, and URL.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel, or XML.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword(s) to search Catawiki listings (e.g., 'rolex', 'picasso', 'game boy')

## `startUrls` (type: `array`):

Paste any Catawiki search URL or category URL. Overrides Search Query if provided.

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

Maximum lots to extract.

## `maxSearchPages` (type: `integer`):

How many search result pages to crawl (24 lots per page).

## Actor input object example

```json
{
  "searchQuery": "rolex",
  "maxItems": 100,
  "maxSearchPages": 5
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "searchQuery": "rolex"
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurenic/catawiki-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 = { "searchQuery": "rolex" }

# Run the Actor and wait for it to finish
run = client.actor("aurenic/catawiki-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 '{
  "searchQuery": "rolex"
}' |
apify call aurenic/catawiki-scraper --silent --output-dataset

```

## MCP server setup

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