Marktplaats Scraper & New-Listing Monitor + 2dehands avatar

Marktplaats Scraper & New-Listing Monitor + 2dehands

Pricing

from $0.90 / 1,000 listing returneds

Go to Apify Store
Marktplaats Scraper & New-Listing Monitor + 2dehands

Marktplaats Scraper & New-Listing Monitor + 2dehands

For resellers, deal alerts and price trackers: Marktplaats.nl and 2dehands.be listings by search term, category or pasted URL with price, city, date, photos and attributes. Watch mode returns only listings created since your last check and price drops, never old ads bumped back to the top.

Pricing

from $0.90 / 1,000 listing returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Marktplaats Scraper & New-Listing Monitor (+ 2dehands.be)

Get listings from Marktplaats.nl, the biggest classifieds site in the Netherlands, and from its Belgian sister site 2dehands.be, by search term, category or a pasted search address. One row per listing: title, price in EUR, city, the date the site shows, photos, category, attributes and link. Watch mode turns a search into a feed: run it on a schedule and each run returns only the listings created since your watch started that you have not received yet, plus listings whose price went down.

No login, no cookies, no API key. It reads the public search and category pages only.

What you can do with it

  • Deal alerts: watch "gazelle orange c7" or a car category every 15 minutes and get only the new listings.
  • Reselling and sourcing: list a category, filter by price range, and send the rows to a sheet or a bot.
  • Price tracking: watch mode returns a price-drop row with the previous price and the difference when a seller lowers the price.
  • Market research: how many listings the site shows for a search (listingsInSearch), prices, attributes, and how many are paid Dagtopper listings.

Input

FieldWhat it does
sitemarktplaats (marktplaats.nl, default) or 2dehands (2dehands.be).
searchQueriesSearch terms, one per line (fiets, gazelle orange, iphone 13).
categoriesThe category part of the address after /l/: auto-s, or fietsen-en-brommers/fietsen-dames-damesfietsen. Each term is searched in each category.
searchUrlsOr paste a search or category address, such as https://www.marktplaats.nl/q/fiets/ or https://www.marktplaats.nl/l/auto-s/f/particulier/10898/ (private sellers only). Filters that are part of the address are kept.
maxResultsPerSearchListings per search, 1 to 5010 (default 30).
minPrice / maxPricePrice range in EUR, applied to the pages read.
includeAdsAlso return Admarkt ads (paid business ads mixed into each page) and the top block. Off by default.
onlyNewWatch mode (see below).
includePriceDropsIn watch mode, also return price drops (default on).
watchPagesIn watch mode, how many pages (30 listings each) to read per check, 1 to 34 (default 5).
watchNameKeeps separate memories for separate schedules of the same search.
resetMonitoringStateStart a watch over.

Example: { "searchQueries": ["fiets"], "maxResultsPerSearch": 30 }

Watch example: { "searchQueries": ["gazelle orange c7"], "onlyNew": true, "watchPages": 5 } on a schedule.

Output

One row per listing (status: "ok"):

FieldMeaning
listingIdThe site's listing ID (m…; Admarkt ads start with a).
title, descriptionTitle and the description snippet shown on the search page. Phone numbers and email addresses written in them are replaced with [phone removed] / [email removed].
price, priceType, currencyPrice in EUR and the site's own price type word: FIXED (asking price), MIN_BID (bidding from this amount), FAST_BID (bidding, no amount), SEE_DESCRIPTION. price is null when the site shows no amount.
previousPrice, priceChangeWatch mode, price-drop rows only.
city, countryCodeWhere the listing is, as shown (city level).
dateShown, listedDateThe date text on the card (Vandaag, Gisteren, 5 okt 26) and the same date as YYYY-MM-DD (Amsterdam time). The site moves this date when a listing is renewed or promoted.
imageUrl, imageUrlsPhotos.
attributesCondition, delivery, brand and the other attributes shown, as the site names them.
isPromotedtrue for paid Dagtopper listings.
isAdmarkttrue for Admarkt ads (only with includeAds).
isBusinesstrue for Admarkt ads, sellers with a website, and lists filtered to businesses; false for lists filtered to private sellers (/f/particulier/10898/); otherwise null (not shown on the search page).
isReserved, sellerVerifiedAs shown on the site.
urlLink to the listing.
positionInSearch, listingsInSearchPosition in the list read, and the total the site shows for the search.
changeTypeWatch mode: first-check, new or price-drop.
site, searchQuery, searchCategory, searchCategoryName, searchUrl, watchName, checkedAtWhich search the row came from.

Seller names and seller IDs are not returned.

In the pages read while building this Actor (232 listings, 11 pages, October 2026), 86% had a shown price and 100% had a city, a date and a photo; 69% were paid Dagtopper listings.

Watch mode, and what "new" means here

The first run returns the listings it reads and remembers them (first-check). Every later run returns:

  • new: a listing you have not received that was created after the watch started. The site numbers listings in the order they are created, so a listing whose number is higher than the highest number seen at the first check is new. An old listing that a seller bumped back to the top, or that rises in the order, is not called new.
  • price-drop: a listing you already received whose price went down. Price rises are remembered, not returned.

A check that finds nothing returns one free no-new-listings row and is charged as one small search-checked event. Listings that could not be returned because of your run's maximum charge are not marked as delivered, and the next run returns them. One limit: a listing created a few hours before your first check can have a higher number than any listing that check read, and then comes back once as new.

The order is the site's, and it matters

The site lists search results with paid Dagtopper listings first and the rest by relevance, not by date. Sorting by date and price filters are applied by the site's page in your browser (after # in the address) through an internal search API that the site's robots.txt does not allow, so this Actor does not use them, and addresses with ? or # filters are refused instead of being silently ignored.

For watch mode this means a new listing can appear on any page. A watch reads watchPages pages per check; if the site shows more listings than that, the first check says so in a free watch-coverage row. Use a narrow search (more words, a category, a filter in the address) so the pages read cover the whole list.

Rows that explain instead of data (never charged)

no-results, not-found (unknown category, or the site answered with a different list), none-in-price-range, no-new-listings, watch-coverage, incomplete (a later page could not be read), blocked (the site showed a check page; this Actor does not solve or bypass it), unreadable, not-allowed-by-robots-txt, bad-input, budget-reached, more-not-returned. Each has a note that says what happened.

Limits

  • The site serves at most 167 pages (5,010 listings) per search.
  • Up to 10 searches per run; pages are read one by one with a pause between them.
  • The description is the snippet on the search page, not the full listing text.
  • The site's robots.txt is read on every run, and pages it does not allow are not requested.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
  • Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.