Marktplaats API & Scraper
The Marktplaats API returns listings from the leading Dutch and Belgian classifieds marketplace as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary search endpoint returns listings with price, condition, location, seller and images, plus facets and pagination, and you can pull a listing, the category tree and a seller's listings. It is built for price intelligence, resale tools and market analytics that need Benelux classifieds data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.
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.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/marktplaats/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone",
"site": "nl"
}
}{
"ok": true,
"meta": {
"api": "marktplaats",
"endpoint": "search",
"mode": "live",
"latency_ms": 2367.6,
"record_count": 30,
"bytes": 174195,
"cache_hit": false,
"method": "lrp_json_api",
"site": "nl",
"url": "https://www.marktplaats.nl/lrp/api/search",
"offset": 0,
"has_more": true,
"limit": 30,
"total": 40693,
"next_offset": 30
},
"data": {
"listings": [
{
"item_id": "m[redacted-phone]",
"title": "Iphone 16 nieuw",
"description": "Ligt in de kast ivm zakelijk nieuw abonnement en nieuw toestel. Toestel wordt niet naar het buitenland verzonden en voorkeur gaat naar ophalen zodat u hem ook kunt testen.",
"category_id": 1953,
"condition": "like_new",
"condition_original": "Zo goed als nieuw",
"delivery": "Ophalen of Verzenden",
"shipping_available": true,
"reserved": false,
"attributes": [
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"extended_attributes": [
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"verticals": [
"mobile_phones_apple_iphone",
"telecommunication",
"barcode-supported"
],
"location": {
"city": "Noordwolde",
"country": "Nederland",
"postcode": null,
"distance_meters": -1000,
"latitude": 52.8772899437,
"longitude": 6.1501214113093
},
"date": "Vandaag",
"images": [
"https://images.marktplaats.com/api/v1/hz-mp-pro-listing/images/5322a883-10a1-42f5-ab70-7fe39a54750d?rule=ecg_mp_eps$_82.jpg"
],
"image_count": 1,
"seller": {
"seller_id": 3676621,
"seller_name": "j&l",
"seller_type": "private",
"is_verified": false,
"show_soi_url": true,
"show_website_url": false
},
"other_seller_listings": null,
"vip_url": "/v/telecommunicatie/mobiele-telefoons-apple-iphone/m[redacted-phone]-iphone-16-nieuw",
"url": "https://www.marktplaats.nl/v/telecommunicatie/mobiele-telefoons-apple-iphone/m[redacted-phone]-iphone-16-nieuw",
"price_cents": 0,
"price": 0,
"price_type": "FAST_BID",
"price_label": null,
"currency": "EUR"
},
{
"item_id": "m[redacted-phone]",
"title": "Apple iPhone 13 Zwart 128GB - Zo goed als nieuw",
"description": "Te koop: een zo goed als nieuwe apple iphone 13 in het zwart met 128gb opslagcapaciteit. De telefoon verkeert in uitstekende staat en heeft een batterijconditie van 100%. Geheel schadevrij.",
"category_id": 1953,
"condition": "like_new",
"condition_original": "Zo goed als nieuw",
"delivery": "Ophalen of Verzenden",
"shipping_available": true,
"reserved": false,
"attributes": [
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"extended_attributes": [
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"verticals": [
"mobile_phones_apple_iphone",
"telecommunication",
"barcode-supported"
],
"location": {
"city": "Purmerend",
"country": "Nederland",
"postcode": null,
"distance_meters": -1000,
"latitude": 52.504258982909,
"longitude": 4.9375732044233
},
"date": "Vandaag",
"images": [
"https://images.marktplaats.com/api/v1/hz-mp-pro-listing/images/4a459ee3-413d-4fb1-b67e-77d85b1b1127?rule=ecg_mp_eps$_82.jpg"
],
"image_count": 1,
"seller": {
"seller_id": 725332,
"seller_name": "AK",
"seller_type": "private",
"is_verified": false,
"show_soi_url": true,
"show_website_url": false
},
"other_seller_listings": null,
"vip_url": "/v/telecommunicatie/mobiele-telefoons-apple-iphone/m[redacted-phone]-apple-iphone-13-zwart-128gb-zo-goed-als-nieuw",
"url": "https://www.marktplaats.nl/v/telecommunicatie/mobiele-telefoons-apple-iphone/m[redacted-phone]-apple-iphone-13-zwart-128gb-zo-goed-als-nieuw",
"price_cents": 25000,
"price": 250,
"price_type": "MIN_BID",
"price_label": null,
"currency": "EUR"
},
{
"item_id": "a[redacted-phone]",
"title": "iPhone 13 Pro 128GB | 4 Gratis Accessoires – Accu tot 100%",
"description": "Ben je op zoek naar een betrouwbare iphone voor de beste prijs? Bij mobisite.nl krijg je altijd zekerheid, kwaliteit én extra voordelen: nu tijdelijk 4 gratis accessoires (t.w.v. €45): hoesje, sc",
"category_id": 1953,
"condition": "like_new",
"condition_original": "Zo goed als nieuw",
"delivery": "Verzenden",
"shipping_available": true,
"reserved": false,
"attributes": [
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"extended_attributes": [
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"value": "[trimmed-depth]",
"values": "[trimmed-depth]"
}
],
"verticals": [
"mobile_phones_apple_iphone",
"telecommunication",
"barcode-supported"
],
"location": {
"city": null,
"country": null,
"postcode": null,
"distance_meters": -1000,
"latitude": 0,
"longitude": 0
},
"date": "Vandaag",
"images": [
"https://admarkt-cdn.marktplaats.com/api/v1/icas-mp-pro-admarkt/images/dc/dca7457a-6a98-4156-a846-6c335cf09754?rule=eps_82.JPG",
"https://admarkt-cdn.marktplaats.com/api/v1/icas-mp-pro-admarkt/images/ca/ca3bc56b-b140-4fd2-9495-d2c10d7f29e2?rule=eps_82.JPG",
"https://admarkt-cdn.marktplaats.com/api/v1/icas-mp-pro-admarkt/images/54/54b3d56e-4e03-416b-9878-e66c2c347160?rule=eps_82.JPG"
],
"image_count": 3,
"seller": {
"seller_id": 57429132,
"seller_name": "Mobisite.nl",
"seller_type": "business",
"is_verified": false,
"show_soi_url": true,
"show_website_url": true
},
"other_seller_listings": null,
"vip_url": "/v/telecommunicatie/mobiele-telefoons-apple-iphone/a[redacted-phone]-iphone-13-pro-128gb-4-gratis-accessoires-accu-tot-100",
"url": "https://www.marktplaats.nl/v/telecommunicatie/mobiele-telefoons-apple-iphone/a[redacted-phone]-iphone-13-pro-128gb-4-gratis-accessoires-accu-tot-100",
"price_cents": 34900,
"price": 349,
"price_type": "FIXED",
"price_label": null,
"currency": "EUR"
}
],
"facets": [
{
"key": "PriceCents",
"type": "AttributeRangeFacet"
},
{
"key": "RelevantCategories",
"type": "CategoryTreeFacet",
"categories": [
{
"id": "[trimmed-depth]",
"selected": "[trimmed-depth]",
"isValuableForSeo": "[trimmed-depth]",
"dominant": "[trimmed-depth]",
"label": "[trimmed-depth]",
"key": "[trimmed-depth]",
"parentId": "[trimmed-depth]",
"parentKey": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"histogramCount": "[trimmed-depth]",
"selected": "[trimmed-depth]",
"isValuableForSeo": "[trimmed-depth]",
"dominant": "[trimmed-depth]",
"label": "[trimmed-depth]",
"key": "[trimmed-depth]",
"parentId": "[trimmed-depth]",
"parentKey": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"histogramCount": "[trimmed-depth]",
"selected": "[trimmed-depth]",
"isValuableForSeo": "[trimmed-depth]",
"dominant": "[trimmed-depth]",
"label": "[trimmed-depth]",
"key": "[trimmed-depth]",
"parentId": "[trimmed-depth]",
"parentKey": "[trimmed-depth]"
}
]
},
{
"id": 2947,
"key": "buyitnow",
"type": "AttributeGroupFacet",
"label": "Direct Kopen",
"attributeGroup": [
{
"attributeValueKey": "[trimmed-depth]",
"attributeValueId": "[trimmed-depth]",
"attributeValueLabel": "[trimmed-depth]",
"histogramCount": "[trimmed-depth]",
"selected": "[trimmed-depth]",
"isValuableForSeo": "[trimmed-depth]"
}
],
"singleSelect": false,
"categoryId": 0
}
],
"offset": 0,
"has_more": true,
"limit": 30,
"total": 40693,
"next_offset": 30
}
}What the Marktplaats API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Keyword or category search with filters, sort, location, offset pagination (limit=30). | Price-intelligence teams call search to get keyword or category search with filters, sort, location, offset pagination (limit=30).. | query, site, l1_category_id, l2_category_id, sort_by, ... |
| listing | Listing detail by item_id and/or vip_url; enriched with full product details (price, availability, specs). | Classifieds aggregators call listing to get listing detail by item_id and/or vip_url; enriched with full product details (price, availabi…. | item_id, vip_url, site |
| categories | Category tree from search facets, or browse a category (l1/l2) with listings. | Resale and arbitrage tools call categories to get category tree from search facets, or browse a category (l1/l2) with listings.. | query, site, l1_category_id, l2_category_id, offset |
| seller_listings | Active listings for a seller; offset pagination via seller-name LRP search (name auto-resolved from profile when omitted). | Lead-generation teams call seller_listings to get active listings for a seller; offset pagination via seller-name LRP search (name auto-resolve…. | seller_id, seller_name, site, offset |
Call search from your stack
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"])const res = await fetch("https://api.reefapi.com/marktplaats/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone",
"site": "nl"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.marktplaats.search with {"query":"iphone","site":"nl"}.Who uses this API and why
- 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.
Questions developers ask before integrating
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.