Catawiki Scraper & Opportunity Notification avatar

Catawiki Scraper & Opportunity Notification

Under maintenance

Pricing

from $0.01 / opportunity mail sent

Go to Apify Store
Catawiki Scraper & Opportunity Notification

Catawiki Scraper & Opportunity Notification

Under maintenance

Full Catawiki Scraper & Your automatic bargain hunter! Scrape all auction based on your filter. You can enable a notification few minutes auction end to get an opportunity!

Pricing

from $0.01 / opportunity mail sent

Rating

5.0

(1)

Developer

Fabio Borsotti

Fabio Borsotti

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

an hour ago

Last modified

Share

Actor Description

This Apify Actor is an advanced tool for the comprehensive scraping and monitoring of all information returned by the Catawiki platform. The software does not only identify buying opportunities but also extracts and saves every available metadata field for the lots viewed into the dataset, allowing for deep catalog analysis.

The algorithm analyzes lots at a specific filtered URL, evaluates current bids and remaining time, and can send an email notification via the Resend service if opportunities matching the user's price and deadline criteria are identified.


Core Functionality

The algorithm performs the following steps:

  • Full Scraping Extraction: Navigates through result pages and extracts the entire data object containing all technical specifications, descriptions, and metadata for every lot.
  • Filtering & Notification: If the enableNotification flag is active, it compares the current price with maxPrice and the remaining time with minituesToEnd. If your criteria match it'll send a notification mail with matching object (image, direct link to bid). Don't miss out on a bargain!
  • Storage: Saves all extracted data into the Apify dataset for all objects. Download JSON, CSV, XML, Excel, HTML Table, RSS, JSONL.

Input Parameters

ParameterTypeDescriptionExample
urlStringFull Catawiki URL with applied filters.https://www.catawiki.com/en/s?q=omega+geneve&filters=914%255B%255D%3D62419
maxItemsIntegerMaximum number of objects to scan and save in the dataset.50
enableNotificationBooleanIf active, calculates opportunities and sends the email if some auction has time remainig less hten "minituesToEnd" and current bid less then "maxPrice". If inactive, performs scraping only.true
maxPriceIntegerMaximum acceptable price (EUR) to consider a lot an "opportunity".250
minituesToEndIntegerMinutes remaining until the auction ends to trigger a notification.15
sendMailToStringEmail address for receiving the alert report.user@example.com

Extracted Data (Scraping)

The Actor saves all information returned by the Catawiki server for each lot into the dataset, including:

  • Identifiers: Lot ID and full title.
  • Auction Details: Current price (bid), minimum bid, start time, and end time.
  • Media: Image URLs (thumbImageUrl) and direct links.
  • Application Logic: The shouldBuy flag indicating if the lot passed the set filters and can indentify as a Opportunity.
  • Enable Nofitifcation flag: The enableNotification parameter used during the run. If enableNotification = False, shouldBuy can be ignored.

Technical Notes

  • Anti-Ban: Uses proxies and random delays between requests to simulate human behavior.
  • Dataset: Even if notifications are disabled, the Actor functions as a full scraper, populating the dataset with all discovered lots based on url.

Scraper Output:

[
{
"id": 102191342,
"title": "Omega - De Ville - No reserve price - Women - 1980-1989 ",
"subtitle": "Quartz - Gold-plated, Steel",
"thumbImageUrl": "https://assets.catawiki.nl/assets/2026/3/11/d/3/9/thumb2_d394a20f-1740-4242-972e-0d9f26d6499b.jpg",
"originalImageUrl": "https://assets.catawiki.nl/assets/2026/3/11/d/3/9/d394a20f-1740-4242-972e-0d9f26d6499b.jpg",
"favoriteCount": 0,
"url": "https://www.catawiki.com/en/l/102191342-omega-de-ville-no-reserve-price-women-1980-1989",
"localized": true,
"translatedTitle": null,
"translatedSubtitle": null,
"auctionId": 1206960,
"pubnubChannel": "CWAUCTION-production-1206960",
"useRealtimeMessageFallback": false,
"use_realtime_message_fallback": false,
"isContentExplicit": false,
"reservePriceSet": false,
"biddingStartTime": "2026-03-13T11:00:00+00:00",
"bidding_start_time": "2026-03-13T11:00:00+00:00",
"buyNow": null,
"hasFreeShipping": null,
"isVectorSearchResult": false,
"description": null,
"sellerId": null,
"sellerShopName": null,
"live": {
"id": 102191342,
"reservePriceMet": null,
"bid": {
"EUR": 280,
"USD": 324,
"GBP": 242
},
"biddingEndTime": 1773859440000,
"biddingStartTime": 1773399600000,
"highestBidderToken": "597c6ca3c47cd0a89066c0df996f9aedbd040adc",
"favoriteCount": 71,
"winnerToken": null,
"closeStatus": "Open",
"isBuyNowAvailable": false
},
"biddingEndTime": "2026-03-18T18:44:00.000Z",
"shouldBuy": true,
"bidding_start_time_original": "2026-03-13T11:00:00+00:00",
"enableNotification": true
}
]

API clients

NodeJs

import { ApifyClient } from 'apify-client';
// Initialize the ApifyClient with API token
const client = new ApifyClient({
token: '<YOUR_API_TOKEN>',
});
// Prepare Actor input
const input = {
"url": "https://www.catawiki.com/it/c/333-fake-category?filters=936%5B%5D=77927!",
"maxItems": 10,
"enableNotification": true,
"maxPrice": 100,
"minituesToEnd": 15,
"sendMailTo": "user@example.com"
};
(async () => {
// Run the Actor and wait for it to finish
const run = await client.actor("TZWfWhjtgf9lh8Fts").call(input);
// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.dir(item);
});
})();

Python

from apify_client import ApifyClient
# Initialize the ApifyClient with your API token
client = ApifyClient("<YOUR_API_TOKEN>")
# Prepare the Actor input
run_input = {
"url": "https://www.catawiki.com/it/c/333-fake-category?filters=936%5B%5D=77927!",
"maxItems": 10,
"enableNotification": True,
"maxPrice": 100,
"minituesToEnd": 15,
"sendMailTo": "user@example.com",
}
# Run the Actor and wait for it to finish
run = client.actor("TZWfWhjtgf9lh8Fts").call(run_input=run_input)
# Fetch and print Actor results from the run's dataset (if there are any)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

cURL

# Set API token
API_TOKEN=<YOUR_API_TOKEN>
# Prepare Actor input
cat > input.json <<'EOF'
{
"url": "https://www.catawiki.com/it/c/333-fake-category?filters=936%5B%5D=77927!",
"maxItems": 10,
"enableNotification": true,
"maxPrice": 100,
"minituesToEnd": 15,
"sendMailTo": "user@example.com"
}
EOF
# Run the Actor
curl "https://api.apify.com/v2/acts/TZWfWhjtgf9lh8Fts/runs?token=$API_TOKEN" \
-X POST \
-d @input.json \
-H 'Content-Type: application/json'