Marktplaats Scraper
Pricing
from $0.50 / 1,000 run start fees
Marktplaats Scraper
Search Marktplaats and get classified ads as rows: title, price and what that price means (fixed, minimum bid, auction, swap, on request), city with latitude and longitude, seller id, name and verification, condition, delivery and promotion flags.
Pricing
from $0.50 / 1,000 run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 hours ago
Last modified
Categories
Share
A Marktplaats scraper that returns classified ads with the price, what that price actually means, the seller, and the exact coordinates of the ad. No login, no API key, no browser.
Marktplaats is the dominant classifieds site in the Netherlands: 245.000 ads under "fiets" and 259.000 under cars as this was written. Nothing on the Apify Store covers it.
What you get
- A price you can trust, because
price_typetells you what it is. Marktplaats mixes fixed prices, minimum bids, auctions, swaps, free items and price-on-request in the same result list. Treating them all as an asking price is the classic error, and it turns a bidding lot into a bargain that is not there - Latitude and longitude on every ad, which the rendered card never shows. Distance filtering and map work need no geocoding step
- Seller id, name and verification status, so one seller's whole inventory can be grouped and a trader can be told apart from a private ad
- Promotion flags: whether the seller paid to push the ad, and which promotion they bought
- Condition and delivery as their own fields, plus every other attribute the ad carries
- Real pagination. The site reports how many pages it allows and the walk follows the path form that actually moves
- Charged per ad you receive, plus a flat $0,002 start fee. No per-compute-unit charges
Why scrape Marktplaats
Second-hand pricing is the least documented price data there is. New goods have RRPs, comparison sites and feeds; used goods have whatever someone is asking today in one town. For anyone in recommerce, refurbished electronics, bicycles, cars or furniture, Marktplaats is where the Dutch market actually clears.
There is no public API. Every result page carries its ads as JSON inside the page for the browser to render, and that payload is richer than what gets drawn: coordinates, seller ids, promotion types and the price semantics all live there and never reach the card.
The price semantics are the part that decides whether your dataset is usable. An ad at "€ 160" might be a fixed price, the opening bid of an auction, or a placeholder on an ad whose real price is "neem contact op". This actor reports the amount only where there is one, and names the type in every case.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
query | string | yes | fiets | What to search for. Dutch terms work best |
url | string | no | – | A marktplaats.nl search or category URL to read instead. Takes precedence |
sort | select | no | relevance | Relevance, newest, price ascending or descending |
price_min / price_max | integer | no | – | Price bounds in euros |
limit | integer | no | 60 | Ads to return, 1 to 900 |
retries | integer | no | 3 | Retry attempts per page |
Output
{"position": 1,"item_id": "m2437697090","url": "https://www.marktplaats.nl/v/a2437697090","title": "damesfiets","price": 160.0,"price_cents": 16000,"price_type": "minimum bid","price_type_code": "MIN_BID","currency": "EUR","city": "Rosmalen","country": "NL","latitude": 51.720768247421,"longitude": 5.3649127431692,"posted_label": "Vandaag","seller_id": 4063331,"seller_name": "niste065","seller_verified": false,"condition": "Gebruikt","delivery": "Ophalen","is_promoted": true,"promotion_type": "DAGTOPPER","is_reserved": false,"images_count": 3}
Use cases
Second-hand price research. Run a model name, filter to price_type: "fixed price", and the distribution is the real Dutch resale market for that item. Excluding minimum bids and auctions matters more than it sounds: they cluster low and drag any average down by a third.
Recommerce sourcing. Sort by price ascending with a floor, and check condition and delivery. Because every ad carries coordinates, you can restrict to what is collectable within an hour's drive before you look at a single listing by hand.
Watching a trader. seller_id groups a seller's entire inventory and is_business_seller separates traders from private sellers. Schedule a run, store ids, and you see what they take in, what sells, and what has been sitting.
Market supply monitoring. totalResultCount on every run tells you how many ads exist for a query. Tracked over weeks, that number is a supply curve for a category, and it moves before prices do.
How it compares
| this actor | apify/e-commerce-scraping-tool | |
|---|---|---|
| Per 1.000 ads | $1,80 | $6,00 |
| Covers Marktplaats | yes | generic, needs configuring |
| Price type semantics | 7 types named | no |
| Coordinates per ad | yes | no |
| Seller id and verification | yes | no |
| Promotion flags | yes | no |
Honest about the other side: apify/e-commerce-scraping-tool has 575 monthly users and points at almost any shop. It is a breadth tool. This one knows one marketplace's data model.
Pricing
Two events. A flat run_start of $0,002 covers the run, and listing costs $0,0018 per ad returned, which is $1,80 per 1.000. All pricing is pay-per-event, so beyond the start fee you only pay for ads you actually receive. No per-compute-unit charges.
Limits and gotchas
- Pagination is a path segment, not a query parameter.
?page=2returns HTTP 200 with page one's ads. This actor uses/p/2/, which is the form that moves. Worth knowing if you build your own URLs to pass intourl. - Not every ad has a price. Price-on-request, swap-only and see-description ads carry no number by design.
priceis null andprice_typesays which. The run summary counts them. - Coordinates are approximate for private sellers: Marktplaats reports a point near the ad rather than an address.
descriptionis the listing excerpt, not the full ad text. Opening each ad would be a second fetch per row and is not part of this actor.- Promoted ads sit at the top of most result sets. Filter on
is_promotedbefore computing market statistics. - 900 ads per run across 30 pages, and the site caps how deep any single search goes; the summary reports its own ceiling.
FAQ
Can I scrape Marktplaats without an API key? Yes. Every result page carries its ads as JSON for the browser to render, and that is what this actor reads. There is no credential in the input.
Why do some ads have no price?
Because the seller did not set one. Marktplaats supports price-on-request, swap-only and see-description ads. Those return a null price and a price_type saying so, rather than a misleading zero.
Does it return the location of an ad? Yes, city plus latitude and longitude on every row, straight from the payload.
Can I scrape a category instead of a search?
Yes. Paste any marktplaats.nl listing URL into url, including one with filters already applied.
How do I track one seller?
Every row carries seller_id. Run a broad search for their category, group by that id, and repeat on a schedule.
Related Actors
- AutoScout24 Scraper — car listings across nine European markets
- Price Scraper — price and availability from any product URL
- Bol.com Price Scraper — Dutch marketplace offers by EAN