Marktplaats Scraper — Monitor Listings & Deep Details avatar

Marktplaats Scraper — Monitor Listings & Deep Details

Pricing

from $3.00 / 1,000 scraped listings

Go to Apify Store
Marktplaats Scraper — Monitor Listings & Deep Details

Marktplaats Scraper — Monitor Listings & Deep Details

Fast and lightweight python scraper for marktplaats.nl using curl_cffi. Extracts titles, prices, descriptions, high-res images, location coordinates, dynamic attributes, and detailed seller metrics. Supports real-time monitoring and Telegram/Discord alerts.

Pricing

from $3.00 / 1,000 scraped listings

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Marktplaats Scraper — Netherlands Classified Ads, Prices & Listing Monitor

Disclaimer: This is an unofficial integration developed independently. It is not affiliated with, sponsored by, or endorsed by Marktplaats.nl or any of its subsidiaries.

Marktplaats and related names are trademarks of Marktplaats B.V. Data is read from publicly accessible search results and listing pages. No Marktplaats account login is required.

This Actor is provided for informational, research, and price monitoring purposes only. You are solely responsible for complying with applicable laws, Marktplaats's terms of use, and your organization's policies.

Extract structured classified ads data from the Netherlands' largest marketplace — marktplaats.nl. Search by keyword, Dutch postal code (Postcode) + radius, price range, or paste a pre-filtered browser URL. Parses full listing descriptions, dynamic attributes (brand, model, storage, condition, etc.), high-resolution images, seller profile metrics (account type, active years, verification status), location data, view counts, shipping options, and bid histories.

Includes monitoring mode with delta tracking and native Telegram & Discord webhooks for real-time alerts when new listings appear or prices change.

Best for: Marktplaats price research, Dutch classifieds monitoring, resale arbitrage alerts, local deal hunting by postcode, and bulk JSON/CSV export via Apify integrations.

When to use this Actor

  • Marktplaats price tracking — Collect listing prices, attributes, and locations for market averages and trend analysis across phones, cars, furniture, and more.
  • Real-time deal hunting & arbitrage — Run in monitor mode every 1–5 minutes and get instant Telegram or Discord alerts for newly listed underpriced items.
  • Local inventory matching — Search by Postcode + radius (e.g. iPhone 15 Pro within 25 km of Amsterdam) to find pickup-friendly deals.
  • Category & filter scraping — Copy any filtered search URL from your browser (category, brand, price, condition) into Start URLs for exact replication.
  • Seller trust signals — Parse verification status, seller type (consumer vs trader), and active-since metrics alongside each listing.

When not to use this Actor

  • Private messages or seller contact — This Actor reads public listing pages only; it does not access Marktplaats messaging or in-app chat.
  • Account-authenticated actions — No login, favorites, or saved-search API; use Start URLs for pre-built filter combinations instead.
  • Heavy JavaScript SPAs outside Marktplaats — Built specifically for marktplaats.nl search and detail pages, not generic web scraping.

Key Features

  • Lightweight & fast — Runs on 128–512 MB RAM with efficient HTTP requests — no heavy headless browser required.
  • Full image extraction — All available high-resolution listing images, not just search-result thumbnails.
  • Postcode + radius search — Dutch postal code geolocation with configurable km radius (3–150 km).
  • Detail-page enrichment — View counts, favorites, shipping options, bid lists, and full attribute tables when scrapeDetails is enabled.
  • Seller profile parsing — Account type, active years, and verification status from public listing data.
  • Telegram & Discord alerts — Native webhook support in input config: images, prices, location, and description snippets on new listings.
  • Smart monitoring — Key-Value store tracks seen listing IDs and prices; stops pagination early when consecutive known ads are found.
  • Parallel detail fetching — Configurable concurrency for faster bulk runs on large result sets.

Input Parameters

ParameterTypeDefaultDescription
startUrlsArray[]Direct URLs to search results, categories, or individual listings. Filters from the URL are preserved.
searchQueryStringSearch term (e.g. iphone 15 pro). Ignored when Start URLs are provided.
postalCodeStringDutch postal code (Postcode) to restrict search to a region.
radiusString"0"Radius in km around Postcode: 3, 5, 10, 15, 25, 50, 75, 100, 150.
minPrice / maxPriceNumberFilter listings by price range (€).
maxItemsInteger100Maximum number of listings to collect.
scrapeDetailsBooleantrueVisit detail pages for full gallery, stats, bids, and shipping. If false, collects cards from search results only.
maxConcurrencyInteger5Parallel detail-page fetches (1–15). Higher = faster; lower = more stable on large batches.
monitorModeBooleanfalseDelta tracking: only new/updated listings in output; early stop on known ads.
telegramTokenStringTelegram Bot token for alert notifications.
telegramChatIdStringTelegram chat ID to receive alerts.
discordWebhookStringDiscord webhook URL for rich listing embed cards.
proxyConfigurationObjectApify Proxy settings. Netherlands (NL) residential proxy recommended for high volume.

Input Example

{
"searchQuery": "iphone 15 pro",
"postalCode": "1012",
"radius": "25000",
"minPrice": 400,
"maxPrice": 900,
"maxItems": 500,
"scrapeDetails": true,
"maxConcurrency": 5,
"monitorMode": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "NL"
}
}

Output Format

Each dataset row = one parsed Marktplaats listing.

FieldTypeDescription
adIdStringUnique Marktplaats listing ID.
urlStringCanonical listing URL.
titleStringAd headline.
priceNumberNumeric price in EUR when fixed; null for auction-only listings.
priceTypeStringe.g. FIXED, MIN_BID, FAST_BID, SEE_DESCRIPTION.
descriptionStringFull listing description text.
locationObjectCity, postcode, country, latitude, longitude when available.
shippingObjectShipping options and carrier labels from detail page.
attributesObjectDynamic key/value pairs (condition, storage, model, etc.).
imagesArrayHigh-resolution image URLs.
seller.idNumberSeller account ID.
seller.nameStringPublic seller display name.
seller.typeStringe.g. CONSUMER, TRADER.
seller.active_sinceStringHow long the seller has been active on Marktplaats.
seller.isVerifiedBooleanVerification badge status.
stats.viewCountNumberListing view count (detail scrape).
stats.favoritedCountNumberTimes saved to favorites (detail scrape).
stats.sinceStringExact publish timestamp (ISO 8601).
bidsArrayCurrent bids with value, date, and bidder nickname (when bidding enabled).
publishedDateStringListing publish date/time.
scrapedAtStringExtraction timestamp (UTC ISO 8601).

Output Example

{
"adId": "m2416596985",
"url": "https://www.marktplaats.nl/v/telecommunicatie/mobiele-telefoons-apple-iphone/m2416596985-iphone-13-pro",
"title": "iPhone 13 pro",
"price": 275.0,
"priceType": "MIN_BID",
"description": "Selling my wife's iPhone 13 pro 128GB. Very good condition, battery health 76%. Pick up in Amstelveen.",
"location": {
"city": "Amstelveen",
"postcode": "1181",
"country": "Nederland",
"latitude": 52.290225,
"longitude": 4.841126
},
"shipping": {
"augmentedLabels": [
{
"carrierId": "dhl-nl",
"labels": [
{
"label": "Afhaalpunt via DHL voor",
"price": "€ 2,89",
"carrierName": "DHL",
"deliveryMethod": "PICK_UP"
}
]
}
]
},
"attributes": {
"Conditie": "Zo goed als nieuw",
"Opslagcapaciteit": "128 GB",
"Abonnement": "Zonder abonnement",
"Simlock": "Zonder simlock"
},
"images": [
"https://images.marktplaats.com/api/v1/hz-mp-pro-listing/images/a37247a3-38a9-4f66-8e8a-e5de7be6ff0e?rule=ecg_mp_eps$_85.jpg"
],
"seller": {
"id": 22317049,
"name": "Mihai Filer",
"type": "CONSUMER",
"active_since": "11 jaar",
"isVerified": true
},
"stats": {
"viewCount": 78,
"favoritedCount": 1,
"since": "2026-07-03T12:46:35Z"
},
"bids": [
{
"id": 1548714969,
"value": 27500,
"date": "2026-07-03T16:04:18Z",
"user": { "id": 52047226, "nickname": "JB" }
}
],
"publishedDate": "2026-07-03T12:46:35Z",
"scrapedAt": "2026-07-03T18:55:10.397Z"
}

Use Cases

Use CaseWhat you get
Resale arbitrageNew-listing alerts with price, photos, and location for flip opportunities
Market pricingStructured price + attribute datasets per keyword or category
Local deal huntingPostcode + radius filters for pickup-friendly Dutch classifieds
Automotive & spec-heavy sourcingFull attribute tables for cars, phones, and electronics
Data pipelinesJSON/CSV export or webhook integrations to Sheets, databases, and BI tools

FAQ

How is this different from a generic web scraper?

This Actor is built specifically for marktplaats.nl: search pagination, Dutch attribute parsing, seller metrics, bid history, monitor-mode delta tracking, and Telegram/Discord alerts — out of the box.

Do I need proxies?

For high-volume runs (500–1000+ listings), aggressive monitoring (every 1 minute), or detail scraping at scale, use Apify Residential Proxies with Netherlands (NL) country targeting for best reliability.

Can I scrape specific categories or advanced filters?

Yes. Open marktplaats.nl in your browser, apply all filters (category, brand, price, condition, sort), copy the URL from the address bar, and paste it into Start URLs (startUrls). This is the most reliable way to replicate complex filter combinations.

How does Monitoring Mode work?

With monitorMode: true, listing IDs and prices are stored in the default Key-Value Store. On each run the Actor scans from the top of search results. New or price-changed listings are written to the dataset and sent to Telegram/Discord. After 5 consecutive already-known unchanged ads, pagination stops to save compute.

Can I scrape 1000+ listings in one run?

Yes. Set maxItems to your target (e.g. 1000) and tune maxConcurrency (default 5). Use Netherlands residential proxies for large batches with scrapeDetails: true. Pagination walks search result pages automatically until the limit is reached or results are exhausted.

Does it export to JSON / CSV / API?

Yes. Results are written to the Apify dataset. Download JSON, CSV, or Excel from the run, or connect webhooks and integrations (Google Sheets, BigQuery, custom API endpoints, etc.).