# Marktplaats.nl Scraper — Search, Paste-URL & Seller · 24 Fields (`memo23/marktplaats-nl-scraper`) Actor

Scrape Marktplaats.nl listings — keyword search, paste any search/category URL, or pull a seller's items. Each row: title, price + bid type, condition, delivery, location with lat/lng, seller, photos, attributes & full description. Filter by price, condition, postcode radius. JSON or CSV.

- **URL**: https://apify.com/memo23/marktplaats-nl-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** AI, E-commerce, Agents
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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.nl Scraper 🇳🇱

**Scrape listings from [Marktplaats.nl](https://www.marktplaats.nl) — the Netherlands' biggest classifieds marketplace.** Search by keyword across the whole board, paste any Marktplaats search or category URL, or pull every listing from a seller. Each listing is one clean, flat row: title, price (with bid type), condition, delivery, location with coordinates, seller, photos, attributes and the full description. Pure HTTP — no login, no browser, no CAPTCHA. JSON or CSV.

![How the Marktplaats.nl Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-marktplaats.png)

### ✨ Why use this scraper

- **Three ways to run.** Keyword **search** the whole board · paste any **search / category URL** · or pull a **seller's** full listing list. Most Marktplaats scrapers only accept a single URL.
- **Rich server-side filters.** Narrow by price range, condition, delivery method, **category (by name)**, postcode + radius, and sort order — all applied at the source, so you only pull (and pay for) the listings you actually want.
- **The deepest schema — 24 fields per listing.** Title, price (+ **bid type**: fixed, bidding, reserved…), condition, delivery, full description, all attributes, **office coordinates (lat/lng)**, seller (id / name / verified), category, every photo URL and posting date.
- **Category by name, built in.** Type `racefietsen` or `telefoons` — the actor resolves it to the right category ID from a built-in tree of 2,100+ Marktplaats categories. No need to hunt for numeric IDs.
- **Up to ~5,000 listings per search**, paginated automatically (100 per page).
- **Pure HTTP.** No headless browser, no CAPTCHA solver. Fast, cheap and reliable, via residential proxies.
- **Flat, spreadsheet-ready rows.** Everything denormalised onto one row. Open the CSV and filter.

### 🎯 Use cases

| You are… | Use it to… |
|---|---|
| **Reseller / flipper** | Track underpriced listings in a category or price band, watch specific sellers, spot arbitrage. |
| **Market analyst** | Measure pricing, supply and condition mix across categories and regions over time. |
| **Dealer / shop** | Monitor competitors' inventory and pricing (seller mode). |
| **Researcher** | Build a dataset of second-hand prices, locations and attributes for any product type. |
| **Deal-alert builder** | Feed fresh matching listings (keyword + filters) into your own alerts or app. |

### 📥 Supported inputs

| Mode | Input | Output |
|---|---|---|
| **Search** | `queries: ["racefiets"]` | Every listing matching the term(s), board-wide |
| **Search URL** | `searchUrls: ["https://www.marktplaats.nl/q/racefiets/"]` | The listings for that pasted search / category URL |
| **Seller** | `sellerIds: ["10188200"]` | Every active listing from each seller |

You can combine modes in one run; results merge and de-duplicate by item ID. **Not supported:** private/login-only data, seller phone numbers (gated behind the app login), buyer messaging.

### 🔄 How it works

1. **Build sources** — each keyword, pasted URL and seller ID becomes a search source. Pasted URLs are read for their on-site filters so they carry over automatically.
2. **Fetch** — the actor queries Marktplaats' own listing search API (open JSON, no login) and paginates 100 listings per page, applying your filters server-side, all via rotating residential proxies.
3. **Emit** — listings are de-duplicated by item ID, flattened to one row each, and pushed — no browser, no CAPTCHA.

### ⚙️ Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `queries` | array | — | Keyword search terms. Runs a board-wide search per term. |
| `searchUrls` | array | — | Marktplaats search / category URLs; their filters are carried over. |
| `sellerIds` | array | — | Seller IDs — returns each seller's active listings. |
| `searchInTitleAndDescription` | boolean | `false` | Match the term in title + description (broader), not just the title. |
| `priceMin` / `priceMax` | integer | — | Price range in euros. |
| `condition` | string | — | `Nieuw`, `Zo goed als nieuw`, `Gebruikt`, `Refurbished`. |
| `delivery` | string | — | `Ophalen` (pickup) or `Verzenden` (shipping). |
| `category` | string | — | Category by name (Dutch), e.g. `Fietsen`, `Racefietsen` — resolved to an ID. |
| `l1CategoryId` / `l2CategoryId` | integer | — | Exact category IDs (override the name lookup). |
| `postcode` / `distanceKm` | string / int | — | Location centre + radius in km. |
| `sortBy` / `sortOrder` | string | Relevance | `SORT_INDEX` / `PRICE` / `DATE`, ascending or descending. |
| `maxItems` | integer | 200 | Max listing rows per run. Free-tier capped at 100. |
| `maxConcurrency` | integer | 6 | Parallel source fetches. |
| `proxy` | object | Residential | Residential rotation keeps large pulls stable. |

#### Example input

```json
{
  "queries": ["racefiets"],
  "category": "racefietsen",
  "priceMin": 100,
  "priceMax": 800,
  "condition": "Gebruikt",
  "maxItems": 200
}
````

### 📊 Output overview

Every listing becomes one flat, denormalised row — search results, pasted-URL results and seller listings all share the same shape, so you can open the CSV and filter immediately. Prices are given both in euros (`price`) and raw cents (`priceCents`), with `priceType` telling you whether it's a fixed price, a bidding listing, reserved, and so on.

### 📦 Output sample

```json
{
  "itemId": "m2313216853",
  "title": "Batavus Course racefiets maat 58",
  "url": "https://www.marktplaats.nl/v/fietsen-en-brommers/fietsen-racefietsen/m2313216853-batavus-course-racefiets-maat-58",
  "price": 150,
  "priceCents": 15000,
  "priceType": "MIN_BID",
  "condition": "Gebruikt",
  "delivery": "Ophalen",
  "attributes": { "condition": "Gebruikt", "delivery": "Ophalen" },
  "cityName": "Aalsmeer",
  "countryName": "Nederland",
  "latitude": 52.2519,
  "longitude": 5.0254,
  "sellerId": "10188200",
  "sellerName": "Zaal",
  "sellerIsVerified": false,
  "categoryId": 464,
  "imageCount": 2,
  "imageUrls": ["https://images.marktplaats.com/api/v1/listing-mp-p/images/..."],
  "reserved": false,
  "postedDate": "2026-01-30T23:00:00.000Z",
  "source": "search",
  "scrapedAt": "2026-06-29T10:30:00.000Z"
}
```

### 🗂 Key output fields

| Field | Meaning |
|---|---|
| `itemId` / `url` | Marktplaats item ID and the public listing (VIP) URL. |
| `title` / `description` | Listing title and the full description text. |
| `price` / `priceCents` / `priceType` | Price in euros, in cents, and the kind (fixed / bid / reserved / see-description). |
| `condition` / `delivery` | Item condition and how it's handed over (pickup / shipping). |
| `attributes` | All listing attributes as a key→value map. |
| `cityName` / `countryName` / `latitude` / `longitude` | Where the item is, including coordinates. |
| `sellerId` / `sellerName` / `sellerIsVerified` | The seller's id, display name and verified flag. |
| `categoryId` | Marktplaats category the listing sits in. |
| `imageCount` / `imageUrls` | Number of photos and their URLs. |
| `postedDate` | ISO timestamp the listing was posted. |
| `source` | `search` (keyword), `url` (pasted URL) or `seller`. |

### ❓ FAQ

**Do I need a Marktplaats account or API key?**
No — no login and nothing for you to supply. The actor reads public listing data only.

**How do I scrape a specific search I set up on the site?**
Configure the filters on Marktplaats, copy the URL from your browser, and paste it into `searchUrls`. The actor reads the search's filters and pulls all matching listings.

**How many listings can one search return?**
Up to ~5,000 per search term (the search engine's page cap). For larger pulls, split into narrower terms, categories or price bands.

**Can I get the seller's phone number?**
No — phone numbers are only exposed behind the Marktplaats app login, which this actor does not access. Seller id, name and verified status are included.

**Why is `price` sometimes null?**
Listings marked "see description", "by negotiation" or reserved carry no fixed amount; `priceType` tells you which. `priceCents` still reflects what the API returns.

**How fresh is the data?**
Live — each run hits the current listings.

### 💬 Support

Found a bug or need an extra field? Open an issue on the actor's **Issues** tab and we'll take a look.

### 🛠 Additional services

Need a custom feed, scheduled runs, or another marketplace scraped? Reach out via the Apify contact form on the actor page.

### 🔎 Explore more scrapers

See the [full memo23 actor catalog →](https://apify.com/memo23)

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Marktplaats, Adevinta, eBay, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available listing pages — no authenticated endpoints, account-only features, or content behind a Marktplaats login. Users are responsible for ensuring their use complies with Marktplaats' Terms of Service, applicable data-protection law (GDPR, etc.), and any contractual obligations of their own organisation.

***

### SEO Keywords

marktplaats scraper, marktplaats.nl scraper, scrape marktplaats, marktplaats api, marktplaats data extractor, dutch classifieds scraper, netherlands marketplace scraper, marktplaats listings scraper, marktplaats search scraper, marktplaats seller scraper, second hand prices netherlands, classifieds data scraper, marktplaats price monitoring, reseller arbitrage data, marktplaats category scraper, apify marktplaats, marktplaats json csv export, tweedehands scraper, marktplaats product data, marktplaats listing api

# Actor input Schema

## `queries` (type: `array`):

Keyword searches across the whole Marktplaats board, e.g. \["iphone 13", "racefiets"]. Each term runs a full search. Filters below apply to these terms.

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

Paste any Marktplaats search or category URL (e.g. https://www.marktplaats.nl/q/racefiets/ or a /l/<category>/ page). The on-site filters in the URL are carried over automatically.

## `sellerIds` (type: `array`):

Numeric seller IDs (from a seller page URL or the sellerId field in output). Returns every active listing from each seller.

## `searchInTitleAndDescription` (type: `boolean`):

When on, the search term must appear in the title OR description (broader). Off = title match only.

## `priceMin` (type: `integer`):

Keep only listings priced at or above this many euros.

## `priceMax` (type: `integer`):

Keep only listings priced at or below this many euros.

## `condition` (type: `string`):

Filter by item condition.

## `delivery` (type: `string`):

Filter by how the item is handed over.

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

Dutch postcode, e.g. 1011AB. Combine with radius below for a location search.

## `distanceKm` (type: `integer`):

Search radius in kilometres around the postcode above.

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

Filter by category name in Dutch, e.g. "Fietsen", "Racefietsen", "Telefoons". Resolved to a category ID automatically. For exact control, use the category IDs below instead.

## `l1CategoryId` (type: `integer`):

Top-level Marktplaats category ID to restrict results. Usually set automatically when you paste a category URL.

## `l2CategoryId` (type: `integer`):

Sub-category ID to restrict results. Usually set automatically when you paste a category URL.

## `sortBy` (type: `string`):

Order results by relevance, price, or date.

## `sortOrder` (type: `string`):

Ascending or descending order for the sort above.

## `maxItems` (type: `integer`):

Hard cap on listing rows per run. Each kept listing is one paid result. Default 200. Free-tier users are capped at 100.

## `maxConcurrency` (type: `integer`):

How many search sources to paginate in parallel. 5-8 is the reliable sweet spot.

## `proxy` (type: `object`):

Proxy settings. The API works direct, but residential rotation keeps large pulls stable. The default works out of the box.

## Actor input object example

```json
{
  "queries": [
    "iphone 13"
  ],
  "searchUrls": [
    "https://www.marktplaats.nl/q/racefiets/"
  ],
  "searchInTitleAndDescription": false,
  "condition": "",
  "delivery": "",
  "sortBy": "SORT_INDEX",
  "sortOrder": "INCREASING",
  "maxItems": 200,
  "maxConcurrency": 6,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "queries": [
        "iphone 13"
    ],
    "searchUrls": [
        "https://www.marktplaats.nl/q/racefiets/"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/marktplaats-nl-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 = {
    "queries": ["iphone 13"],
    "searchUrls": ["https://www.marktplaats.nl/q/racefiets/"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/marktplaats-nl-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 '{
  "queries": [
    "iphone 13"
  ],
  "searchUrls": [
    "https://www.marktplaats.nl/q/racefiets/"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/marktplaats-nl-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Marktplaats.nl Scraper — Search, Paste-URL & Seller · 24 Fields",
        "description": "Scrape Marktplaats.nl listings — keyword search, paste any search/category URL, or pull a seller's items. Each row: title, price + bid type, condition, delivery, location with lat/lng, seller, photos, attributes & full description. Filter by price, condition, postcode radius. JSON or CSV.",
        "version": "0.0",
        "x-build-id": "d0a9q7Tn2psx7ke2O"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~marktplaats-nl-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-marktplaats-nl-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/memo23~marktplaats-nl-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-marktplaats-nl-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/memo23~marktplaats-nl-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-marktplaats-nl-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": {
                    "queries": {
                        "title": "Search terms (keyword search)",
                        "type": "array",
                        "description": "Keyword searches across the whole Marktplaats board, e.g. [\"iphone 13\", \"racefiets\"]. Each term runs a full search. Filters below apply to these terms.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchUrls": {
                        "title": "Search / category URLs",
                        "type": "array",
                        "description": "Paste any Marktplaats search or category URL (e.g. https://www.marktplaats.nl/q/racefiets/ or a /l/<category>/ page). The on-site filters in the URL are carried over automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sellerIds": {
                        "title": "Seller IDs",
                        "type": "array",
                        "description": "Numeric seller IDs (from a seller page URL or the sellerId field in output). Returns every active listing from each seller.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchInTitleAndDescription": {
                        "title": "Match in title and description",
                        "type": "boolean",
                        "description": "When on, the search term must appear in the title OR description (broader). Off = title match only.",
                        "default": false
                    },
                    "priceMin": {
                        "title": "Minimum price (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only listings priced at or above this many euros."
                    },
                    "priceMax": {
                        "title": "Maximum price (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only listings priced at or below this many euros."
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "",
                            "Nieuw",
                            "Zo goed als nieuw",
                            "Gebruikt",
                            "Refurbished"
                        ],
                        "type": "string",
                        "description": "Filter by item condition.",
                        "default": ""
                    },
                    "delivery": {
                        "title": "Delivery method",
                        "enum": [
                            "",
                            "Ophalen",
                            "Verzenden"
                        ],
                        "type": "string",
                        "description": "Filter by how the item is handed over.",
                        "default": ""
                    },
                    "postcode": {
                        "title": "Postcode (location centre)",
                        "type": "string",
                        "description": "Dutch postcode, e.g. 1011AB. Combine with radius below for a location search."
                    },
                    "distanceKm": {
                        "title": "Radius (km)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Search radius in kilometres around the postcode above."
                    },
                    "category": {
                        "title": "Category (by name)",
                        "type": "string",
                        "description": "Filter by category name in Dutch, e.g. \"Fietsen\", \"Racefietsen\", \"Telefoons\". Resolved to a category ID automatically. For exact control, use the category IDs below instead."
                    },
                    "l1CategoryId": {
                        "title": "Category ID (level 1)",
                        "type": "integer",
                        "description": "Top-level Marktplaats category ID to restrict results. Usually set automatically when you paste a category URL."
                    },
                    "l2CategoryId": {
                        "title": "Sub-category ID (level 2)",
                        "type": "integer",
                        "description": "Sub-category ID to restrict results. Usually set automatically when you paste a category URL."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "SORT_INDEX",
                            "PRICE",
                            "DATE"
                        ],
                        "type": "string",
                        "description": "Order results by relevance, price, or date.",
                        "default": "SORT_INDEX"
                    },
                    "sortOrder": {
                        "title": "Sort order",
                        "enum": [
                            "INCREASING",
                            "DECREASING"
                        ],
                        "type": "string",
                        "description": "Ascending or descending order for the sort above.",
                        "default": "INCREASING"
                    },
                    "maxItems": {
                        "title": "Maximum listings",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on listing rows per run. Each kept listing is one paid result. Default 200. Free-tier users are capped at 100.",
                        "default": 200
                    },
                    "maxConcurrency": {
                        "title": "Max parallel fetches",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many search sources to paginate in parallel. 5-8 is the reliable sweet spot.",
                        "default": 6
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. The API works direct, but residential rotation keeps large pulls stable. The default works out of the box.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
