2dehands Belgium Car Scraper avatar

2dehands Belgium Car Scraper

Pricing

Pay per event

Go to Apify Store
2dehands Belgium Car Scraper

2dehands Belgium Car Scraper

Scrape used-car listings from 2dehands.be, Belgium's #1 marketplace (Auto's) — price, make, model, year, mileage, fuel, transmission, body type, colour, seller (dealer/private), location, and photos. Export to JSON or CSV; optionally enrich each listing with its 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

21 hours ago

Last modified

Share


🎯 What this scrapes

2dehands.be is Belgium's largest classifieds marketplace (Adevinta-owned, the same engine as marktplaats.nl) and the default place Belgians buy and sell used cars (Auto's). It publishes no public API. This Actor wraps a polite scrape of the Auto's category — paste a filtered 2dehands search URL or use the default car listing page, and pull every listing's price, make/model, year, mileage (km), fuel, transmission, power, body type, colour, seller type, and photos. Flip on detail enrichment and we fetch each listing's page for the full Dutch description and a clean make/model. Built on curl-cffi with browser TLS impersonation.

🔥 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 Belgian 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 Belgium.
  • Lead generation — build a directory of car dealers from seller_name + location.
  • Arbitrage / sourcing — find under-priced listings filtered by mileage, year, and power.

⚙️ 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 2dehands Auto's search/results URL with your filters already applied (e.g. https://www.2dehands.be/l/auto-s/b
maxResultsintegerno50Hard cap on dataset rows. 2dehands paginates 30 listings per page; the Actor walks pages until this cap or the last page
enrichDetailsbooleannoTrueFetch each listing's detail page for the full Dutch description and a clean make/model. The search payload already carri
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']}Apify Proxy spec. Belgian residential exits are safest.

Example input

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

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstring2dehands listing ID (itemId, e.g. m2405879188).
listing_urlstringAbsolute URL to the listing detail page.
titlestringListing headline.
make['string', 'null']Car manufacturer (e.g. BMW, Volkswagen, Audi).
model['string', 'null']Model name (e.g. Golf, 3 Reeks).
year['integer', 'null']Construction year (Bouwjaar).
price['integer', 'null']Asking price as an integer in EUR (null when 'on request' / bidding).
currency['string', 'null']ISO-4217 currency code — always EUR for 2dehands.be.
mileage_km['integer', 'null']Odometer reading in kilometres (Kilometerstand).
fuel_type['string', 'null']Fuel type (Benzine, Diesel, Elektrisch, Hybride).
transmission['string', 'null']Transmission (Handgeschakeld / Automaat).
engine_power_hp['integer', 'null']Engine power in metric horsepower (PK), derived from kW.
engine_power_kw['integer', 'null']Engine power in kilowatts.
engine_size_cc['integer', 'null']Engine displacement in cubic centimetres.
body_type['string', 'null']Body / car type (e.g. Cabriolet, SUV, Stationwagen).
color['string', 'null']Exterior colour.
first_registration['string', 'null']Construction year as a string.
location['string', 'null']City / municipality of the listing.
region['string', 'null']Country name (België) as reported by the listing.
seller_type['string', 'null']private or dealer.
seller_name['string', 'null']Seller / dealer name.
photo_urlsarrayList of listing photo URLs (https).
description['string', 'null']Listing description (plain text). Full text on enrichment, else the search teaser.
posted_date['string', 'null']Posting date label as shown on 2dehands (e.g. Vandaag, Gisteren, a date).
scraped_atstringISO timestamp when this row was recorded.

Example output

{
"listing_id": "m2405222556",
"listing_url": "https://www.2dehands.be/v/auto-s/mini/m2405222556-mini-cooper-cabrio-1-6i-122pk-lci-highgate",
"title": "Mini Cooper Cabrio 1.6i 122pk LCI Highgate",
"make": "Mini",
"model": "Cabrio",
"year": 2013,
"price": 8990,
"currency": "EUR",
"mileage_km": 124600,
"fuel_type": "Benzine",
"transmission": "Handgeschakeld",
"engine_power_hp": null,
"engine_power_kw": null,
"engine_size_cc": null,
"body_type": "Cabriolet",
"color": null,
"first_registration": "2013",
"location": "Geel",
"region": "Belgi\u00eb",
"seller_type": "private",
"seller_name": "jo",
"photo_urls": [
"https://images.2dehands.com/api/v1/hz-twh-pro-listing/images/c40a8319-34f2-493d-928a-1248413f3dfd?rule=ecg_mp_eps$_82.jpg"
],
"description": "Mooie, exclusieve Mini Cooper Cabrio 1.6i 122pk in Iced Chocolate Metallic, Silvertouched bruin dak met Dark Truffle leder interieur.",
"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

2dehands paginates 30 listings per page and very deep result sets eventually stop returning new pages — large queries cap out well before the full 100k+ inventory. The search payload's make/brand field is sparse, so make is derived from the listing URL slug and refined on detail enrichment. Bidding and 'on request' listings have no fixed price (null). Detail enrichment adds one request per listing and roughly doubles run time.

❓ FAQ

Do I need a 2dehands account or API key?

No. 2dehands offers no public API. This Actor scrapes the public Auto's category politely — see the ToS Notice in the README.

How do I scrape a filtered search?

Apply your filters on 2dehands.be, copy the resulting URL from your browser, and paste it into searchUrl. We walk the result pages from there.

Is the detail enrichment worth it?

It adds the full Dutch description plus a clean make/model 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 is price sometimes null?

Some listings use bidding (Bieden) or 'on request' instead of a fixed price; we leave price null in those cases rather than guessing.

💬 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.