# Marktplaats Scraper 🇳🇱 (all-in price per listing) (`tagadanar/marktplaats-scraper`) Actor

Scrape Marktplaats.nl listings with a real filter search: keyword, category, price band, postcode radius, posting date, sort. Flat JSON with price, location, posting date, seller, attributes and photo. Platform usage included in the price. No API key.

- **URL**: https://apify.com/tagadanar/marktplaats-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 listing scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Marktplaats Scraper: Dutch Marketplace Listings as Clean JSON

Search Marktplaats.nl the way you would on the site and get the results as structured JSON. Set a search term, a category, a price band, a postcode with a radius, a posting-date window and a sort order as plain input fields. Every record carries the price, the location with coordinates, the posting date resolved to a real date, the seller, the listing attributes and the photo.

If you already have a Marktplaats URL from your browser, paste it as-is instead of using the filters: search pages, category pages and their filter hash are all understood.

### What you get per listing

| Field | Description |
| --- | --- |
| `title`, `description` | The listing as the seller wrote it |
| `price`, `currency`, `priceCents` | Asking price in EUR when the listing has one |
| `priceType` | fixed, bidding, bidding-from, see-description, free, reserved or on-request |
| `city`, `country`, `latitude`, `longitude` | Where the item is |
| `distanceKm` | Distance from your postcode, when you search around one |
| `postedAt`, `postedDate` | The site's own wording ("Vandaag") and the resolved ISO date |
| `categoryId`, `categoryName` | The Marktplaats category of the listing |
| `sellerId`, `sellerName`, `sellerIsVerified`, `sellerHasWebsite` | Who is selling and the trust signals the site shows |
| `promoted` | Whether the listing is a paid placement (Dagtopper), so you can filter ads out |
| `reserved` | Whether the item is already reserved |
| `attributes` | Condition, delivery and the category-specific properties as one flat object |
| `url`, `imageUrl`, `imageCount`, `id` | Listing link, main photo and listing ID |
| `searchQuery`, `scrapedAt` | Which search produced the record and when |

### Who uses it

- Resellers and bargain hunters: run a search sorted newest first on a schedule, filter `promoted` out, and see fresh underpriced items before anyone else.
- Price and market analysts: pull a whole category or search term and get asking prices, posting dates and locations in one table.
- E-commerce teams watching the second-hand market for their own products or brand.
- Anyone who wants a Marktplaats search as a spreadsheet instead of endless scrolling.

### Input examples

Electric bikes between 500 and 1,500 EUR around Utrecht, newest first:

```json
{
  "query": ["elektrische fiets"],
  "priceFrom": 500,
  "priceTo": 1500,
  "postcode": "3511AD",
  "radiusKm": "25",
  "sort": "newest",
  "maxResults": 200
}
````

Everything posted today for two searches, capped:

```json
{
  "query": ["iphone 15", "iphone 16"],
  "offeredSince": "today",
  "sort": "newest",
  "maxResults": 100
}
```

Browse a whole category without a search term:

```json
{
  "category": "witgoed-en-apparatuur",
  "sort": "newest",
  "maxResults": 500
}
```

Paste URLs straight from your browser, filters included:

```json
{
  "searchUrls": [
    "https://www.marktplaats.nl/l/fietsen-en-brommers/elektrische-fietsen/#PriceCentsFrom:50000|PriceCentsTo:150000",
    "https://www.marktplaats.nl/q/eettafel+hout/"
  ],
  "maxResults": 300
}
```

### How it works

The actor reads the same data Marktplaats' own result pages are built from, 100 listings per request, so runs are fast and records match what a visitor sees. Results are deduplicated by listing ID within a run, so a promoted listing that repeats across pages is delivered and charged once.

Marktplaats serves at most about 5,000 results for one query. If your search holds more, the run tells you so honestly; narrow it with a price band, a category or a postcode radius to reach the rest, or split it over several searches in one run.

### Pricing

You pay per listing delivered, platform usage included in the price. There is no proxy, no subscription and no compute line on your bill; the price per listing is the whole bill.

| Event | Price |
| --- | --- |
| Listing scraped | $1.00 per 1,000 |
| Actor start | $0.001 per run |

Listings you do not receive cost nothing: the cap stops the run, duplicates are filtered before charging, and the tiny start fee only exists so a run that returns zero results still covers its overhead.

### FAQ

**Do I need an API key or an account?** No. The actor reads Marktplaats' public result pages directly.

**Can I filter on posting date?** Yes. `offeredSince` limits results to today, since yesterday or the last week, the same choices the site offers. Each record also carries `postedDate` as a real ISO date, resolved from the site's Dutch wording, so you can filter finer after the run.

**How do I search around a location?** Set `postcode` (any Dutch postcode, e.g. `3511AD`) and pick a `radiusKm`. Each record then includes `distanceKm` from that postcode.

**Can I scrape a subcategory like "Elektrische fietsen"?** Yes. Open it on marktplaats.nl, copy the URL from your browser and put it in `searchUrls`. The actor resolves the category, including any price filter in the URL.

**How do I keep promoted ads out?** Every record has a `promoted` flag. Dagtoppers and other paid placements are marked, so one filter on `promoted = false` leaves only organic results.

**Does bidding show a fake price?** No. Listings where people bid or where the price is in the description have `price: null` and an honest `priceType` (bidding, bidding-from, see-description), never a made-up number.

**How many listings can one run return?** Up to about 5,000 per search, which is the site's own ceiling for one query. Use several search terms, categories or price bands in one run to go beyond it; the run also warns you when a search holds more than it can serve.

**Does it slow down or get blocked on big pulls?** Runs pace themselves politely. In our measurements the result data serves reliably without any proxy, which is why there is no proxy cost in the price.

***

### Something missing?

If you need an extra field or a filter you use on the site is not exposed here, open an issue on this Actor and describe it. I read every request and small additions usually ship within days. More marketplace and listings Actors are on [my profile](https://apify.com/tagadanar), including [Kleinanzeigen](https://apify.com/tagadanar/kleinanzeigen-scraper) and [AutoScout24](https://apify.com/tagadanar/autoscout24-scraper).

*Marktplaats scraper, Marktplaats API alternative, scrape Marktplaats, Marktplaats data, Dutch classifieds scraper, Netherlands marketplace data, tweedehands prijzen, second-hand price monitoring, Marktplaats zoekopdracht exporteren, listings to spreadsheet.*

# Actor input Schema

## `query` (type: `array`):

One search per entry, exactly what you would type into the Marktplaats search box, e.g. <code>fiets</code>, <code>iphone 15</code>, <code>eettafel</code>. Leave empty to browse a whole category instead.

## `category` (type: `string`):

Restrict the search to one Marktplaats top-level category, or browse it without a search term.

## `priceFrom` (type: `integer`):

Lowest price to include, in euros.

## `priceTo` (type: `integer`):

Highest price to include, in euros.

## `postcode` (type: `string`):

Dutch postcode to search around, e.g. <code>1012AB</code>. Leave empty to search all of the Netherlands.

## `radiusKm` (type: `string`):

How far around the postcode to search. Ignored without a postcode.

## `offeredSince` (type: `string`):

Only listings posted recently. Handy for monitoring a search on a schedule.

## `sort` (type: `string`):

Order of the results, same choices as on the site.

## `maxResults` (type: `integer`):

Stop after this many listings across all searches. You are only charged for listings actually delivered.

## `searchUrls` (type: `array`):

Paste one or more marktplaats.nl search or category page URLs straight from your browser, filters included. When set, the filter fields above are ignored.

## Actor input object example

```json
{
  "query": [
    "fiets"
  ],
  "category": "all",
  "radiusKm": "0",
  "offeredSince": "any",
  "sort": "relevance",
  "maxResults": 25
}
```

# Actor output Schema

## `listings` (type: `string`):

One item per listing in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": [
        "fiets"
    ],
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/marktplaats-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "query": ["fiets"],
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/marktplaats-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": [
    "fiets"
  ],
  "maxResults": 25
}' |
apify call tagadanar/marktplaats-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=tagadanar/marktplaats-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Marktplaats Scraper 🇳🇱 (all-in price per listing)",
        "description": "Scrape Marktplaats.nl listings with a real filter search: keyword, category, price band, postcode radius, posting date, sort. Flat JSON with price, location, posting date, seller, attributes and photo. Platform usage included in the price. No API key.",
        "version": "0.1",
        "x-build-id": "Xtgr7Og8niASYsn0i"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/tagadanar~marktplaats-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-tagadanar-marktplaats-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/tagadanar~marktplaats-scraper/runs": {
            "post": {
                "operationId": "runs-sync-tagadanar-marktplaats-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/tagadanar~marktplaats-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-tagadanar-marktplaats-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "One search per entry, exactly what you would type into the Marktplaats search box, e.g. <code>fiets</code>, <code>iphone 15</code>, <code>eettafel</code>. Leave empty to browse a whole category instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category",
                        "enum": [
                            "all",
                            "antiek-en-kunst",
                            "audio-tv-en-foto",
                            "auto-s",
                            "auto-onderdelen",
                            "auto-diversen",
                            "boeken",
                            "caravans-en-kamperen",
                            "cd-s-en-dvd-s",
                            "computers-en-software",
                            "contacten-en-berichten",
                            "diensten-en-vakmensen",
                            "dieren-en-toebehoren",
                            "doe-het-zelf-en-verbouw",
                            "fietsen-en-brommers",
                            "hobby-en-vrije-tijd",
                            "huis-en-inrichting",
                            "huizen-en-kamers",
                            "kinderen-en-baby-s",
                            "kleding-dames",
                            "kleding-heren",
                            "motoren",
                            "muziek-en-instrumenten",
                            "postzegels-en-munten",
                            "sieraden-tassen-en-uiterlijk",
                            "spelcomputers-en-games",
                            "sport-en-fitness",
                            "telecommunicatie",
                            "tickets-en-kaartjes",
                            "tuin-en-terras",
                            "vacatures",
                            "vakantie",
                            "verzamelen",
                            "watersport-en-boten",
                            "witgoed-en-apparatuur",
                            "zakelijke-goederen"
                        ],
                        "type": "string",
                        "description": "Restrict the search to one Marktplaats top-level category, or browse it without a search term.",
                        "default": "all"
                    },
                    "priceFrom": {
                        "title": "Price from (EUR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Lowest price to include, in euros."
                    },
                    "priceTo": {
                        "title": "Price up to (EUR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Highest price to include, in euros."
                    },
                    "postcode": {
                        "title": "Postcode",
                        "type": "string",
                        "description": "Dutch postcode to search around, e.g. <code>1012AB</code>. Leave empty to search all of the Netherlands."
                    },
                    "radiusKm": {
                        "title": "Search radius",
                        "enum": [
                            "0",
                            "3",
                            "5",
                            "10",
                            "15",
                            "25",
                            "50",
                            "75"
                        ],
                        "type": "string",
                        "description": "How far around the postcode to search. Ignored without a postcode.",
                        "default": "0"
                    },
                    "offeredSince": {
                        "title": "Posted since",
                        "enum": [
                            "any",
                            "today",
                            "yesterday",
                            "week"
                        ],
                        "type": "string",
                        "description": "Only listings posted recently. Handy for monitoring a search on a schedule.",
                        "default": "any"
                    },
                    "sort": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "newest",
                            "oldest",
                            "price-asc",
                            "price-desc"
                        ],
                        "type": "string",
                        "description": "Order of the results, same choices as on the site.",
                        "default": "relevance"
                    },
                    "maxResults": {
                        "title": "Max listings",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Stop after this many listings across all searches. You are only charged for listings actually delivered.",
                        "default": 100
                    },
                    "searchUrls": {
                        "title": "Search URLs (optional, replaces the filters above)",
                        "type": "array",
                        "description": "Paste one or more marktplaats.nl search or category page URLs straight from your browser, filters included. When set, the filter fields above are ignored.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
