2dehands Listings Scraper avatar

2dehands Listings Scraper

Pricing

from $1.00 / 1,000 listings

Go to Apify Store
2dehands Listings Scraper

2dehands Listings Scraper

Scrape 2dehands.be and 2ememain.be, Belgium's biggest second-hand marketplace (tweedehands, seconde main). Get titles, prices, attributes, locations, sellers and photos by keyword or URL, past the 5,000-result cap, plus optional descriptions, views, bids and shipping.

Pricing

from $1.00 / 1,000 listings

Rating

0.0

(0)

Developer

FalconScrape

FalconScrape

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

24 days ago

Last modified

Features

Limited permissions

Share

🛒 2dehands Scraper: Belgian Second-Hand Listings (2dehands.be and 2ememain.be)

2dehands Listings Scraper exports listings from 2dehands.be and its French-language twin 2ememain.be, Belgium's biggest second-hand marketplace (tweedehands België, seconde main Belgique). Search by keyword or paste any search or category URL, from 2dehands auto and 2dehands fiets to furniture and iPhones, and get clean JSON with titles, prices, locations, sellers, attributes and photos. No login and no API key: it works as a simple 2dehands API for price research, resale sourcing and market analysis.

🎯 Use Cases

  • Track 2dehands auto prices: collect used-car listings from the Auto's category (or 2ememain voiture searches) with price, condition and location, and compare asking prices over time.
  • Find 2dehands fiets bargains: schedule a "newest first" run for bikes, e-bikes or any item you resell, and catch fresh listings within hours.
  • Spot 2dehands gratis items: free listings come through with priceType: "FREE" and price 0, ready to filter.
  • Market research on tweedehands België: measure supply, price bands and demand (views, favorites, bids) per category or region, e.g. 2dehands meubels or 2dehands iphone.
  • Find professional sellers: business ads are flagged, and with details on you get the seller type and profile link.

✨ Features

  • Dutch or French. Pick 2dehands.be (Dutch) or 2ememain.be (French). Both show the same Belgian listings; a listing has the same id on both. Pasted URLs keep their own site.
  • Keyword or URL. Search by keyword, or set up a search on the site with a category, filters, price range, postcode radius or sort order and paste the URL. Every filter, the sort order and the page number (/p/3/) are kept.
  • More than 5,000 results. The site shows at most 5,000 results per search. Above that, the scraper splits the search by category and price automatically, so a whole category can be collected.
  • No duplicates. Each listing is saved once, even when split searches overlap.
  • Rich rows. Price and price type (fixed, bidding, free), condition and other attributes, city with GPS coordinates, seller name and ID, all photos, and a flag for business ads.
  • Optional details. Turn on Include listing details to add the full description, all specifications, the exact posting date, view and favorite counts, the category path, seller type and profile link, bids and shipping options.
  • Fair billing. Listings removed between the search and the detail visit are skipped and not charged. The run stops cleanly at your maximum cost per run, and the status message explains any shortfall.

🛠️ How It Works

  1. Enter a keyword (for example iphone, fiets or vélo), or paste one or more search or category URLs, then pick the site and sort order.
  2. Set Max listings (default 50, 0 = everything) and optionally turn on Include listing details.
  3. Run the Actor, then export the dataset as JSON, CSV or Excel, or read it through the API.

With empty input the Actor returns 50 listings for iphone from 2dehands.be.

⚙️ Input

FieldTypeDescription
searchQuerystringKeyword to search for. Used when no URLs are given. Default iphone.
sitestring2dehands (Dutch, default) or 2ememain (French).
sortstringrelevance (default), newest, oldest, price_asc, price_desc.
startUrlsarraySearch or category URLs from 2dehands.be or 2ememain.be. When set, the keyword is ignored.
maxItemsintegerMaximum listings to save across all searches. Default 50, 0 = no limit.
includeDetailsbooleanAdd the full description, specifications, stats, seller, bids and shipping. Default false.

Keyword search in French:

{
"searchQuery": "vélo électrique",
"site": "2ememain",
"sort": "newest",
"maxItems": 200
}

Pasted URLs with filters (price range and sort live after the #):

{
"startUrls": [
{
"url": "https://www.2dehands.be/l/telecommunicatie/mobiele-telefoons-apple-iphone/#PriceCentsFrom:20000|PriceCentsTo:40000|sortBy:PRICE|sortOrder:INCREASING"
},
{ "url": "https://www.2dehands.be/l/auto-s/" }
],
"maxItems": 0,
"includeDetails": true
}

💰 Pricing

Pay-per-event: you pay only for the listings you get.

EventPriceWhen it's charged
Actor start$0.00005 per runOnce when the run starts.
Listing$0.001 per listing ($1.00 per 1,000)For every saved listing.
Listing details$0.002 per listing ($2.00 per 1,000)On top of Listing, for each listing saved with details.

Examples:

  • 50 listings (default input): about $0.05.
  • 1,000 listings: about $1.00.
  • 1,000 listings with details: about $3.00.

Set a maximum cost per run in Apify and the Actor stops when it reaches that cost.

📊 Sample Output Data: 2dehands iPhone Listing

A real row from a keyword search for iphone with details on (description and arrays trimmed):

{
"id": "a157632832",
"url": "https://www.2dehands.be/v/telecommunicatie/mobiele-telefoons-apple-iphone/a157632832-iphone-15-pro-4-gratis-accessoires-accu-tot-100",
"title": "iPhone 15 Pro - 4 Gratis Accessoires – Accu tot 100%",
"description": "Via deze advertentie krijg je automatisch €15 korting (code TD15). …",
"price": 569,
"priceType": "FIXED",
"currency": "EUR",
"isCommercialAd": true,
"date": "Vandaag",
"categoryId": 1953,
"attributes": {
"condition": "Zo goed als nieuw",
"delivery": "Verzenden",
"simlock": "Zonder simlock",
"subscription": "Zonder abonnement"
},
"city": null,
"country": null,
"latitude": null,
"longitude": null,
"sellerId": 57429797,
"sellerName": "Mobisite.be",
"sellerIsVerified": false,
"reserved": false,
"imageUrl": "https://admarkt-cdn.2dehands.com/api/v1/icas-twh-pro-admarkt/images/f0/f0b58ee9-e19f-4a00-8555-e364b028fc40?rule=eps_#.JPG",
"imageUrls": [
"https://admarkt-cdn.2dehands.com/api/v1/icas-twh-pro-admarkt/images/f0/f0b58ee9-e19f-4a00-8555-e364b028fc40?rule=eps_#.JPG",
"…"
],
"specifications": {
"Abonnement": "Zonder abonnement",
"Batterijconditie": "100",
"Model": "iPhone 15 Pro",
"Simlock": "Zonder simlock",
"Conditie": "Zo goed als nieuw"
},
"postedAt": "2025-12-13T02:20:40Z",
"viewCount": 3937,
"favoritedCount": 37,
"categoryName": "Apple iPhone",
"categoryPath": "Mobiele telefoons | Apple iPhone",
"parentCategoryName": "Telecommunicatie",
"adType": "Admarkt",
"sellerType": "TRADER",
"sellerActiveYears": 1,
"sellerProfileUrl": "https://www.2dehands.be/smb-profile/profile/57429797/",
"sellerCity": null,
"biddingEnabled": false,
"bidCount": 0,
"highestBid": null,
"minimumBid": null,
"shippingOptions": [{ "carrier": "Zelf Verzenden", "method": "UNKNOWN_BECAUSE_DIY", "price": null }],
"delivery": "Verzenden"
}

Fields from specifications onward appear only with Include listing details on; without it, description is the short text shown in search results. date is the site's own relative label ("Vandaag", "Hier"); postedAt is the exact timestamp. priceType is FIXED, MIN_BID, FAST_BID, FREE and so on; minimumBid and highestBid are filled for bidding ads.

🔁 Schedule and Integrate

For resale sourcing and price tracking, run it every hour or once a day with sort: newest and a small maxItems, so each run picks up only the fresh listings. Set it up in Apify Schedules. Send new rows to Google Sheets, Zapier, Make, n8n or a webhook with Apify integrations, so new 2dehands listings land where you already work.

🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (https://mcp.apify.com). An agent can call it with:

{ "searchQuery": "fiets", "sort": "newest", "maxItems": 20 }

❓ FAQ

Does 2dehands have an official API? 2dehands.be and 2ememain.be do not offer a public API for reading listings; their tools are aimed at people and businesses placing ads. This Actor needs no key, account or approval and returns the public listing data a visitor sees, plus details such as views, favorites, bids and shipping options, as structured JSON.

Can I scrape 2dehands auto and 2ememain voiture listings? Yes. Paste a car category or search URL, such as https://www.2dehands.be/l/auto-s/ or https://www.2ememain.be/l/autos/, with any filters you set on the site. Very large car searches are split automatically; some car searches stop serving results earlier than 5,000, and the status message says so when results could not be reached.

Do I need a 2dehands account? No. The Actor reads only public listings.

Do 2dehands.be and 2ememain.be have different listings? No. They are the same marketplace in two languages. A listing has the same id on both sites; the site you pick decides the language of titles, descriptions and categories.

Why is a field empty? price is null for bid-only and "see description" ads. Business ads (isCommercialAd: true) often have no city or coordinates. highestBid, minimumBid and shippingOptions are empty when the seller didn't set bidding or shipping.

Is there a result limit? The site shows at most 5,000 results per search; the Actor splits bigger searches by category and price. Within a single category above 10,000 listings, a few listings without a price may not be reachable; the run's status message says how many.

Why did a run return fewer listings than requested? Either the search had fewer results, or some listings were removed between the search and the detail visit. Removed listings are skipped and not charged.

Is it legal to scrape 2dehands? The Actor collects only publicly visible information. Seller names can be personal data, so you are responsible for using the data lawfully (e.g. GDPR) and for respecting the site's terms.

🛟 Support

Missing a field or a filter? Open an issue in the Issues tab. Feedback and feature requests are welcome.