Marktplaats Netherlands Car Scraper avatar

Marktplaats Netherlands Car Scraper

Pricing

Pay per event

Go to Apify Store
Marktplaats Netherlands Car Scraper

Marktplaats Netherlands Car Scraper

Scrape used-car listings from Marktplaats.nl, the Netherlands' #1 marketplace (auto's) — price, make, model, year, mileage (km), fuel, transmission, body type, drivetrain, seller (dealer/private), city, and photos. Export to JSON or CSV; optionally enrich with the full Dutch description.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share


🎯 What this scrapes

Marktplaats.nl is the Netherlands' largest classifieds marketplace and the default place the Dutch buy and sell used cars (auto's). It publishes no public API. This Actor wraps a polite scrape of the cars category through Marktplaats' own internal search service — paste a filtered Marktplaats search URL or use the default car listing page, and pull every listing's price, make/model, year, mileage (km), fuel, transmission, body type, drivetrain, seller type, city, and photos. Flip on detail enrichment and we fetch each listing's page for the full Dutch description and exterior colour. Built on curl-cffi with rotating browser TLS impersonation, residential proxies, and automatic retry/backoff on blocks.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Used-car price analytics — track asking prices by make/model/year across the Dutch market.
  • Dealer inventory monitoring — diff successive runs to spot new arrivals and price cuts at specific dealers.
  • Market research — aggregate fuel-type and transmission mix to gauge EV/hybrid adoption in the Netherlands.
  • Lead generation — build a directory of car dealers from seller_name + location.
  • Arbitrage / sourcing — find under-priced listings filtered by mileage, year, and body type.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchUrlstringno''Full Marktplaats cars search/results URL with your filters already applied (e.g. https://www.marktplaats.nl/l/auto
maxResultsintegerno50Hard cap on dataset rows. Marktplaats serves 30 listings per page; the Actor walks pages until this cap or the last avai
enrichDetailsbooleannoTrueFetch each listing's detail page for the full Dutch description and exterior colour. The search payload already carries
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']}Apify Proxy spec. Dutch residential exits are safest for Marktplaats.

Example input

{
"searchUrl": "",
"maxResults": 5,
"enrichDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringMarktplaats item ID (e.g. m2406042278).
listing_urlstringAbsolute URL to the listing detail page.
titlestringListing headline (make + model + trim).
make['string', 'null']Car manufacturer (e.g. BMW, Volkswagen, Skoda).
model['string', 'null']Model name (e.g. Octavia, Golf).
year['integer', 'null']Construction year (bouwjaar).
price['integer', 'null']Asking price as an integer in euros.
currency['string', 'null']ISO-4217 currency code — always EUR for Marktplaats.nl.
price_type['string', 'null']Pricing mode (Te koop / Bieden / Gereserveerd).
mileage_km['integer', 'null']Odometer reading in kilometres (kilometerstand).
fuel_type['string', 'null']Fuel type (Benzine, Diesel, Hybride, Elektrisch).
transmission['string', 'null']Transmission (Handgeschakeld / Automaat).
body_type['string', 'null']Body type (Hatchback, SUV, Stationwagon, ...).
drive_train['string', 'null']Drivetrain (Voorwielaandrijving, ...).
energy_label['string', 'null']Energy label (A–G).
color['string', 'null']Exterior colour name (enrichment-only, e.g. Grijs).
location['string', 'null']City of the listing (woonplaats).
region['string', 'null']Country name (always Nederland).
seller_type['string', 'null']private or dealer.
seller_name['string', 'null']Seller / dealer display name.
seller_id['string', 'null']Marktplaats seller ID.
photo_urlsarrayList of listing photo URLs (https, large size).
description['string', 'null']Full Dutch listing description (plain text). Enrichment-only.
posted_date['string', 'null']Listing date label as shown by Marktplaats (e.g. Vandaag).
scraped_atstringISO timestamp when this row was recorded.

Example output

{
"listing_id": "m2406042278",
"listing_url": "https://www.marktplaats.nl/v/auto-s/skoda/m2406042278-skoda-octavia-1-6-comfort",
"title": "Skoda Octavia 1.6 Comfort",
"make": "Skoda",
"model": "Octavia",
"year": 2001,
"price": 1150,
"currency": "EUR",
"price_type": "Te koop",
"mileage_km": 315844,
"fuel_type": "Benzine",
"transmission": "Handgeschakeld",
"body_type": "Hatchback",
"drive_train": "Voorwielaandrijving",
"energy_label": "B",
"color": "Grijs",
"location": "Lienden",
"region": "Nederland",
"seller_type": "dealer",
"seller_name": "MBSmart",
"seller_id": "56392587",
"photo_urls": [
"https://images.marktplaats.com/api/v1/hz-mp-pro-listing/images/4933080c-8de2-40e5-95e9-e9cc46631ef3?rule=ecg_mp_eps$_85.jpg"
],
"description": "Algemene informatie Aantal deuren: 5 Kleur: Grijs Technische informatie Vermogen: 75 kW (102 PK) ...",
"posted_date": "Vandaag",
"scraped_at": "2026-06-02T00:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
result-row$0.002PPE event

Example: 1 000 results at the rates above ≈ $2.05. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

Marktplaats serves 30 listings per page and caps deep result sets at roughly page 167, so very large queries top out well before the full inventory. Exterior colour and the full description are only available via detail enrichment (one extra request per listing). The seller dealer/private split is inferred from Marktplaats' dealer-package signal and is occasionally ambiguous for semi-professional sellers. Sponsored 'Admarkt' ads (item IDs starting with a) are skipped. Residential proxy is required — the Actor fails fast if the Apify Proxy RESIDENTIAL group is unavailable (upgrade your Apify plan if needed).

❓ FAQ

Do I need a Marktplaats account or API key?

No. Marktplaats offers no public API. This Actor scrapes the public cars category politely through Marktplaats' own search service — see the ToS Notice in the README.

How do I scrape a filtered search?

Apply your filters on marktplaats.nl, copy the resulting URL from your browser, and paste it into searchUrl. We translate it to the internal search query and walk the result pages.

Is the detail enrichment worth it?

It adds the full Dutch description and the exterior colour per listing at the cost of one extra request each. Price, specs, seller, location, and photos all come from the search payload — set enrichDetails to false to halve requests.

What currency are prices in?

Always EUR. price is an integer in euros; mileage is always in kilometres.

Why do some listings show 'Bieden' instead of a price?

Those are bid-based (MIN_BID) listings; we still surface the displayed amount as price and flag the mode in price_type.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.