Marktplaats APImarktplaats.nl ↗
Search Marktplaats.nl classifieds and fetch full listing details — photos, price, seller, location, and timestamps — via two structured JSON endpoints.
What is the Marktplaats API?
The Marktplaats.nl API exposes two endpoints that cover the Netherlands' largest classifieds platform: search_listings returns up to 100 results per page sorted newest-first with price and category filters, and get_listing returns a complete listing record including full-resolution photos, exact posting timestamp, seller ID, and shipping options. Together they surface over 15 structured fields per listing.
curl -X GET 'https://api.parse.bot/scraper/d680dd13-1f6a-40a5-bc7c-e2fe573962bf/search_listings?query=marvel+psa&max_price=300&min_price=100&category_id=820' \ -H 'X-API-Key: $PARSE_API_KEY'
Searches Marktplaats listings for a free-text query in title and description, sorted the same way as the site's 'Datum (nieuwste eerst)' option (newest first). Returns one page of up to 100 listings (the site's maximum page size); `page` selects the page (1-based, default 1) and `max_page` is the last page the site allows for this search, so `has_more` is true while page < max_page. `listings` is the site's own ordering: the site places Dagtopper promotions (is_dagtopper / promotion_type 'DAGTOPPER') ahead of regular listings, which breaks strict newest-first order, so each row carries is_promoted. For Dagtopper rows the site's search date reflects the promotion bump, so posted_date can be later than the original posting time that get_listing reports. Commercial Admarkt 'Topadvertentie' ads that the site shows above the results are returned separately in `top_ads` (their item_id starts with 'a' and they are not accepted by get_listing). Per-listing fields in search are snippets: description is the site's ~200-character snippet (description_is_full=false), photos contains only the main photo at full resolution, posted_date is the date only (posted_at is null) and is_business_seller is null because the search results do not carry it; get_listing fills all of these. The search results also do not carry bid data, so highest_bid and bid_count are always null in search rows and no bids list is included; get_listing returns the bids. price is euros as a number and is null when the listing has no asking price (bidding, negotiable, free, swap, see description); price_type is one of fixed, bidding, bidding_from, negotiable, free, swap, see_description. shipping is pickup, shipping, both, or null when unknown. A search with no matches returns an empty listings array with total_results 0. An unknown category id is rejected by the site and reported as an input error.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number; each page holds up to 100 listings. Pages beyond max_page return an empty list. |
| queryrequired | string | Free-text search terms, e.g. 'marvel psa'. |
| max_price | number | Maximum asking price in euros (inclusive). Omitted = no upper bound. |
| min_price | number | Minimum asking price in euros (inclusive). Omitted = no lower bound. |
| category_id | integer | Top-level Marktplaats category id to restrict the search to (the site's own numeric category id, e.g. 820 for Telecommunicatie). Omitted = all categories. |
| subcategory_id | integer | Second-level category id within category_id (the site's numeric id, e.g. 1959 for 'Mobiele telefoons | Toebehoren en Onderdelen'). Only honored together with category_id; without it the request is rejected as an input error. |
{
"type": "object",
"fields": {
"page": "page number returned",
"query": "search terms as interpreted by the site",
"top_ads": "array of commercial Admarkt 'Topadvertentie' ads shown above the results, same shape as listings",
"has_more": "true when a next page exists",
"listings": "array of listing summaries in the site's order (item_id, url, title, description snippet, description_is_full, price, price_type, photos, posted_date, posted_at, seller_id, seller_name, is_business_seller, city, shipping, category_id, is_reserved, highest_bid, bid_count, is_promoted, promotion_type, is_dagtopper, is_admarkt)",
"max_page": "last page number the site allows for this search",
"page_size": "maximum listings per page (100)",
"total_results": "total number of matching listings reported by the site",
"listings[].bid_count": "always null in search: the search results do not expose bids (see get_listing)",
"listings[].highest_bid": "always null in search: the search results do not expose bids (see get_listing)"
},
"sample": {
"data": {
"page": 1,
"query": "marvel psa",
"top_ads": [
{
"url": "https://www.marktplaats.nl/v/hobby-en-vrije-tijd/verzamelkaartspellen-overige/a1528944510-pre-order-evoretro-bumper-for-psa-graded-card-slab-grad",
"city": null,
"price": 6.99,
"title": "(Pre-order) Evoretro Bumper for PSA Graded Card Slab Grad...",
"photos": [
"https://admarkt-cdn.marktplaats.com/api/v1/icas-mp-pro-admarkt/images/a8/a86eb8cd-ca7f-4e52-8419-868de98fe83a?rule=eps_87.JPG"
],
"item_id": "a1528944510",
"shipping": "shipping",
"posted_at": null,
"seller_id": 23005459,
"is_admarkt": true,
"price_type": "fixed",
"category_id": 1976,
"description": "(pre-order) evoretro bumper for psa graded card slab gradient blue-pink glitter dit artikel is een pre-order.",
"is_promoted": true,
"is_reserved": false,
"posted_date": "2026-09-30",
"seller_name": "TBHstore.nl",
"is_dagtopper": false,
"promotion_type": "TOPADVERTENTIE",
"is_business_seller": null,
"description_is_full": false
}
],
"has_more": false,
"listings": [
{
"url": "https://www.marktplaats.nl/v/hobby-en-vrije-tijd/verzamelkaartspellen-pokemon/m2444335440-groot-aanbod-pokemon-starwars-limited-edition-beeldjes",
"city": "'s-Gravenzande",
"price": null,
"title": "Groot aanbod, pokemon, starwars, limited edition beeldjes",
"photos": [
"https://images.marktplaats.com/api/v1/hz-mp-pro-listing/images/20573c6b-3fa0-4ead-aa55-48bd1f940303"
],
"item_id": "m2444335440",
"shipping": "pickup",
"posted_at": null,
"seller_id": 698170,
"is_admarkt": false,
"price_type": "see_description",
"category_id": 930,
"description": "Groote aan bod. Pokemon. Star wars. Dragonball z. Voetbal. Marvel. Harry potter. Fortnite. Stripboek. Alles staat los op mijn marktplaatsaccount. Voor vragen stuur gerust een berichtje pokemon kaarten",
"is_promoted": true,
"is_reserved": false,
"posted_date": "2026-09-30",
"seller_name": "mewnl",
"is_dagtopper": true,
"promotion_type": "DAGTOPPER",
"is_business_seller": null,
"description_is_full": false
},
{
"url": "https://www.marktplaats.nl/v/hobby-en-vrije-tijd/stickers-en-plaatjes/m2410359498-psa-9-max-verstappen-lewis-hamilton-bottas-topps-now-f1-6",
"city": "Maastricht",
"price": 35,
"title": "PSA 9 Max Verstappen / Lewis Hamilton /Bottas Topps Now F1 6",
"photos": [
"https://images.marktplaats.com/api/v1/hz-mp-pro-listing/images/3adf2bcf-0ebf-4380-a6ae-dcc53c90c4a0"
],
"item_id": "m2410359498",
"shipping": "both",
"posted_at": null,
"seller_id": 27154418,
"is_admarkt": false,
"price_type": "bidding_from",
"category_id": 2757,
"description": "Psa 9 max verstappen / lewis hamilton / valtteri bottas red bull racing honda - mercedes amg petronas topps now f1 6 zie ook mijn andere advertenties!",
"is_promoted": false,
"is_reserved": false,
"posted_date": "2026-06-13",
"seller_name": "Nigel",
"is_dagtopper": false,
"promotion_type": null,
"is_business_seller": null,
"description_is_full": false
}
],
"max_page": 1,
"page_size": 100,
"total_results": 34
},
"status": "success"
}
}About the Marktplaats API
Search Listings
The search_listings endpoint accepts a required query string and returns an array of listing summaries sorted by Datum (nieuwste eerst) — the same newest-first order the site uses by default. Each item in the listings array includes item_id, url, title, a description snippet (description_is_full signals when the full text is already present), price, price_type, and location fields. The response also surfaces top_ads (commercial Topadvertentie placements), total_results, max_page, and a has_more flag for pagination. Use page (1-based) to step through results; pages beyond max_page return an empty list.
Filtering by Price and Category
Price filtering is handled by min_price and max_price, both in euros (inclusive bounds). Category scoping uses category_id for top-level categories (e.g. 820) and subcategory_id for second-level categories (e.g. 1959 for mobile phone accessories). These map directly to Marktplaats's own numeric category IDs, so you can combine them with the price range to run tightly scoped searches without post-filtering client-side.
Full Listing Detail
get_listing takes a single item_id (the m… identifier from search results) and returns the complete record: title, full description, price, city, shipping (one of pickup, shipping, both, or null), seller_id, ad_type, and posted_at as an ISO 8601 timestamp with the Europe/Amsterdam offset. The photos array contains every image at its original full resolution, with the main photo first — useful for visual pipelines or archival workflows that need more than the thumbnail available in search results.
The Marktplaats API is a managed, monitored endpoint for marktplaats.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when marktplaats.nl changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official marktplaats.nl API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price trends for a specific product keyword across newly listed Marktplaats ads using
min_price/max_priceandposted_at. - Build a deal-alert tool that polls
search_listingsnewest-first and triggers a notification when a listing price falls below a threshold. - Aggregate seller inventory by collecting all listings tied to a
seller_idreturned fromget_listing. - Archive full listing details — description, photos, and timestamp — before items are removed from the platform.
- Compare category-level supply by running
search_listingswith differentcategory_idandsubcategory_idcombinations and comparingtotal_results. - Build a resale valuation tool that pulls historical asking prices for a query term across multiple pages using
pageandmax_page. - Extract full-resolution product images via the
photosarray inget_listingfor visual recognition or cataloguing workflows.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Marktplaats.nl have an official developer API?+
What does `get_listing` return that `search_listings` does not?+
get_listing returns the full description text, every photo at full resolution (main photo first), the exact posted_at ISO 8601 timestamp with Amsterdam timezone offset, seller_id, and the shipping option. The search endpoint returns only a description snippet and thumbnail-level data suitable for browsing, not archival or detail views.What is the maximum number of results I can retrieve per search request?+
search_listings call returns up to 100 listings (the page_size field confirms this). Use the page parameter alongside max_page and has_more to paginate. Pages beyond max_page return an empty listings array.Does the API expose seller profile details such as seller name, reviews, or ratings?+
get_listing returns a numeric seller_id but does not include seller name, review count, or rating data. You can fork this API on Parse and revise it to add a seller-profile endpoint that fetches that information.