Marktplaats.nl Auto Scraper
Pricing
from $0.99 / 1,000 results
Marktplaats.nl Auto Scraper
Scrapes used car listings from Marktplaats.nl. No proxy required.
Pricing
from $0.99 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share

Scrapes used car listings from Marktplaats.nl. No proxy required.
Method: Marktplaats internal JSON API (/lrp/api/search) — pure JSON responses, no HTML parsing. All filters are server-side; only matching listings are returned.
Features
- All filters are server-side — brand, keyword, fuel, transmission, body type, condition, price, year, mileage, postcode + radius
- Sort by price (low→high or high→low), newest first, or relevance
- Optional detail-page scraping (
fetchDetails) for 40+ extra fields: color, license plate, APK date, engine specs, dimensions, monthly cost estimates, seller info, and more - 94 brands supported with direct category lookup
- Automatic pagination up to 200 pages (~6,000 listings per run)
- No proxy required — works on datacenter IPs
Input
Search & Filters
All filters are processed server-side — only listings matching every filter you set are returned.
| Field | Type | Description | Example |
|---|---|---|---|
brand | String | Car brand (94 brands supported, lowercase) | volkswagen, bmw, mercedes-benz, tesla |
searchKeyword | String | Free-text search — combined with other filters | golf gti, elektrisch nap, youngtimer |
fuel | Enum | Fuel type — see values below | elektrisch |
transmission | Enum | Gearbox type | automaat, handgeschakeld |
bodyType | Enum | Body style — see values below | suv, stationwagon |
condition | Enum | Condition filter | gebruikt, nieuw |
minPrice | Integer | Minimum price in EUR | 5000 |
maxPrice | Integer | Maximum price in EUR | 25000 |
minYear | Integer | Earliest construction year | 2018 |
maxYear | Integer | Latest construction year | 2023 |
minMileage | Integer | Minimum mileage in km | 0 |
maxMileage | Integer | Maximum mileage in km | 100000 |
postcode | String | Dutch postcode — sorts by proximity, or limits by radius when combined with distanceMeters | 1012AB |
distanceMeters | Integer | Search radius from postcode in meters | 25000 |
sortBy | Enum | SORT_INDEX (newest first, default), PRICE, OPTIMIZED (relevance) | PRICE |
sortOrder | Enum | DECREASING (default) or INCREASING | INCREASING |
Fuel type values: benzine, diesel, elektrisch, hybride, hybride-benzine, hybride-diesel, lpg, cng, waterstof, overige
Body type values: hatchback, sedan, stationwagon, suv, mpv, cabriolet, coupe, overige
Postcode behaviour:
postcodealone sorts results by distance to that postcode (national scope). AdddistanceMetersto restrict results to a radius.
Detail Pages
| Field | Type | Description | Default |
|---|---|---|---|
fetchDetails | Boolean | Fetch each listing's detail page for 40+ extra fields | false |
When fetchDetails: true, each listing gets one extra request to its detail page. This populates fields that Marktplaats does not include in search card data — color, engine specs, dimensions, cost estimates, and more. See the full output field list below.
Note:
fetchDetailsroughly doubles run time — one extra request per listing.
Paging & Limits
| Field | Type | Description | Default |
|---|---|---|---|
maxItems | Integer | Max total listings to save | 100 |
maxPages | Integer | Max pages to fetch — 30 listings per page | 10 |
startUrls | Array | Custom Marktplaats search URLs (advanced — see note below) | — |
startUrlsnote: ProvidingstartUrlswithout any filter fields activates legacy HTML mode, which scrapes__NEXT_DATA__JSON from the page. This exists for backward compatibility with custom Marktplaats search URLs. When any filter field is also set, the JSON API is used andstartUrlsis ignored.
Examples
Cheapest electric cars, low to high
{"fuel": "elektrisch","sortBy": "PRICE","sortOrder": "INCREASING","maxItems": 100}
BMW SUVs €15k–€45k, automatic, max 100k km
{"brand": "bmw","bodyType": "suv","transmission": "automaat","minPrice": 15000,"maxPrice": 45000,"maxMileage": 100000,"maxItems": 100}
VW Golf GTI 2018–2023, near Amsterdam, 50 km radius
{"brand": "volkswagen","searchKeyword": "golf gti","minYear": 2018,"maxYear": 2023,"postcode": "1012AB","distanceMeters": 50000,"maxItems": 50}
Budget hatchbacks under €5k — with full detail data
{"bodyType": "hatchback","maxPrice": 5000,"maxMileage": 150000,"fetchDetails": true,"maxItems": 100}
Diesel automatic estate cars, newest listings first
{"fuel": "diesel","transmission": "automaat","bodyType": "stationwagon","sortBy": "SORT_INDEX","maxItems": 200}
Output Fields
Core (all runs)
| Field | Type | Description |
|---|---|---|
itemId | String | Listing ID (e.g. m2396163685) |
url | String | Full URL to the listing detail page |
title | String | Full listing title |
shortTitle | String | Short car name (brand + model) |
displayTitle | String | Variant/trim line from the listing card |
description | String | Listing description (card-length excerpt) |
price | Number | Price in EUR (null if not shown) |
priceCents | Number | Price in euro cents |
priceType | String | FIXED, MIN_BID, or LEASE |
date | String | Listing date string (Vandaag, Gisteren, or a date) |
priorityProduct | String | Ad promotion type: DAGTOPPER, NONE, etc. |
categoryId | Number | Marktplaats category ID |
napAvailable | Boolean | NAP mileage history check available |
videoOnVip | Boolean | Listing has a video |
reserved | Boolean | Listing is marked reserved |
Location
| Field | Type | Description |
|---|---|---|
city | String | Seller's city |
latitude | Number | Approximate latitude |
longitude | Number | Approximate longitude |
abroad | Boolean | Listing is from abroad |
distanceMeters | Number | Distance from search postcode in meters (null if no postcode set) |
Seller
| Field | Type | Description |
|---|---|---|
sellerId | Number | Seller account ID |
sellerName | String | Seller display name |
sellerLogoUrl | String | Seller logo URL (dealers only, else null) |
Car specs (search card level)
These fields come from the search API and are present on most listings. Some (marked †) are only populated on listings where Marktplaats includes them in the card-level data — use fetchDetails to guarantee them.
| Field | Type | Description |
|---|---|---|
brand | String | Car brand (lowercase, e.g. volkswagen) |
model | String | Car model (e.g. Golf) |
constructionYear | Number | Year of manufacture |
mileage | Number | Mileage in km |
mileageUnit | String | Always km |
fuel | String | Fuel type (e.g. Benzine, Elektrisch) |
transmission | String | Handgeschakeld or Automaat |
body | String | Body style (e.g. Hatchback, SUV of Terreinwagen) |
energyLabel | String | Energy label A–G |
color | String† | Exterior colour (e.g. Zwart, Zilver of Grijs) |
interiorColor | String† | Interior colour |
upholstery | String† | Upholstery type (e.g. Leder, Stof) |
driveTrain | String† | Drive type (e.g. Voorwielaandrijving, 4WD permanent) |
engineHorsepower | Number† | Engine power in pk |
engineDisplacement | String† | Engine displacement in litres (e.g. 3.0) |
numberOfCylinders | String† | Number of cylinders (e.g. 6) |
euronorm | String† | Emission standard (e.g. Euro 6) |
condition | String† | Gebruikt or Nieuw |
imported | String† | Import status (e.g. Origineel Nederlands) |
fuelConsumption | String† | Fuel economy in km/l |
roadTax | String† | Monthly road tax (e.g. € 298,67) |
emptyWeight | String† | Empty weight in kg |
range | String† | Electric range in km |
bovagWarranty | String† | BOVAG warranty description |
towingWeightNoBrakes | String† | Max towing weight without brakes in kg |
serviceHistory | String† | Service history type (e.g. Dealer onderhouden, Onderhoudsboekje) |
options | Array | List of car options/features |
highlights | Array | Trust indicator keys (e.g. napCheck, BookFromDealer) |
images | Array | All image URLs (large format) |
thumbnailUrl | String | First image URL |
With fetchDetails: true
All fields below are populated from the detail page. They also backfill any † fields above that were null from the search card.
Identity & history
| Field | Type | Description |
|---|---|---|
licensePlate | String | Dutch license plate number |
trim | String | Trim/variant level (e.g. 350 BlueTEC 4-Matic) |
dateApk | String | APK (roadworthiness) expiry date |
totalNumberOfOwners | Number | Total number of previous owners |
firstRecordInNl | String | Date first registered in the Netherlands |
newCarPrice | String | Original new-car list price |
lastOwnerType | String | Last owner type: Particulier, Autobedrijf, etc. |
ownerSince | String | Date current seller has owned the car |
Engine & performance
| Field | Type | Description |
|---|---|---|
powerHp | Number | Engine power in pk (same value as engineHorsepower) |
cylinderCapacity | String | Engine displacement in litres (e.g. 3.0) |
numberOfCylinders | String | Number of cylinders |
torque | String | Engine torque (e.g. 620 nm / 1.600 tpm) |
isTurbo | Boolean | Turbocharged engine |
topSpeed | String | Top speed in km/h |
acceleration | String | 0–100 km/h time in seconds |
batteryCapacity | String | Battery capacity in kWh (EVs and plug-in hybrids) |
Eco
| Field | Type | Description |
|---|---|---|
co2emission | String | CO₂ emission in g/km |
Dimensions
| Field | Type | Description |
|---|---|---|
lengthInMeters | String | Vehicle length in metres |
widthInMeters | String | Vehicle width in metres |
heightInMeters | String | Vehicle height in metres |
wheelBase | String | Wheelbase in metres |
fuelTankCapacity | String | Fuel tank capacity in litres |
bootVolumeMinMax | String | Boot volume range in litres (e.g. 620 - 2300) |
maxWeightWithBrakes | String | Max towing weight with brakes in kg |
Brakes
| Field | Type | Description |
|---|---|---|
frontBrakes | String | Front brake type (e.g. Schijfrem) |
rearBrakes | String | Rear brake type (e.g. Trommelrem) |
Monthly cost estimates
Marktplaats provides these cost estimates based on mileage and vehicle data. All values are formatted strings with € prefix.
| Field | Type | Description |
|---|---|---|
estimatedFuelPerMonth | String | Estimated monthly fuel cost |
estimatedRepairPerMonth | String | Estimated monthly maintenance cost |
estimatedTiresPerMonth | String | Estimated monthly tyre cost |
estimatedTotalPerMonth | String | Estimated total monthly ownership cost |
estimatedCostPerKm | String | Estimated cost per kilometre |
estimatedCostPerYear | String | Estimated total annual cost |
Engagement
| Field | Type | Description |
|---|---|---|
listedSince | String | ISO 8601 timestamp when listing was first published |
viewCount | Number | Number of times the listing has been viewed |
favoritedCount | Number | Number of times saved to favourites |
Trust indicators
| Field | Type | Description |
|---|---|---|
napChecked | Boolean | NAP mileage check passed |
apkValid | Boolean | APK valid indicator shown |
maintenanceBooklet | Boolean | Maintenance booklet present |
firstOwner | Boolean | Listed as first owner |
Seller detail
| Field | Type | Description |
|---|---|---|
sellerType | String | TRADER (dealer) or CONSUMER (private seller) |
sellerPhone | String | Phone number (null for private sellers or if hidden) |
sellerYears | Number | Years active on Marktplaats |
sellerWebsite | String | Seller website display URL |
sellerPageUrl | String | Full URL to seller's Marktplaats profile page |
Technical Notes
- Uses Marktplaats's internal JSON search API (
/lrp/api/search) — the same endpoint the website calls itself - All filters and range queries are evaluated server-side; only matching listings come back
- No proxy required — the API responds normally on datacenter IPs
- Many car spec fields (color, engine specs, roadTax, etc.) are not included in search card data by Marktplaats. They are only available on the detail page. Use
fetchDetails: trueto populate them reliably - The
†markers in the table above indicate fields that are sometimes present in search results but inconsistently —fetchDetailsguarantees them conditionis oftennullon search card results regardless of filter; it is reliably present withfetchDetails: truepostcodewithoutdistanceMetersreturns national results sorted by proximity to the postcodestartUrls(legacy HTML mode) strips#fragmentportions before fetching- Marktplaats caps result sets at approximately 200 pages (~6,000 listings) per query
Changelog
v3.0.2
- Fixed color, interiorColor, upholstery, driveTrain, engineHorsepower, engineDisplacement, numberOfCylinders, euronorm, condition, fuelConsumption, roadTax, emptyWeight, towingWeightNoBrakes, serviceHistory, bovagWarranty — these fields were always null because they are not in Marktplaats search card data. They are now populated from the detail page when
fetchDetails: true - Fixed
towingWeightNoBrakesmapping: VDP key ismaxWeightWithoutBrakes, nottowingWeightNoBrakes - Fixed
numberOfCylinders: search API returns"4 cilinders"— now strips the text suffix to return just the number - Added 21 new
fetchDetailsfields:co2emission,cylinderCapacity,torque,isTurbo,lastOwnerType,ownerSince,lengthInMeters,widthInMeters,heightInMeters,wheelBase,fuelTankCapacity,bootVolumeMinMax,maxWeightWithBrakes,frontBrakes,rearBrakes,estimatedFuelPerMonth,estimatedRepairPerMonth,estimatedTiresPerMonth,estimatedTotalPerMonth,estimatedCostPerKm,estimatedCostPerYear
v3.0.1
- Fixed
sellerPhonereturning""instead ofnullfor private sellers - Added
distanceMetersoutput field (distance from postcode per listing)
v3.0.0
- Switched from HTML/
__NEXT_DATA__parsing to Marktplaats internal JSON API - All range filters (price, year, mileage) are now true server-side API params
- Added
sortBy/sortOrder: sort by price, date, or relevance - Added
postcode+distanceMeters: geo radius search - Added
fetchDetails: optional detail-page scrape for extra fields - Brand filter now resolves to a direct category ID (94 brands mapped)
- Backward-compatible
startUrlslegacy mode preserved
v2.0.0
- Added URL builder for brand, model, fuel, transmission, body type, condition, and keyword
- Added post-scrape range filters for price, year, and mileage
v1.0.0
- Initial release: JSON-HTML extraction via
__NEXT_DATA__
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl