Catawiki Scraper & Opportunity Notification
Pricing
from $0.01 / opportunity mail sent
Catawiki Scraper & Opportunity Notification
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
Actor stats
1
Bookmarked
3
Total users
2
Monthly active users
an hour ago
Last modified
Categories
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
enableNotificationflag is active, it compares the current price withmaxPriceand the remaining time withminituesToEnd. 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
| Parameter | Type | Description | Example |
|---|---|---|---|
| url | String | Full Catawiki URL with applied filters. | https://www.catawiki.com/en/s?q=omega+geneve&filters=914%255B%255D%3D62419 |
| maxItems | Integer | Maximum number of objects to scan and save in the dataset. | 50 |
| enableNotification | Boolean | If 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 |
| maxPrice | Integer | Maximum acceptable price (EUR) to consider a lot an "opportunity". | 250 |
| minituesToEnd | Integer | Minutes remaining until the auction ends to trigger a notification. | 15 |
| sendMailTo | String | Email 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
shouldBuyflag indicating if the lot passed the set filters and can indentify as a Opportunity. - Enable Nofitifcation flag: The
enableNotificationparameter used during the run. IfenableNotification= False,shouldBuycan 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 tokenconst client = new ApifyClient({token: '<YOUR_API_TOKEN>',});// Prepare Actor inputconst 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 finishconst 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 tokenclient = ApifyClient("<YOUR_API_TOKEN>")# Prepare the Actor inputrun_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 finishrun = 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 tokenAPI_TOKEN=<YOUR_API_TOKEN># Prepare Actor inputcat > 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 Actorcurl "https://api.apify.com/v2/acts/TZWfWhjtgf9lh8Fts/runs?token=$API_TOKEN" \-X POST \-d @input.json \-H 'Content-Type: application/json'