Catawiki Auction Lots & Bid Monitor
Pricing
from $0.55 / 1,000 lot scrapeds
Catawiki Auction Lots & Bid Monitor
Search Catawiki auctions by keyword and get one flat row per lot: title, current bid in EUR, USD and GBP, closing time, reserve met, closed flag, watchers, buy-it-now price, photo and link. Sort by newest or closing soonest. For new-lot and bid alerts on watches, art, cars, coins and collectibles.
Pricing
from $0.55 / 1,000 lot scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Search Catawiki, Europe's online auction house for
watches, art, cars, coins, jewellery and collectibles, for one or more terms and
get one flat row per lot: title, link, photo, the current bid in euro, US
dollar and pound, the closing time, whether the reserve is met, whether the
lot has closed, how many people are watching it and the buy-it-now price when
there is one. Run it on a schedule, sort by newest first, and diff the
dataset on lot_id to get a new-lot alert; sort by closing soon and
compare current_bid_* between runs to get a bid alert.
No account, no API key, no login, no browser. One request returns 24 lots and a second request returns the live bids for those 24.
Input
| Field | Notes |
|---|---|
searchTerms | One or more search terms, one per line. Required. A lot found by two terms is returned once, under the first. |
maxItems | Lots to read per search term (default 100, up to 2,376). 24 per page. |
sort | relevance (Catawiki's default), newest (most recently listed first), closing-soon (lots that close first). |
proxyConfiguration | Apify proxy by default. |
About the sorts
The sort values are the three Catawiki's own sort menu sends. Catawiki answers a sort value it does not know with HTTP 200 and the default order, and the page does not say which sort it applied. So:
- closing-soon is checked by the actor: if fewer than 80% of the first page's closing times come back in ascending order, the term fails (at no charge) rather than return rows in the wrong order. It is a share and not a strict order because a bid in a lot's last minutes pushes its closing time out between the search request and the bidding request.
- newest cannot be checked from the data, because the search carries no listing time. It was measured to return a different order from relevance, with the most recently opened auctions at the top, and the live test suite holds that in place. Treat "newest" as Catawiki's "recently added" menu entry.
Output
Prices are numbers in the currency named by the column. Times are ISO 8601 in UTC
(2026-10-15T19:06:20Z).
| Field | Notes |
|---|---|
query | The search term that first found this lot. |
lot_id, url, auction_id | Catawiki's lot id (the number after /l/), the https://www.catawiki.com/en/l/<id>-<slug> link, and the auction (a themed batch of lots that closes together) the lot sits in. lot_id is stable for the life of the lot: diff on it. |
title, subtitle, image_url | As Catawiki shows them. subtitle is null when the lot has none. |
current_bid_eur, current_bid_usd, current_bid_gbp | The highest bid so far, with Catawiki's own conversion. Null when Catawiki sent no amount, never 0. |
bidding_start_time, bidding_end_time | When bidding opened and when it closes. The close time moves: a bid in the last minutes extends it. |
closed | True once bidding has ended. Catawiki's search still listed a lot five minutes after it closed (1 of 148 distinct lots sampled; how long it keeps closed lots is not measured), so filter on this if you only want live lots. |
reserve_price_set | Whether the seller set a minimum price. |
reserve_price_met | Whether the bid has reached it. Null for a lot with no reserve: there is nothing to meet. |
favorite_count | How many people have the lot on their watch list. |
buy_now_price_eur | The buy-it-now price in euro when the seller offers one, else null. |
buy_now_available | Catawiki's own flag from the bidding endpoint. It does not always agree with buy_now_price_eur (one of three sampled lots with a price had the flag false), so use the price. |
Honest nulls
A field Catawiki did not send is null, never 0 or "". In the sample every
lot had a bid, so the case "nobody has bid yet" was not observed; the actor
treats a missing or non-positive amount as null rather than as a bid of 0. If
Catawiki's bidding endpoint does not return a lot at all (it leaves out an id it
does not know), the lot is still returned with its search fields and null bid,
closing, reserve, watcher and closed columns, and the log says how many.
Pricing
Pay per event:
- $0.002 per run (
actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing. - $0.00055 per lot row written (
listing-scraped), i.e. $0.55 per 1,000 lots. The bidding request that supplies the bids is included.
How it fetches
Two plain HTTP requests per page of 24 lots, no browser:
https://www.catawiki.com/en/s?q=<term>&page=<n>- a Next.js page. The lots are read from the JSON in its__NEXT_DATA__script tag (searchLots.lots). That data carries what the lot is and no bid amounts at all.https://www.catawiki.com/buyer/api/v3/bidding/lots?ids=a,b,c- Catawiki's own bidding API, called once per page with that page's 24 ids, joined to the search lots by id.
Measured 2026-10-12: HTTP 200 from an Apify datacenter exit for both, no key or cookie, held for 30 minutes. Catawiki refuses a plain development machine (403), so the Apify proxy is what the actor runs through, and it retries a 403, 429 or 5xx from a fresh address. Nothing was measured through a residential exit.
Things worth knowing, all measured:
- Only 99 pages are real. For a search of 11,663 lots, pages 1 to 99 were distinct and pages 100 and beyond all returned one repeated set of 24 lots. The actor stops at page 99 (2,376 lots) and says so in the log. To read a larger search, split it into narrower terms, or run it newest-first on a schedule. A search past its end is the other behaviour: an empty page.
- No match is not "no results". For a nonsense term Catawiki returns a full
page of loosely related lots and flags it
extended_search_result. Those lots are not matches, so the actor returns none of them and charges nothing; the log says the term had no results. A real term can also hit this: "rolex daytona 6263" did. - Counts move. Lots are listed and closed between requests, so a walk can show a lot twice across a page boundary; it is returned once.
- The bidding endpoint answers in id order, not in the order asked, which is why the join is by id. 24, 66 and 90 ids in one call all worked.
- Not offered.
per_pageandpare ignored by the source, so there are no inputs for them. Filters (category, price, closing date) are not offered.