Pull Marktplaats, 2dehands and 2ememain listings from one API
The Marktplaats API returns listings from the leading Dutch and Belgian classifieds marketplace as clean JSON.
4 active endpoints. Every call is 1 credit.
- POST/marktplaats/v1/search
- POST/marktplaats/v1/listing
- POST/marktplaats/v1/categories
- POST/marktplaats/v1/seller_listings
What Marktplaats endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Marktplaats API
2 of 4 endpoints, ready to run
The listing feed: title, description, price in cents, price type, condition, seller type and the item id.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the Marktplaats API works
Marktplaats is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 185 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Search, then open the row you care about
Detail takes an item id that search just handed you. Deliberately no fixed example id here: Marktplaats listings are deleted, and an id written into a page is dead the day the seller sells.
{"query": "fiets", "site": "nl"}Read item_id from a row. Ids beginning with m are ordinary seller listings; ids beginning with a are paid placements.
{"item_id": <item_id from above>, "site": "nl"}Same site as the search. A removed or expired listing answers NOT_FOUND and says which of the two it was.
Two credits per listing. Both endpoints cost the same, and a listing that has gone is not charged.
curl -X POST https://api.reefapi.com/marktplaats/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","site":"nl"}'{
"ok": true,
"data": { … },
"meta": {
"api": "marktplaats",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What one Marktplaats listing actually contains
These are the fields on a single row of a search response, taken from a live call for "fiets" on 2026-08-26. Prices are the part that trips people up: Marktplaats works in cents.
| Field | Example | What it means |
|---|---|---|
| item_id | m2435268347 | The listing id. Feed it back to the listing action. Ids starting with m are ordinary seller listings; ids starting with a (a1529410452) are PAID placements, not older ads — measured 2026-08-27 across all three sites, every a-prefixed row carried paid-placement markers and no m-prefixed row did. Drop them before averaging prices. |
| price_cents | 12000 | The price in cents. This is Marktplaats' native unit and what price_from / price_to expect. |
| price | 120.0 | The same price in euros, converted for you. |
| price_type | MIN_BID | How to read the price. Measured values: FIXED (asking price), MIN_BID (bieden, price is the floor), FAST_BID, SEE_DESCRIPTION (no usable number). |
| condition | used | Normalized condition. condition_original keeps the Dutch word the site showed (Gebruikt). |
| location | Aerdenhout, 52.3669 / 4.6052 | City, country, postcode and coordinates. distance_meters is -1000 when you did not search by postcode. |
| seller | waardg, private | seller_id, seller_name, seller_type (private or commercial) and is_verified. seller_id drives the seller_listings action. |
| date | Vandaag | The relative date string the site displays, not a timestamp. |
| images | 1 URL | Full-size photo URLs plus image_count. |
| attributes | condition: Gebruikt | The ad's own attribute list, key plus the displayed value, with extended_attributes for delivery and similar. |
meta carries the paging: total (248,116 live ads matched "fiets" on 2026-08-26), limit (30 per page), offset and next_offset. facets returns the site's own filter counts — PriceCents, RelevantCategories, buyitnow, condition, delivery, offeredSince.
Three domains, one inventory and a half
Marktplaats runs three consumer sites, and the honest answer to 'do I need three integrations' is no — but not for the reason the domain names suggest. Measured by running the same query against all three and diffing the ids.
marktplaats.nl for the Netherlands, 2dehands.be and 2ememain.be for Belgium. One site parameter switches between them and the field names are identical everywhere.
The two Belgian sites are one market in two languages. Across two separate queries they returned the same result count and the same leading ids; 2dehands and 2ememain are the Dutch and French faces of the same inventory. The Netherlands is genuinely separate — the overlap with Belgium measured zero.
Euro on all three. This is the one engine in the batch where you can safely compare prices across markets.
Shared across all three sites — the same number means the same category in Amsterdam and in Liege. That is unusual; the country-per-id-space arrangement is the norm elsewhere in this category.
Item ids beginning with a are paid placements, not old listings, and they are returned alongside organic ones rather than filtered out. Drop them before you compute an average, or your price series carries advertising in it.
When a seller writes the price into the description instead of the price field, the row comes back with a price of zero rather than null. It looks like a valid number and it will drag any average you compute downward. Branch on the price type first.
Full pages come back for the first few thousand results, then a half page, and past roughly seven thousand the call fails rather than returning empty. The reported total is much larger than what you can walk to. Split the query to reach the rest.
What people build with Marktplaats
The jobs this data is most often used for.
endpoints
credit per call
Price-intelligence teams call search to track second-hand prices across Marktplaats categories.
Resale tools use seller_listings to monitor a specific seller's active inventory.
Market analysts use facets and categories to size supply for a product in the Benelux market.
What Marktplaats data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 185 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/marktplaats/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","site":"nl"}'import requests
r = requests.post(
"https://api.reefapi.com/marktplaats/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone",
"site": "nl"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Marktplaats.
Get a free key →Does Marktplaats have a public API?▾
There is no open developer API you can sign up for, and the official Marktplaats developer documentation covers the SELLER side — accounts, authentication, managing your own ads — not searching other people's listings. That is the gap this engine fills: it reads the site's own search surface, normalizes the fields and hands you clean JSON, with no OAuth flow and no seller account.
Why does a Marktplaats price come back as 12000 instead of 120?▾
Because Marktplaats stores prices in cents. The response gives you both: price_cents is 12000 and price is 120.0 euros. The price_from and price_to filters take cents too, so 1000 means 10 euros and 5000 means 50 euros. Getting this backwards is the single most common Marktplaats integration bug.
What does price_type MIN_BID mean on a Marktplaats listing?▾
It is a bieden (bidding) ad — the number is the minimum the seller will accept, not a fixed asking price. Of 30 live listings measured on 2026-08-26, 15 were MIN_BID, 11 FIXED, 3 FAST_BID and 1 SEE_DESCRIPTION. If you are building price analytics, filter to FIXED before averaging, or your median will drift low.
Can I search 2dehands and 2ememain with the same call?▾
Yes. The site parameter switches marketplace: nl for Marktplaats in the Netherlands, be_nl for 2dehands and be_fr for 2ememain in Belgium. The fields come back identical, so one integration covers all three Benelux editions.
How many results can I page through?▾
Search returns 30 listings per call. meta.total is the real match count for your query — 248,116 for "fiets" on 2026-08-26 — and meta.next_offset gives you the offset for the next page. Page until has_more is false. A search needs either a query or a category id (l1_category_id or l2_category_id); sending neither returns MISSING_PARAM rather than a silent empty list.
What is the Marktplaats API?▾
Marktplaats API is a ReefAPI endpoint group for marktplaats It returns live JSON through POST requests under /marktplaats/v1.
Is the Marktplaats API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Marktplaats calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Marktplaats login or account?▾
No login to Marktplaats is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Marktplaats data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Marktplaats API use?▾
Marktplaats actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Marktplaats from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call marktplaats actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Marktplaats API a Marktplaats scraper?▾
It is the managed alternative to a DIY Marktplaats scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same marktplaats back as clean JSON.
Why does my Marktplaats scraper keep getting blocked?▾
Most Marktplaats scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.
4 Classifieds & Second-hand APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Marktplaats, you are one call away from the rest of the category — no second contract, no second integration.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.