2dehands & 2ememain New Listing Alerts
Watch one saved search on 2dehands.be or 2ememain.be and get only the NEW listings each run - postcode radius and price band included.
Watch one saved search on 2dehands.be or 2ememain.be and get only the NEW listings each run - postcode radius and price band included. Built for hourly schedules with email or Slack. No seller identity, ever. Quiet runs cost nothing.
$3.00 / 1,000 · 100.0% success over 26 public runs in the last 30 days.
Run it on Apify → Free to try - runs bill per result on your own account.
What you give it
Every field is optional unless marked; sensible defaults do the rest.
| Field | Type | What it does | Default |
|---|---|---|---|
searchQuery |
string | The saved search to watch, exactly as you would type it on 2dehands.be or 2ememain.be, e.g. "gazelle elektrische fiets". A query, a category id, or both. | gazelle elektrische fiets |
domain |
string | Which Belgian site to watch: 2dehands.be (Dutch) or 2ememain.be (French). Both serve the same listings. | 2dehands.be |
categoryId |
integer | Optional Marktplaats level-1 category id to watch. | - |
postcode |
string | Belgian postcode (e.g. "2000") to center a radius search on. | - |
radiusKm |
integer | Watch this many km around the postcode (up to 300). Needs a postcode. | - |
priceMinEur |
integer | Only listings costing at least this much. | - |
priceMaxEur |
integer | Only listings costing at most this much. | - |
maxItems |
integer | Stop after this many new listings per run. 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 200. | 200 |
stateStoreName |
string | Named store remembering which listings were already delivered, so scheduled runs emit only new ones. Use a different name to track several searches independently. | tweedehands-alerts-state |
resetState |
boolean | Forget everything seen so far and deliver the current snapshot as a fresh baseline. | False |
scrapeDetails |
boolean | The search returns only a ~200-character description snippet. Turn this on to read each new listing's own page for the seller's full description. One extra request per new listing delivered, so slower. The seller/trader block is never read; only the description text reaches the output. Off by default. | False |
reportFailures |
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. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. | True |
What you get back
One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.
A real result row from a recent run:
{
"attributes": {
"brakeType": "Schijfrem",
"brand": "Batavus",
"condition": "Gebruikt",
"delivery": "Ophalen"
},
"categoryId": 447,
"city": "Kessel-Lo",
"country": "België",
"description": "Verkoop wegens niet meer in gebruik. Inclusief verkoopfactuur en fietspas. Werkt perfect met gebruikssporen. Verkoop aan de eerste die de vr...",
"imageUrls": [
"//images.2dehands.com/api/v1/hz-twh-pro-listing/images/48eec393-ef6f-450d-b734-e2180027a682?rule=ecg_mp_eps$_82.jpg"
],
"latitude": 50.888867758639,
"listingId": "m2452390057",
"longitude": 4.7372456384949,
"postedAt": "Vandaag",
"priceCents": 25000,
"priceType": "FIXED",
"reserved": false,
"sellerType": "private",
"title": "Batavus Fonk 7 stadsfiets",
"url": "https://www.2dehands.be/v/fietsen-en-brommers/fietsen-dames-damesfietsen/m2452390057-batavus-fonk-7-stadsfiets"
}
| Field | Type | Meaning |
|---|---|---|
listingId |
string | Marketplace listing ID, e.g. m2419606891. |
title |
string | Listing title as posted. |
description |
string | Listing description snippet as returned by the marketplace search. |
priceCents |
integer | Asking price in euro cents. Absent when the listing has no price. |
priceType |
string | Marketplace price kind, e.g. FIXED or MIN_BID. |
city |
string | Municipality of the listing. |
country |
string | Country of the listing. |
latitude |
number | Marketplace-provided municipality-level coordinate, not a seller address. |
longitude |
number | Marketplace-provided municipality-level coordinate, not a seller address. |
postedAt |
string | Posting date as the marketplace displays it: a date, or a relative label like 'Vandaag' (today). |
imageUrls |
array | Protocol-relative image URLs; prepend https: to use them. |
categoryId |
integer | Numeric marketplace category ID. Reusable as the categoryId input. |
url |
string | Direct link to the listing. |
attributes |
object | Whitelisted, non-personal listing attributes that vary by category — e.g. condition and delivery on any item; constructionYear, mileage, fuel, transmission and options for cars; livingArea and numberOfRooms for property; storage and cameraResolution for phones. Present when the listing has them. |
reserved |
boolean | Whether the listing is currently marked as reserved by the marketplace. |
sellerType |
string | Whether the listing comes from a business or a private seller. The only seller-related field in the output. |
Health
100.0% success over 26 public runs in the last 30 days. Live record, failures included: status page.
Full documentation, examples and the AI-assistant prompt live on the store page.