Marktplaats Scraper [💰$1/1K] | NL + BE | Seller Leads
Pricing
from $0.90 / 1,000 results
Marktplaats Scraper [💰$1/1K] | NL + BE | Seller Leads
Scrape marktplaats.nl plus 2dehands.be and 2ememain.be by keyword or pasted URL. Get title, price, full description, location, category, attributes, images, view and favorite counts, plus seller lead data: seller name, ID, verified status, profile URL, reviews URL and contact options.
Pricing
from $0.90 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Marktplaats Scraper — Dutch & Belgian Classifieds Data (NL + BE)
Scrape marktplaats.nl and its sister platforms 2dehands.be and 2ememain.be — one shared backend, one dataset — by keyword or by pasted URL. Get listing title, price and price type, full description, city and coordinates, category, attributes, image URLs, view and favorite counts, plus seller lead-generation data: seller name and ID, verified/professional status, profile and all-ads URLs, reviews URL, own-website link, member-since date, contact options and city. One row per listing, tagged with its platform.
Built for Dutch and Belgian classifieds market research, competitor price monitoring, seller lead generation, and building structured resale databases. The default dataset is one row per listing, optionally enriched from the listing's own detail page.
Scrape Dutch & Belgian Classifieds For Market Research & Lead Generation
- Price monitoring on marktplaats.nl — fixed, bid, free or negotiable price types with view and favorite counts
- Seller lead generation — seller name, ID, verified/professional status, profile and all-ads URLs, reviews URL and contact options
- Cross-border market coverage — one
platform: "all"run fans the same keyword out to the Netherlands and both Belgian platforms - Building a resale or e-commerce database — full description, attributes map, image URLs and category tree
- Competitor and inventory research — category browsing with parent category and
postedAttimestamps - Vehicle and product attribute extraction —
attributes/attributesRawcarry brand, mileage, fuel type and similar structured fields where the listing publishes them
How It Works

The Actor reads the internal search JSON behind Marktplaats, 2dehands and 2ememain, then follows offset pagination without a browser. Detail pages add the full description, exact posting date and seller lead fields.
Each row covers one listing with its price type, category, location, images, seller profile and contact options. Use it to track prices and build seller lead lists across the Benelux.
No browser is used — this is a plain HTTP CheerioCrawler. Three public surfaces are read, in order of preference:
- Internal search/browse JSON API (primary).
GET https://www.marktplaats.nl/lrp/api/search?query=<q>&limit=50&offset=0&searchInTitleAndDescription=true&viewOptions=list-view(same path on2dehands.beand2ememain.be) returns the same payload the page renders:listings[],totalResultCount,facets,searchRequest,categoriesById. It needs no cookies, no consent cookie, no auth and no JavaScript, and it makes pagination trivial (offset/limit, up to 50 per page). - Embedded
__NEXT_DATA__JSON blob. For a user-supplied search or category URL, the served Next.js HTML embeds the whole first result set and the exact original search request (props.pageProps.searchRequestAndResponse), which is then replayed against the JSON API for pages 2..n. - Inline state blobs on the listing (VIP) page.
window.__CONFIG__carries the price, the exact posted timestamp (stats.since), the full category, the seller object (ID, name, type, active-since, profile and all-ads URLs, contact options), the gallery image URLs and the ad type;window.__ENV_CONFIG__carries the seller's reviews URL and the/externalUrl/redirect/…link to the seller's own website; and the DOM holds the full, untruncated description. These are fetched with plain HTTP through the crawler's request function, so the enrichment adds no rendering cost.
All three hosts return HTTP 200 to a normal request, so PlaywrightCrawler is never needed — that keeps runs fast and cheap.
Input Parameters
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searches | array | No | ["fiets"] | Keywords; one backend query each. |
startUrls | array | No | — | Search pages, category pages or single listing URLs. |
platform | enum | No | marktplaats | marktplaats / 2dehands / 2ememain / all (fan-out to all three). |
maxItems | integer | No | 100 | Hard cap across the whole run. |
maxPagesPerSearch | integer | No | 3 | 50 listings per backend page. |
includeDetails | boolean | No | true | Fetch listing pages for the full description, the exact date and the seller lead fields. |
detailConcurrency | integer | No | 8 | Parallel detail-page fetches (1–20). |
maxConcurrency | integer | No | 3 | Keep 2–4 for polite crawling. |
maxRequestsPerCrawl | integer | No | 300 | Backend pages plus detail pages. |
proxy | object | No | off | Standard Apify proxy picker (group/country chosen in the UI). |
Free-plan runs are capped at 10 items and 1 result page per search; paying runs get the full maxItems / maxPagesPerSearch.
Output Fields
One row per listing. Two dataset views are available: Overview (all listings) and Seller leads (seller-outreach columns only).
| Group | Fields |
|---|---|
| Listing | platform, itemId, url, title |
| Price | priceEur, priceType, priceTypeLabel (fixed / bid / free / negotiable), isAuction, isFree |
| Description | description (full text when detail pages are on), descriptionTruncated |
| Location | city, country, latitude, longitude, distanceMeters |
| Category | categoryId, category (full name), categoryParent |
| Attributes | attributes (key → value map), attributesRaw |
| Images | images[], imageCount, primaryImage |
| Seller (lead-gen) | sellerId, sellerName, sellerVerified, sellerType, sellerIsProfessional, sellerProfileUrl, sellerAdsUrl, sellerReviewsUrl, sellerWebsiteUrl, sellerActiveSince, sellerContactOptions, sellerCity, sellerCountry |
| Timing | postedLabel (e.g. "Vandaag"), postedAt (ISO 8601 from stats.since) |
| Extras | priorityProduct, traits, verticals, viewCount, favoriteCount, adType, reserved |
Example Input
Scrape used bikes on marktplaats and both Belgian platforms:
{"searches": ["racefiets", "veldrijfiets"],"platform": "all","maxItems": 300,"maxPagesPerSearch": 6}
Example Output
{"platform": "marktplaats","itemId": "v4329876543","url": "https://www.marktplaats.nl/v/fietsen-en-toerfietsen/m1234567899-gazelle-racefiets.html","title": "Gazelle Racefiets Carbon Maat 56","priceEur": 850,"priceType": "fixed","priceTypeLabel": "fixed","isAuction": false,"isFree": false,"description": "Gazelle carbon racefiets, maat 56, 11-speed Shimano 105. Weinig gebruikt, altijd binnen gestald. Ophalen in Utrecht of verzenden mogelijk.","descriptionTruncated": false,"city": "Utrecht","country": "NL","latitude": 52.0907,"longitude": 5.1214,"distanceMeters": null,"categoryId": "509","category": "Fietsen en Tourfietsen","categoryParent": "Sport en Spel","attributes": {"Merk": "Gazelle","Conditie": "Zo goed als nieuw","Frame maat": "56","Aantal versnellingen": "11"},"attributesRaw": "Merk: Gazelle; Conditie: Zo goed als nieuw","images": ["https://images.marktplaats.nl/api/v1/lots-v2/abc123/foto.jpg"],"imageCount": 6,"primaryImage": "https://images.marktplaats.nl/api/v1/lots-v2/abc123/foto.jpg","sellerId": "user_99887766","sellerName": "fietsliefhebber","sellerVerified": true,"sellerType": "PRIVATE","sellerIsProfessional": false,"sellerProfileUrl": "https://www.marktplaats.nl/u/99887766/","sellerAdsUrl": "https://www.marktplaats.nl/u/99887766/","sellerReviewsUrl": "https://www.marktplaats.nl/u/99887766/#reviews","sellerWebsiteUrl": "/externalUrl/redirect/abc123/","sellerActiveSince": "2018-03-14","sellerContactOptions": ["chat", "phone"],"sellerCity": "Utrecht","sellerCountry": "NL","postedLabel": "14 okt 26","postedAt": "2026-10-14T09:23:11.000Z","priorityProduct": false,"traits": [],"verticals": ["bicycle"],"viewCount": 342,"favoriteCount": 7,"adType": "regular_ad","reserved": false}
Automate Classifieds Monitoring With Schedules & Webhooks
- Schedule the Actor daily or weekly to re-run a keyword and diff new listings, price drops and new sellers.
- Webhooks — configure a run-success webhook so each finished run POSTs to n8n, Make or Zapier and lands in a CRM or spreadsheet.
- Dataset views — pin the "Seller leads" view when the goal is outreach rather than market analysis.
- Apify API — pull the dataset programmatically with the JavaScript or Python client, or export JSON / CSV / Excel from the console.
- Recurring runs are what keep a resale database current; listings and prices move daily.
Related Actors
- Marktplaats Scraper — the most-used Marktplaats scraper on Apify.
- Marktplaats.nl Scraper — a long-running Marktplaats scraper with wide adoption.
- Marktplaats.nl Scraper 🤎 $0.9/1K Netherlands Data API — a low-price Marktplaats option.
- Marktplaats.nl Scraper — Search, Paste-URL & Seller · 24 Fields — Marktplaats with a seller-focused field set.
- OLX Scraper — classifieds across seven OLX country sites, for markets beyond NL and BE.
Frequently Asked Questions
Why use this Actor instead of the official Marktplaats API?
Marktplaats does operate an official API (API 2.0), but it is seller-side only: through it you have access to your own ads, and ads from other advertisers are not accessible. There is also a deep-pagination cap on that API (5,000 results). This Actor instead reads the same first-party search endpoint the site's own frontend calls, so you can search and export anyone's listings — including full descriptions, exact posted timestamps and seller lead fields — with no API key and no contract.
What are alternatives to Marktplaats for Dutch and Belgian classifieds data?
Three routes exist. First, the official Marktplaats API — free, but only for your own advertisements and capped at 5,000 results. Second, third-party classifieds APIs that resell Marktplaats data (and 2dehands / 2ememain) at a higher per-record price. Third, self-serve scraping of the same public JSON endpoint (this Actor and the ones in Related Actors). OLX is the usual companion for markets outside the Netherlands and Belgium.
Can I search 2dehands.be and 2ememain.be too?
Yes — set platform: "all". All three sites are served by the same codebase and the same /lrp/api/search endpoint, so only the hostname changes; rows are tagged with platform and de-duplicated on platform + itemId. You can also set platform to 2dehands or 2ememain to target one Belgian site.
Does this Actor return the full description and the exact posted date?
Yes, but only when includeDetails is true (the default). The search endpoint returns a description truncated to roughly 200 characters and a human-readable postedLabel; the listing page's inline state objects supply the full untruncated text and an exact ISO 8601 postedAt from stats.since. With details off you still get the truncated description and the label.
How much data can I get out of one search?
The backend caps each result page at 50 listings and allows roughly 100 pages per query, so a single query tops out near 5,000 listings. maxPagesPerSearch (default 3) and maxItems (default 100) are the Actor's own limits on top of that. Free-plan runs are capped at 10 items and 1 result page per search.
Can an AI agent call this Actor?
Yes. It is a standard Apify Actor, so any MCP client or agent can start a run through the Apify API or the Apify MCP server, wait for it to finish, and read the dataset items. The minimal input and output field list are in the next section.
How much does it cost?
Pay-per-event: one result event per listing returned ($1 per 1,000 listings), plus a small Actor-start event scaled by memory. There is no charge for backend pages that return no listing.
For AI Agents & LLM Apps
Purpose: return structured classifieds listings (title, price, description, location, category, attributes, images, seller lead fields) from marktplaats.nl, 2dehands.be and 2ememain.be as JSON rows.
Minimal input (the default — a single keyword on marktplaats):
{ "searches": ["fiets"] }
Variant — three keywords fanned out across all three platforms, with a higher cap:
{"searches": ["racefiets", "veldrijfiets", "stadsfiets"],"platform": "all","maxItems": 300,"maxPagesPerSearch": 6}
Output fields (default dataset): platform, itemId, url, title, priceEur, priceType, priceTypeLabel, isAuction, isFree, description, descriptionTruncated, city, country, latitude, longitude, distanceMeters, categoryId, category, categoryParent, attributes, attributesRaw, images, imageCount, primaryImage, sellerId, sellerName, sellerVerified, sellerType, sellerIsProfessional, sellerProfileUrl, sellerAdsUrl, sellerReviewsUrl, sellerWebsiteUrl, sellerActiveSince, sellerContactOptions, sellerCity, sellerCountry, postedLabel, postedAt, priorityProduct, traits, verticals, viewCount, favoriteCount, adType, reserved.
Behaviors an agent should know:
searchesandstartUrlsare the two drivers.searchesruns one backend query per keyword;startUrlsaccepts search pages, category pages or single listing URLs. If both are given, both are processed.platformcontrols the host:marktplaats(default),2dehands,2ememain, orallto fan one keyword out to all three (rows are taggedplatformand de-duplicated onplatform + itemId).includeDetailsdefaults totrueand is what supplies the full description, the exactpostedAtand the seller lead fields; setting it tofalseleaves you with the search endpoint's ~200-character description and apostedLabelonly.maxPagesPerSearch(default 3) caps backend pages per keyword at 50 listings each; the backend itself allows roughly 100 pages per query before it runs dry.sellerWebsiteUrlis a/externalUrl/redirect/…path (a working lead link), not a bare domain, and only exists when the seller published a website.postedAtis only populated whenincludeDetailsistrue.- Free-plan runs are capped at 10 items and 1 result page per search.
Billing: pay-per-event — one result event per listing returned ($1 / 1,000). Budget by listing count, not by page count, since backend pages that yield no listing bill nothing.
Legal & Compliance Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Marktplaats, eBay Kleinanzeigen or their operators. It reads only publicly visible search results and listing pages — no login, no account and no access to private or member-only data. Seller names, profile URLs, contact options and own-website links are already displayed publicly on each listing page. You are responsible for your own compliance with Marktplaats's Terms of Service and with applicable data-protection law (including the GDPR for Dutch and Belgian personal data) — in particular before using seller contact details for unsolicited commercial outreach.
SEO Keywords
marktplaats scraper, dutch classifieds data, belgian classifieds data, marktplaats api alternative, marktplaats data export, 2dehands scraper, 2ememain scraper, seller lead generation netherlands, classifieds price monitoring, marktplaats search api, second hand marketplace data, resale market research, marktplaats listings export, dutch ecommerce data, belgian ecommerce data, used car data netherlands, product price tracking netherlands, classifieds scraper netherlands, marktplaats seller data, online marketplace scraper, nl classifieds api, be classifieds data, marketplace lead generation