Marktplaats.nl New Listings & Price Alert (Netherlands)
Pricing
from $0.70 / 1,000 listing scrapeds
Marktplaats.nl New Listings & Price Alert (Netherlands)
Newest Marktplaats.nl listings for any search terms, one flat row each: title, price in EUR (null when none is stated), price type, city, seller, listing date, category, photos, attributes, URL. Newest-first or by price, with a price band.
Pricing
from $0.70 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Search Marktplaats, the Netherlands' biggest classifieds site, for one or more terms and get one flat row per listing: title, price in euros, Marktplaats' price type, city, seller, listing date, category, photos, attributes and the listing URL. Newest first by default, so a scheduled run is a new-listing feed; a price band and price sorts make it a bargain watch.
No account, no login, no browser. One request returns 30 listings.
Input
| Field | Notes |
|---|---|
queries | One or more search terms, one per line. Required. A listing found by two terms is returned once, under the first. |
maxItems | Listings to read per search term (default 100, up to 5,000). Marktplaats stops serving a search after about 5,000 results (167 pages of 30) however many it reports, so a broader search than that needs a narrower term or a price band. |
sort | newest (default), oldest, relevance, price-asc, price-desc. |
minPrice, maxPrice | Asking-price band in whole euros, inclusive, either end optional. |
proxyConfiguration | Apify proxy by default. |
About "newest first"
This is Marktplaats' own date sort. It orders by when a listing was last
placed, not strictly when it was first posted: a seller who bumps an old
listing, or pays to promote it, sees it jump back to the top. Row ids are
therefore not monotonic, and a handful of old listings can sit among the new
ones (promoted rows carry promotion = DAGTOPPER). The actor does not
re-sort; filter on promotion or listed_date if you only want the fresh
ones.
About the price sorts and the price band
- A price band (
minPrice/maxPrice) also removes listings that state no price ("see description", bid-only), because there is nothing to compare. Without a band they are returned, withprice_eurnull. price-ascstarts with the free listings and with bid-only listings that state no minimum, so the first rows are not "the cheapest things" in the sense of a price; addminPriceof 1 to skip them.
Output
| Field | Notes |
|---|---|
query | The search term that first found this listing. |
item_id, url | Marktplaats' id and the absolute listing URL. |
title, description | As the seller wrote them. description is only the first ~200 characters the search response carries, cut mid-word; the full text is on the listing page, which this actor does not open. |
price_eur, price_type | See below. |
city, country_code, country, latitude, longitude | The approximate place Marktplaats shows. |
seller_id, seller_name, seller_verified | Marktplaats' numeric seller id, the display name the seller chose, and its "verified" flag. |
listed_date_text, listed_date | The day as Marktplaats prints it (Vandaag, Gisteren, Eergisteren, 5 okt 26) and as an ISO date. |
category_id, category_path | Numeric category id, and the path as URL slugs (fietsen-en-brommers/fietsen-dames-damesfietsen). The search response carries no category name. |
image_urls | Photo URLs (large rendition). Nothing is downloaded. |
attributes | One object of the attributes shown on the listing (condition, delivery, brand, frame height, ...). The keys depend on the category. |
is_advert | True for a business (advertiser) listing, read from the a id prefix (private listings are m). Every a listing seen carried advertiser tracking data. |
promotion | Marktplaats' promotion flag, DAGTOPPER or NONE. |
reserved | Marktplaats' "reserved" flag. |
The price, honestly
Marktplaats sends a price in cents plus a price type, and the cents are 0
for four different things. The actor keeps the type and only turns a real
amount into a number:
price_type | price_eur |
|---|---|
FIXED | The asking price. |
MIN_BID | The minimum bid (bidding starts there), or null when the seller set no minimum. It is not a price anyone has agreed to. |
FAST_BID | null: a bid-only listing with no amount. |
SEE_DESCRIPTION | null: "see description". The price may well be in the text. |
FREE | 0.0: the only case where zero is the price. |
Any other type Marktplaats adds is passed through in price_type, with
price_eur set only if it comes with an amount. In 280 listing records from
seven fetched pages, 147 were FIXED, 62 MIN_BID, 41 SEE_DESCRIPTION, 16 FREE and 14 FAST_BID, so
roughly 4 in 10 rows have no usable price - filter on price_eur before
averaging anything.
Honest nulls
A field Marktplaats did not send is null, never 0 or "":
city, country_code and the coordinates are null for the (mostly
advertiser) listings with no place - Marktplaats sends coordinates 0,0 for
those, and 0,0 is not reported as a location. description is null when the
listing has none; seller_verified and reserved are null if the flag is
missing. listed_date is null if the date text is in a form not recognised
(listed_date_text is still there).
listed_date has day precision only: Marktplaats gives no time of day.
Vandaag and its siblings are resolved against the run date in the
Netherlands.
Personal data
Listing text and display names are written by private individuals and can hold names or contact details. They are carried as Marktplaats publishes them, because they are the listing; nothing is extracted from them. You are responsible for handling them under the GDPR if you store them.
Pricing
Pay per event:
- $0.002 per run (
actor-start), charged only after your input is validated - a run that fails on bad input costs nothing. - $0.0007 per listing row written (
listing-scraped), i.e. $0.70 per 1,000 listings.
How it fetches
It calls the same JSON search API Marktplaats' website uses
(www.marktplaats.nl/lrp/api/search), 30 rows per request, with
Accept: application/json. Measured 2026-10-09: HTTP 200 from Apify datacenter
and residential exits and from a plain connection. Apify datacenter proxy is
the default.
Things worth knowing, all measured:
- Rate limit. After roughly 150 requests in a few minutes from one
address, Marktplaats' CDN answers
403 Request blockedfor about 12 minutes. The actor treats 403, 429 and 5xx as a refusal, rotates to a fresh proxy address and retries; a very largemaxItemson many terms is what can run into it. - Empty deep pages. On the relevance sort the API sometimes answers a valid deep offset with an empty page (at least half of the asks from page 100 on), identical in shape to a search with no results. The actor tells the two apart by position - an empty page before the number of results Marktplaats itself reported is retried, not taken as the end. The newest-first sort did not show it (48 of 48 asks answered at pages 100 to 166).
- Result cap. The API serves at most
maxAllowedPageNumberpages (167 of 30 for a large search) and answers beyond it with an empty page; the run logs when a term was cut off that way.