{
  "openapi": "3.0.1",
  "info": {
    "title": "Marktplaats Scraper: Ads, Cars, Sellers & Alerts",
    "description": "Marktplaats.nl ads by keyword, category, search link, seller or ad link, no login; a search over the 5,000 ad cap is split by category. Rows hold price, place, km from your postcode, condition, photos, Dagtopper flags; ad pages add views, bids, car data. New ad alerts, pay per ad, JSON, CSV, API.",
    "version": "0.1",
    "x-build-id": "BeIhk85wQ6j6gHjE1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~marktplaats-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-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/automation_craft~marktplaats-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-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/automation_craft~marktplaats-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "What to search for, as you would type it on Marktplaats (\"gazelle fiets\", \"iphone 15\", \"lego technic\"). Each keyword is its own search; Marktplaats's own search also finds close spellings. Not allowed: / \\ # ? % +.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Marktplaats categories by address words (\"fietsen-en-brommers\", \"auto-s\", \"kleding-heren/schoenen\"), name (\"Fietsen en Brommers\") or id (\"445\"). A sub category is \"top/sub\". The table of 36 top and 1,982 sub categories is the site's own, read 2026-10-20; a name several categories share returns a free row with the candidates.",
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "Search links",
            "type": "array",
            "description": "Links copied from Marktplaats: a search (\"/q/fiets/\"), a category (\"/l/auto-s/\"), with its filters (\"/f/benzine/473/\", \"/ta/offeredSince/Vandaag/\") and its \"#\" part (price, construction year and mileage ranges, postcode and distance, sort). A seller page (\"/u/name/123/\") works too. A link keeps its own filters.",
            "items": {
              "type": "string"
            }
          },
          "sellerUrls": {
            "title": "Sellers",
            "type": "array",
            "description": "Seller pages (\"https://www.marktplaats.nl/u/name/12345678/\") or seller ids (\"12345678\"): every ad of each seller.",
            "items": {
              "type": "string"
            }
          },
          "adUrls": {
            "title": "Ad links",
            "type": "array",
            "description": "Ad links (\"https://www.marktplaats.nl/v/.../m2455721910-...\") or ad ids with their letter (\"m2455721910\", \"a1529353272\"). Each ad page is read (one view on the ad's counter) and delivered with its full details as one Listing. A removed or unknown ad is a free row.",
            "items": {
              "type": "string"
            }
          },
          "postedWithin": {
            "title": "Placed within",
            "enum": [
              "any",
              "today",
              "yesterday",
              "week"
            ],
            "type": "string",
            "description": "The site's own date window (\"Aangeboden sinds\"). A monitor uses \"yesterday\" unless set. Without it, sort \"newest\" reads today first, then yesterday, then the week, until it holds enough ads."
          },
          "condition": {
            "title": "Condition",
            "type": "array",
            "description": "One or more conditions, matched against each search's own condition filter.",
            "items": {
              "type": "string",
              "enum": [
                "new",
                "refurbished",
                "asGoodAsNew",
                "used",
                "notWorking",
                "worn"
              ],
              "enumTitles": [
                "New (Nieuw)",
                "Refurbished",
                "As good as new (Zo goed als nieuw)",
                "Used (Gebruikt)",
                "Not working (Niet werkend)",
                "Worn (Gedragen)"
              ]
            }
          },
          "delivery": {
            "title": "Delivery",
            "enum": [
              "any",
              "pickup",
              "shipping"
            ],
            "type": "string",
            "description": "Pickup or shipping, as the seller offers it."
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "any",
              "private",
              "business"
            ],
            "type": "string",
            "description": "Where the search has the site's own seller filter (cars and some other categories) it is sent to Marktplaats; elsewhere each ad page is read to see the seller type, so each delivered ad also bills Listing details and adds one view to the ad."
          },
          "buyItNowOnly": {
            "title": "Buy it now only (Direct Kopen)",
            "type": "boolean",
            "description": "Only ads that can be bought at once on Marktplaats."
          },
          "urgentOnly": {
            "title": "Must go now only (Moet nu weg)",
            "type": "boolean",
            "description": "Only ads marked \"Moet nu weg\"."
          },
          "attributeFilters": {
            "title": "More filters of the site",
            "type": "object",
            "description": "Any other filter Marktplaats shows for the search, by its key or Dutch label, with values as the site labels them: {\"fuel\": [\"Benzine\", \"Hybride Elektrisch/Benzine\"], \"transmission\": [\"Automaat\"], \"body\": [\"SUV of Terreinwagen\"]} for cars. A filter or value the search does not have returns a free row listing those it has."
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "number",
            "description": "Euros, cents allowed. Ads without a price figure are left out when a price filter is set."
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "number",
            "description": "Euros, cents allowed."
          },
          "priceTypes": {
            "title": "Price types",
            "type": "array",
            "description": "Only ads with these price types (the site's own list).",
            "items": {
              "type": "string",
              "enum": [
                "FIXED",
                "MIN_BID",
                "FAST_BID",
                "FREE_BID",
                "FREE",
                "SEE_DESCRIPTION",
                "ON_REQUEST",
                "EXCHANGE",
                "RESERVED",
                "NOTK",
                "NVT"
              ],
              "enumTitles": [
                "Fixed price",
                "Bidding from a minimum",
                "Bidding",
                "Bidding, free start",
                "Free (Gratis)",
                "See description",
                "On request",
                "Exchange (Ruilen)",
                "Reserved",
                "To be agreed (N.o.t.k.)",
                "Not applicable (N.v.t.)"
              ]
            }
          },
          "postcode": {
            "title": "Postcode",
            "type": "string",
            "description": "A Dutch postcode (\"1012AB\" or \"1012\"): every row gets its distance in km, measured by Marktplaats from this postcode."
          },
          "radiusKm": {
            "title": "Within km of the postcode",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Only ads within this many km of the postcode (needs \"postcode\"). The whole search is read and the rows outside are left out free."
          },
          "minYear": {
            "title": "Construction year from (cars)",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Cars and other vehicles: the row's construction year."
          },
          "maxYear": {
            "title": "Construction year to (cars)",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Cars and other vehicles: the row's construction year."
          },
          "minMileageKm": {
            "title": "Mileage from (km)",
            "minimum": 0,
            "maximum": 5000000,
            "type": "integer",
            "description": "Cars and other vehicles: the row's mileage."
          },
          "maxMileageKm": {
            "title": "Mileage to (km)",
            "minimum": 0,
            "maximum": 5000000,
            "type": "integer",
            "description": "Cars and other vehicles: the row's mileage."
          },
          "postedAfter": {
            "title": "Placed on or after",
            "type": "string",
            "description": "A day (YYYY-MM-DD), compared with the day each ad shows (a boosted Dagtopper ad shows the day of its boost)."
          },
          "postedBefore": {
            "title": "Placed on or before",
            "type": "string",
            "description": "A day (YYYY-MM-DD), compared with the day each ad shows."
          },
          "includeKeywords": {
            "title": "Must contain one of",
            "type": "array",
            "description": "Whole words; an ad is kept when its title or text holds at least one (the full description too when details are read).",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Must not contain",
            "type": "array",
            "description": "Whole words; an ad whose title or text holds any of them is left out free.",
            "items": {
              "type": "string"
            }
          },
          "titleOnly": {
            "title": "Search words in the title only",
            "type": "boolean",
            "description": "Keep only ads whose title holds every search word (Marktplaats searches titles and descriptions and close spellings)."
          },
          "promotedAds": {
            "title": "Promoted ads",
            "enum": [
              "all",
              "noTopAds",
              "organicOnly"
            ],
            "type": "string",
            "description": "Marktplaats puts paid ads first: the top block (Topadvertentie), Admarkt ads of web shops and daily boosted Dagtoppers. Left out ads are free."
          },
          "excludeAdIds": {
            "title": "Ad ids to leave out",
            "type": "array",
            "description": "Ad ids (\"m2455721910\") or links you already have; they are left out free.",
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "site",
              "newest",
              "oldest",
              "priceLow",
              "priceHigh",
              "nearest"
            ],
            "type": "string",
            "description": "Marktplaats sorts only through a door its robots.txt disallows, so the Actor sorts each search itself: it reads the search (or its date window) to the end and delivers the rows in this order. \"As Marktplaats shows it\" delivers while it reads."
          },
          "maxItems": {
            "title": "Maximum ads",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most ad rows the run delivers. Default 100."
          },
          "maxItemsPerSearch": {
            "title": "Maximum ads per search",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most rows one search delivers."
          },
          "maxPagesPerSearch": {
            "title": "Maximum reads per search",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Reads of 100 ads per search (a monitor reads this many of each search every run). Default: to the end."
          },
          "readPasses": {
            "title": "Read passes",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Marktplaats orders a keyword search differently on each read, so one pass can miss a few ads; a search short of the site's count is read again, up to this many passes (only while a pass finds new ads). Default 2."
          },
          "splitLargeSearches": {
            "title": "Read past 5,000 ads",
            "type": "boolean",
            "description": "On by default (not for monitors): a search with more ads than Marktplaats serves of one search is split into its sub categories and the site's own filter values."
          },
          "includeDetails": {
            "title": "Full ad details (Listing details, adds a view)",
            "type": "boolean",
            "description": "Off by default. Reads each delivered ad's page: full description (text and HTML), every attribute, all images, views, favourites, the exact time it was placed, bids, shipping options, the seller's type, years on Marktplaats and city; for cars also the licence plate, inspection (APK) date, owners and the site's car data. Billed as Listing details. Each read adds one view to the ad's counter (once per run)."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off by default. On: a private seller's id, name, profile link and phone number (when the ad page shows one), the ad's map point, and bidders' ids and names. Off: those fields are null for private sellers and for sellers whose kind is not known; a business seller's are always delivered. You are responsible for a lawful use, GDPR included."
          },
          "includeRawData": {
            "title": "Include the raw data",
            "type": "boolean",
            "description": "Adds \"raw\": the site's own objects for the row (with personal data on, or for a business seller)."
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "A short name (\"gazelle-amsterdam\"). One name belongs to one set of settings; the memory never forgets an ad it delivered."
          },
          "resetMonitor": {
            "title": "Start the monitor again",
            "type": "boolean",
            "description": "Forget what this monitor delivered before this run."
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "The token BotFather gave your bot."
          },
          "telegramChatId": {
            "title": "Telegram chat id",
            "type": "string",
            "description": "Your chat id (a number) or a channel name starting with @."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "A Slack incoming webhook (https://hooks.slack.com/...)."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL",
            "type": "string",
            "description": "A Discord channel webhook."
          },
          "whatsappAccessToken": {
            "title": "WhatsApp Cloud API token",
            "type": "string",
            "description": "Your own WhatsApp Cloud API access token."
          },
          "whatsappPhoneNumberId": {
            "title": "WhatsApp phone number id",
            "type": "string",
            "description": "The id of your WhatsApp Cloud API number (digits)."
          },
          "whatsappTo": {
            "title": "WhatsApp recipient",
            "type": "string",
            "description": "The number to message, international form without + (31612345678)."
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Rows are POSTed here in batches of 100 (JSON)."
          },
          "webhookSecret": {
            "title": "Webhook secret",
            "type": "string",
            "description": "Signs each POST (X-Signature-Sha256, HMAC SHA-256 of the body); 16 to 200 letters, digits and - _ . ~."
          },
          "webhookHeaders": {
            "title": "Webhook headers",
            "type": "object",
            "description": "Extra headers for the webhook, at most 10."
          },
          "notificationLimit": {
            "title": "Ads per message",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "The most ads listed in one Telegram, Slack, Discord or WhatsApp notification. Default 10."
          },
          "failIfIncomplete": {
            "title": "Fail the run when a search is incomplete",
            "type": "boolean",
            "description": "Off by default: the run ends as succeeded with coverage rows that say what was not read."
          },
          "maxFailedRequestsPercent": {
            "title": "Fail above this share of failed reads (%)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Fail the run when more than this percent of its reads failed."
          },
          "requestsPerSecond": {
            "title": "Requests per second",
            "minimum": 0.05,
            "maximum": 0.14,
            "type": "number",
            "description": "The pace of the run's requests: at most 0.14 a second (one every 7 s), the default, which keeps under the rate Marktplaats allows one address; lower is slower."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify's datacenter proxy (the default: Marktplaats answers it), or your own proxy links."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}