MCP-Server

Marktplaats & 2dehands

io.github.jasp-nerd/marktplaats-mcp
Commerce & Retail Suche & Recherche Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Searches Marktplaats and 2dehands listings, compares asking prices, and provides listing and seller trust information.

analyze_prices
Analyze prices
Price statistics (min, quartiles, median, max, mean) over the most relevant asking prices for a search, plus the cheapest matches. Free, bidding-only and reserved ads are excluded and outliers beyond 1.5x the interquartile range are trimmed. Most reliable with a subcategory plus attributes (e.g. subcategory 'Mobiele telefoons | Apple iPhone', attributes {'Model': 'iPhone 15', 'Opslagcapaciteit': '128 GB'}) instead of free text, which drags in accessories.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'site': {'enum': ['marktplaats', '2dehands'], 'type': 'string', 'default': 'marktplaats', 'description': 'Which marketplace: marktplaats (Netherlands) or 2dehands (Belgium).'}, 'query': {'type': 'string', 'description': "Free-text search, e.g. 'racefiets' or 'iphone 15'. May be empty if a category is given."}, 'exclude': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Drop listings whose title or description contains any of these words, e.g. ['hoesje', 'defect', 'gezocht']."}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Top-level category name (Dutch, e.g. 'Fietsen en Brommers') or numeric id. See list_categories."}, 'delivery': {'anyOf': [{'enum': ['pickup', 'shipping'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "'shipping' for ads that can be shipped, 'pickup' for collection."}, 'language': {'anyOf': [{'enum': ['nl', 'fr', 'all'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "2dehands only: 'nl' for Dutch-language ads, 'fr' for French, 'all' (default)."}, 'postcode': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Dutch/Belgian postal code to search around, e.g. '1011 AB' or '2000'. Required for distance filtering and for distance_km in results."}, 'price_to': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Maximum price in euros.'}, 'condition': {'anyOf': [{'enum': ['new', 'as_good_as_new', 'used', 'refurbished', 'not_working'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by item condition.'}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}}, {'type': 'null'}], 'default': None, 'description': "Category-specific filters as {filter: value}, using the labels from list_category_filters, e.g. {'Merk': 'Gazelle', 'Framehoogte': '57 tot 61 cm'} or {'Bouwjaar': '2018-2022', 'Kilometerstand': '-100000', 'Brandstof': 'Benzine'}. A list means any of those values. Ranges are 'min-max', 'min-' or '-max'."}, 'price_from': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Minimum price in euros.'}, 'distance_km': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Max distance from postcode in kilometers (needs postcode).'}, 'sample_size': {'type': 'integer', 'default': 60, 'maximum': 100, 'minimum': 10, 'description': 'Listings to sample, most relevant first (10-100).'}, 'subcategory': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Subcategory name (e.g. 'Fietsen | Racefietsen' or 'Fietsen | Heren | Herenfietsen') or numeric id. See list_categories with a parent."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'PriceStats', 'required': ['site', 'query', 'total_count', 'sample_size'], 'properties': {'max': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Max', 'default': None}, 'min': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Min', 'default': None}, 'p25': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'P25', 'default': None}, 'p75': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'P75', 'default': None}, 'mean': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Mean', 'default': None}, 'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Note', 'default': None}, 'site': {'type': 'string', 'title': 'Site'}, 'query': {'type': 'string', 'title': 'Query'}, 'median': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Median', 'default': None}, 'cheapest': {'type': 'array', 'items': {'type': 'object', 'title': 'Listing', 'required': ['id', 'title', 'price', 'url'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'url': {'type': 'string', 'title': 'Url'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'City', 'default': None}, 'price': {'type': 'string', 'title': 'Price'}, 'title': {'type': 'string', 'title': 'Title'}, 'listed': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Listed', 'default': None}, 'seller': {'anyOf': [{'type': 'object', 'title': 'Seller', 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Id', 'default': None}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Name', 'default': None}, 'is_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Verified', 'default': None}}}, {'type': 'null'}], 'default': None}, 'reserved': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Reserved', 'default': None}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'string'}}, {'type': 'null'}], 'title': 'Attributes', 'default': None}, 'image_urls': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Image Urls', 'default': None}, 'category_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Category Id', 'default': None}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Description', 'default': None}, 'distance_km': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Distance Km', 'default': None}, 'is_business': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Business', 'default': None}, 'price_euros': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Price Euros', 'default': None}, 'is_sponsored': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Sponsored', 'default': None}}}, 'title': 'Cheapest', 'default': []}, 'sample_size': {'type': 'integer', 'title': 'Sample Size'}, 'total_count': {'type': 'integer', 'title': 'Total Count'}, 'excluded_outliers': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Excluded Outliers', 'default': None}}}
check_new_listings
Check new listings
Poll for listings placed after a given moment (newest first, paid promotions filtered out). Stateless: store the returned 'cursor' and pass it as 'since' on the next call. When the result is truncated the cursor only advances to the oldest ad returned, so nothing is ever skipped.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'site': {'enum': ['marktplaats', '2dehands'], 'type': 'string', 'default': 'marktplaats', 'description': 'Which marketplace: marktplaats (Netherlands) or 2dehands (Belgium).'}, 'limit': {'type': 'integer', 'default': 30, 'maximum': 100, 'minimum': 1, 'description': 'Max new listings to return (1-100).'}, 'query': {'type': 'string', 'default': '', 'description': "Free-text search, e.g. 'racefiets' or 'iphone 15'. May be empty if a category is given."}, 'since': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "ISO 8601 timestamp (e.g. '2026-07-15T09:00:00Z'); only listings placed after this moment are returned. Defaults to 24 hours ago. Pass the 'cursor' from the previous call to poll incrementally."}, 'exclude': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Drop listings whose title or description contains any of these words, e.g. ['hoesje', 'defect', 'gezocht']."}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Top-level category name (Dutch, e.g. 'Fietsen en Brommers') or numeric id. See list_categories."}, 'delivery': {'anyOf': [{'enum': ['pickup', 'shipping'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "'shipping' for ads that can be shipped, 'pickup' for collection."}, 'language': {'anyOf': [{'enum': ['nl', 'fr', 'all'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "2dehands only: 'nl' for Dutch-language ads, 'fr' for French, 'all' (default)."}, 'postcode': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Dutch/Belgian postal code to search around, e.g. '1011 AB' or '2000'. Required for distance filtering and for distance_km in results."}, 'price_to': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Maximum price in euros.'}, 'condition': {'anyOf': [{'enum': ['new', 'as_good_as_new', 'used', 'refurbished', 'not_working'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by item condition.'}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}}, {'type': 'null'}], 'default': None, 'description': "Category-specific filters as {filter: value}, using the labels from list_category_filters, e.g. {'Merk': 'Gazelle', 'Framehoogte': '57 tot 61 cm'} or {'Bouwjaar': '2018-2022', 'Kilometerstand': '-100000', 'Brandstof': 'Benzine'}. A list means any of those values. Ranges are 'min-max', 'min-' or '-max'."}, 'price_from': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Minimum price in euros.'}, 'distance_km': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Max distance from postcode in kilometers (needs postcode).'}, 'subcategory': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Subcategory name (e.g. 'Fietsen | Racefietsen' or 'Fietsen | Heren | Herenfietsen') or numeric id. See list_categories with a parent."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'NewListingsResult', 'required': ['site', 'since', 'cursor', 'new_count', 'listings'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Note', 'default': None}, 'site': {'type': 'string', 'title': 'Site'}, 'since': {'type': 'string', 'title': 'Since'}, 'cursor': {'type': 'string', 'title': 'Cursor'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'title': 'Listing', 'required': ['id', 'title', 'price', 'url'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'url': {'type': 'string', 'title': 'Url'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'City', 'default': None}, 'price': {'type': 'string', 'title': 'Price'}, 'title': {'type': 'string', 'title': 'Title'}, 'listed': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Listed', 'default': None}, 'seller': {'anyOf': [{'type': 'object', 'title': 'Seller', 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Id', 'default': None}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Name', 'default': None}, 'is_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Verified', 'default': None}}}, {'type': 'null'}], 'default': None}, 'reserved': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Reserved', 'default': None}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'string'}}, {'type': 'null'}], 'title': 'Attributes', 'default': None}, 'image_urls': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Image Urls', 'default': None}, 'category_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Category Id', 'default': None}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Description', 'default': None}, 'distance_km': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Distance Km', 'default': None}, 'is_business': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Business', 'default': None}, 'price_euros': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Price Euros', 'default': None}, 'is_sponsored': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Sponsored', 'default': None}}}, 'title': 'Listings'}, 'new_count': {'type': 'integer', 'title': 'New Count'}, 'truncated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Truncated', 'default': None}}}
get_listing_details
Get listing details
Fetch the full advertisement: complete description, attributes, status (active/closed), exact listing time, view and favorite counts, bidding state, shipping, images, and seller signals such as response rate and account age.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['listing_id'], 'properties': {'site': {'enum': ['marktplaats', '2dehands'], 'type': 'string', 'default': 'marktplaats', 'description': 'Which marketplace: marktplaats (Netherlands) or 2dehands (Belgium).'}, 'listing_id': {'type': 'string', 'description': "Listing id from search results (e.g. 'm2400641485') or a pasted marktplaats.nl / 2dehands.be listing URL."}, 'max_images': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 0, 'description': 'Max image URLs to return (0-20).'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'ListingDetails', 'required': ['id', 'site', 'url'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'url': {'type': 'string', 'title': 'Url'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'City', 'default': None}, 'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Note', 'default': None}, 'site': {'type': 'string', 'title': 'Site'}, 'price': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Price', 'default': None}, 'since': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Since', 'default': None}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Title', 'default': None}, 'seller': {'anyOf': [{'type': 'object', 'title': 'Seller', 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Id', 'default': None}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Name', 'default': None}, 'is_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Verified', 'default': None}}}, {'type': 'object', 'title': 'SellerDetails', 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Id', 'default': None}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Name', 'default': None}, 'type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Type', 'default': None}, 'active_since': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Active Since', 'default': None}, 'average_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Average Score', 'default': None}, 'listings_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Listings Count', 'default': None}, 'response_label': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Response Label', 'default': None}, 'number_of_reviews': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Number Of Reviews', 'default': None}, 'response_rate_percent': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Response Rate Percent', 'default': None}}}, {'type': 'null'}], 'title': 'Seller', 'default': None}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Status', 'default': None}, 'bidding': {'anyOf': [{'type': 'object', 'title': 'Bidding', 'required': ['enabled'], 'properties': {'enabled': {'type': 'boolean', 'title': 'Enabled'}, 'bids_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Bids Count', 'default': None}, 'highest_bid_euros': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Highest Bid Euros', 'default': None}, 'minimum_bid_euros': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Minimum Bid Euros', 'default': None}}}, {'type': 'null'}], 'default': None}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Country', 'default': None}, 'delivery': {'anyOf': [{'enum': ['pickup', 'shipping', 'both'], 'type': 'string'}, {'type': 'null'}], 'title': 'Delivery', 'default': None}, 'postcode': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Postcode', 'default': None}, 'reserved': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Reserved', 'default': None}, 'listed_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Listed At', 'default': None}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'string'}}, {'type': 'null'}], 'title': 'Attributes', 'default': None}, 'buy_it_now': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Buy It Now', 'default': None}, 'image_urls': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Image Urls', 'default': None}, 'price_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Price Type', 'default': None}, 'view_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'View Count', 'default': None}, 'category_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Category Id', 'default': None}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Description', 'default': None}, 'image_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Image Count', 'default': None}, 'price_euros': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Price Euros', 'default': None}, 'car_attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'string'}}, {'type': 'null'}], 'title': 'Car Attributes', 'default': None}, 'favorited_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Favorited Count', 'default': None}}}
get_seller_profile
Get seller profile
Look up a seller's trust signals: verified bank account / identity / phone number, business verification, payment method, review score and count. Null means the marketplace does not report that signal. Use list_seller_listings to see everything the seller currently offers.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['seller_id'], 'properties': {'site': {'enum': ['marktplaats', '2dehands'], 'type': 'string', 'default': 'marktplaats', 'description': 'Which marketplace: marktplaats (Netherlands) or 2dehands (Belgium).'}, 'seller_id': {'type': 'integer', 'description': "Numeric seller id from a listing's seller field."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'SellerProfile', 'required': ['seller_id', 'site'], 'properties': {'site': {'type': 'string', 'title': 'Site'}, 'seller_id': {'type': 'integer', 'title': 'Seller Id'}, 'average_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Average Score', 'default': None}, 'payment_method': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Payment Method', 'default': None}, 'business_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Business Verified', 'default': None}, 'number_of_reviews': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Number Of Reviews', 'default': None}, 'bank_account_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Bank Account Verified', 'default': None}, 'phone_number_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Phone Number Verified', 'default': None}, 'identification_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Identification Verified', 'default': None}, 'low_bid_threshold_percent': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Low Bid Threshold Percent', 'default': None}}}
list_categories
List categories
Browse the category tree (shared by marktplaats.nl and 2dehands.be) to find names/ids for search_listings' category and subcategory filters.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'parent': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Omit for all top-level categories; pass a top-level category name or id for its subcategories.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'CategoriesResult', 'required': ['level', 'categories'], 'properties': {'level': {'enum': ['L1', 'L2'], 'type': 'string', 'title': 'Level'}, 'parent': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Parent', 'default': None}, 'categories': {'type': 'array', 'items': {'type': 'object', 'title': 'Category', 'required': ['id', 'name'], 'properties': {'id': {'type': 'integer', 'title': 'Id'}, 'name': {'type': 'string', 'title': 'Name'}, 'parent': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Parent', 'default': None}}}, 'title': 'Categories'}}}
list_category_filters
List category filters
Discover the filters available for a category or search (brand, frame height, mileage, fuel, RAM, ...), with their valid values and how many ads match each. Pass the labels to search_listings' 'attributes' parameter.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'site': {'enum': ['marktplaats', '2dehands'], 'type': 'string', 'default': 'marktplaats', 'description': 'Which marketplace: marktplaats (Netherlands) or 2dehands (Belgium).'}, 'query': {'type': 'string', 'default': '', 'description': 'Optional search text; needed when no category is given.'}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Top-level category name (Dutch, e.g. 'Fietsen en Brommers') or numeric id. See list_categories."}, 'max_options': {'type': 'integer', 'default': 25, 'maximum': 200, 'minimum': 1, 'description': 'Max values per filter, most common first (1-200).'}, 'subcategory': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Subcategory name (e.g. 'Fietsen | Racefietsen' or 'Fietsen | Heren | Herenfietsen') or numeric id. See list_categories with a parent."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'FiltersResult', 'required': ['site', 'filters'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Note', 'default': None}, 'site': {'type': 'string', 'title': 'Site'}, 'query': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Query', 'default': None}, 'filters': {'type': 'array', 'items': {'type': 'object', 'title': 'SearchFilter', 'required': ['key', 'label', 'type'], 'properties': {'key': {'type': 'string', 'title': 'Key'}, 'max': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Max', 'default': None}, 'min': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Min', 'default': None}, 'type': {'enum': ['choice', 'range'], 'type': 'string', 'title': 'Type'}, 'unit': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Unit', 'default': None}, 'label': {'type': 'string', 'title': 'Label'}, 'options': {'type': 'array', 'items': {'type': 'object', 'title': 'FilterOption', 'required': ['label', 'id'], 'properties': {'id': {'type': 'integer', 'title': 'Id'}, 'count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Count', 'default': None}, 'label': {'type': 'string', 'title': 'Label'}}}, 'title': 'Options', 'default': []}}}, 'title': 'Filters'}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Category', 'default': None}, 'subcategory': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Subcategory', 'default': None}}}
list_seller_listings
List a seller's listings
Everything one seller currently has on offer. Useful to spot dealers posing as private sellers, duplicate or suspicious ads, and bundle deals.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['seller_id'], 'properties': {'site': {'enum': ['marktplaats', '2dehands'], 'type': 'string', 'default': 'marktplaats', 'description': 'Which marketplace: marktplaats (Netherlands) or 2dehands (Belgium).'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'Results per page (1-100).'}, 'query': {'type': 'string', 'default': '', 'description': "Optional text to filter the seller's ads."}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': "Pagination: pass 'next_offset' from the previous result."}, 'compact': {'type': 'boolean', 'default': True, 'description': 'True (default) returns a token-efficient shortlist; False adds description, seller, images and attributes per listing.'}, 'sort_by': {'enum': ['relevance', 'date', 'price', 'location'], 'type': 'string', 'default': 'date', 'description': "'relevance' (default), 'date' (newest first with desc), 'price' or 'location'."}, 'seller_id': {'type': 'integer', 'description': 'Numeric seller id.'}, 'sort_order': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': "'asc' or 'desc'."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'SearchResult', 'required': ['site', 'total_count', 'offset', 'limit', 'returned', 'listings'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Note', 'default': None}, 'site': {'type': 'string', 'title': 'Site'}, 'limit': {'type': 'integer', 'title': 'Limit'}, 'offset': {'type': 'integer', 'title': 'Offset'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'title': 'Listing', 'required': ['id', 'title', 'price', 'url'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'url': {'type': 'string', 'title': 'Url'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'City', 'default': None}, 'price': {'type': 'string', 'title': 'Price'}, 'title': {'type': 'string', 'title': 'Title'}, 'listed': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Listed', 'default': None}, 'seller': {'anyOf': [{'type': 'object', 'title': 'Seller', 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Id', 'default': None}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Name', 'default': None}, 'is_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Verified', 'default': None}}}, {'type': 'null'}], 'default': None}, 'reserved': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Reserved', 'default': None}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'string'}}, {'type': 'null'}], 'title': 'Attributes', 'default': None}, 'image_urls': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Image Urls', 'default': None}, 'category_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Category Id', 'default': None}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Description', 'default': None}, 'distance_km': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Distance Km', 'default': None}, 'is_business': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Business', 'default': None}, 'price_euros': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Price Euros', 'default': None}, 'is_sponsored': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Sponsored', 'default': None}}}, 'title': 'Listings'}, 'returned': {'type': 'integer', 'title': 'Returned'}, 'next_offset': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Next Offset', 'default': None}, 'total_count': {'type': 'integer', 'title': 'Total Count'}, 'suggested_query': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Suggested Query', 'default': None}}}
search_listings
Search listings
Search second-hand listings on Marktplaats or 2dehands with filters for category, category-specific attributes, price range, condition, delivery, recency and distance from a postal code. Paid promotions are filtered out unless include_sponsored is set.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'site': {'enum': ['marktplaats', '2dehands'], 'type': 'string', 'default': 'marktplaats', 'description': 'Which marketplace: marktplaats (Netherlands) or 2dehands (Belgium).'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 100, 'minimum': 1, 'description': 'Results per page (1-100).'}, 'query': {'type': 'string', 'default': '', 'description': "Free-text search, e.g. 'racefiets' or 'iphone 15'. May be empty if a category is given."}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': "Pagination: pass 'next_offset' from the previous result."}, 'compact': {'type': 'boolean', 'default': True, 'description': 'True (default) returns a token-efficient shortlist; False adds description, seller, images and attributes per listing.'}, 'exclude': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Drop listings whose title or description contains any of these words, e.g. ['hoesje', 'defect', 'gezocht']."}, 'sort_by': {'enum': ['relevance', 'date', 'price', 'location'], 'type': 'string', 'default': 'relevance', 'description': "'relevance' (default), 'date' (newest first with desc), 'price' or 'location'."}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Top-level category name (Dutch, e.g. 'Fietsen en Brommers') or numeric id. See list_categories."}, 'delivery': {'anyOf': [{'enum': ['pickup', 'shipping'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "'shipping' for ads that can be shipped, 'pickup' for collection."}, 'language': {'anyOf': [{'enum': ['nl', 'fr', 'all'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "2dehands only: 'nl' for Dutch-language ads, 'fr' for French, 'all' (default)."}, 'postcode': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Dutch/Belgian postal code to search around, e.g. '1011 AB' or '2000'. Required for distance filtering and for distance_km in results."}, 'price_to': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Maximum price in euros.'}, 'condition': {'anyOf': [{'enum': ['new', 'as_good_as_new', 'used', 'refurbished', 'not_working'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by item condition.'}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}}, {'type': 'null'}], 'default': None, 'description': "Category-specific filters as {filter: value}, using the labels from list_category_filters, e.g. {'Merk': 'Gazelle', 'Framehoogte': '57 tot 61 cm'} or {'Bouwjaar': '2018-2022', 'Kilometerstand': '-100000', 'Brandstof': 'Benzine'}. A list means any of those values. Ranges are 'min-max', 'min-' or '-max'."}, 'price_from': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Minimum price in euros.'}, 'sort_order': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc', 'description': "'asc' or 'desc'."}, 'distance_km': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Max distance from postcode in kilometers (needs postcode).'}, 'subcategory': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Subcategory name (e.g. 'Fietsen | Racefietsen' or 'Fietsen | Heren | Herenfietsen') or numeric id. See list_categories with a parent."}, 'include_unpriced': {'type': 'boolean', 'default': False, 'description': "Keep ads without an asking price (free, 'Bieden' without amount) when sorting by price or filtering on price. Default False: those ads would otherwise sort as â\x82¬0 and flood the cheapest pages."}, 'include_sponsored': {'type': 'boolean', 'default': False, 'description': 'Include paid promotions (DAGTOPPER/TOPADVERTENTIE) and the sponsored top block.'}, 'offered_since_days': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'default': None, 'description': 'Only listings placed within the last N days.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'title': 'SearchResult', 'required': ['site', 'total_count', 'offset', 'limit', 'returned', 'listings'], 'properties': {'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Note', 'default': None}, 'site': {'type': 'string', 'title': 'Site'}, 'limit': {'type': 'integer', 'title': 'Limit'}, 'offset': {'type': 'integer', 'title': 'Offset'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'title': 'Listing', 'required': ['id', 'title', 'price', 'url'], 'properties': {'id': {'type': 'string', 'title': 'Id'}, 'url': {'type': 'string', 'title': 'Url'}, 'city': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'City', 'default': None}, 'price': {'type': 'string', 'title': 'Price'}, 'title': {'type': 'string', 'title': 'Title'}, 'listed': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Listed', 'default': None}, 'seller': {'anyOf': [{'type': 'object', 'title': 'Seller', 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Id', 'default': None}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Name', 'default': None}, 'is_verified': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Verified', 'default': None}}}, {'type': 'null'}], 'default': None}, 'reserved': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Reserved', 'default': None}, 'attributes': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'string'}}, {'type': 'null'}], 'title': 'Attributes', 'default': None}, 'image_urls': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Image Urls', 'default': None}, 'category_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Category Id', 'default': None}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Description', 'default': None}, 'distance_km': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Distance Km', 'default': None}, 'is_business': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Business', 'default': None}, 'price_euros': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Price Euros', 'default': None}, 'is_sponsored': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Is Sponsored', 'default': None}}}, 'title': 'Listings'}, 'returned': {'type': 'integer', 'title': 'Returned'}, 'next_offset': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Next Offset', 'default': None}, 'total_count': {'type': 'integer', 'title': 'Total Count'}, 'suggested_query': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Suggested Query', 'default': None}}}
Hinzugefügt
analyze_prices
21. September 2026 02:40
Hinzugefügt
check_new_listings
21. September 2026 02:40
Hinzugefügt
list_category_filters
21. September 2026 02:40
Hinzugefügt
list_categories
21. September 2026 02:40
Hinzugefügt
list_seller_listings
21. September 2026 02:40
Hinzugefügt
get_seller_profile
21. September 2026 02:40
Hinzugefügt
get_listing_details
21. September 2026 02:40
Hinzugefügt
search_listings
21. September 2026 02:40