{
  "openapi": "3.0.1",
  "info": {
    "title": "Netherlands Tenders Scraper: TenderNed Aanbestedingen to Excel",
    "description": "Scrape Dutch public tenders (aanbestedingen) from TenderNed via the official public JSON API, no key. Filter by keyword, CPV, province, procedure, contract type, open deadline. \"Only new\" daily alerts. Excel, CSV, JSON. GDPR-safe contacts off by default.",
    "version": "1.0",
    "x-build-id": "VnkUlWc7NjMUwoF77"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tenderfeed~netherlands-tenderned-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tenderfeed-netherlands-tenderned-tenders",
        "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/tenderfeed~netherlands-tenderned-tenders/runs": {
      "post": {
        "operationId": "runs-sync-tenderfeed-netherlands-tenderned-tenders",
        "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/tenderfeed~netherlands-tenderned-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-tenderfeed-netherlands-tenderned-tenders",
        "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": "Words to look for in the tender name and description (Dutch), e.g. [\"software\", \"onderhoud\", \"schoonmaak\"]. Empty = all publications. When set, the Actor also uses TenderNed's server-side full-text `search` for speed.",
            "items": {
              "type": "string"
            }
          },
          "keywordMode": {
            "title": "Keyword match",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "Match ANY or ALL keywords (client-side on title + description).",
            "default": "any"
          },
          "noticeTypes": {
            "title": "Publication types (aankondiging)",
            "type": "array",
            "description": "Empty = opportunity-oriented notices: AAO (contract notice), REC (rectification), MAC (market consultation), VAK (prior information). Add AGO (award), AAW (modification) or VBE (early termination) for awards and closures.",
            "items": {
              "type": "string",
              "enum": [
                "AAO",
                "REC",
                "MAC",
                "VAK",
                "AGO",
                "AAW",
                "VBE"
              ],
              "enumTitles": [
                "AAO — Aankondiging opdracht (contract notice)",
                "REC — Rectificatie",
                "MAC — Marktconsultatie",
                "VAK — Vooraankondiging (prior information)",
                "AGO — Aankondiging gegunde opdracht (award)",
                "AAW — Aankondiging van een wijziging",
                "VBE — Vroegtijdige beëindiging"
              ]
            }
          },
          "contractTypes": {
            "title": "Contract types (type opdracht)",
            "type": "array",
            "description": "Empty = all. D = Diensten (services), L = Leveringen (supplies), W = Werken (works). Applied server-side when a single type is selected.",
            "items": {
              "type": "string",
              "enum": [
                "D",
                "L",
                "W"
              ],
              "enumTitles": [
                "D — Diensten (services)",
                "L — Leveringen (supplies)",
                "W — Werken (works)"
              ]
            }
          },
          "procedures": {
            "title": "Procedures",
            "type": "array",
            "description": "Empty = all. Applied server-side when a single procedure is selected.",
            "items": {
              "type": "string",
              "enum": [
                "OPE",
                "NOP",
                "CCD",
                "OMB",
                "OZB",
                "OHP",
                "OH",
                "INP",
                "CA",
                "APM",
                "APE",
                "VUB",
                "MAC"
              ],
              "enumTitles": [
                "OPE — Openbaar",
                "NOP — Niet-openbaar",
                "CCD — Concurrentiegerichte dialoog",
                "OMB — Onderhandelingsprocedure met bekendmaking",
                "OZB — Onderhandelingsprocedure zonder bekendmaking",
                "OHP — Openbare procedure met preselectie",
                "OH — Onderhandelingsprocedure",
                "INP — Innovatiepartnerschap",
                "CA — Concurrentie met onderhandeling",
                "APM — Aanbesteding via marktplaats",
                "APE — Aanbesteding via e-procurement",
                "VUB — Vrijwillige publicatie onderhandeling",
                "MAC — Marktconsultatie"
              ]
            }
          },
          "provinces": {
            "title": "Provinces",
            "type": "array",
            "description": "Dutch provinces of performance (NUTS), accent-insensitive, e.g. [\"Noord-Holland\", \"Zuid-Holland\", \"Utrecht\", \"Limburg\"]. Empty = all of the Netherlands. Nationwide notices (NUTS NL) are kept when any province filter is set.",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes (prefix)",
            "type": "array",
            "description": "Common Procurement Vocabulary prefixes, e.g. [\"72\", \"45000000\", \"48000000-8\"]. Prefix match: \"72\" keeps every IT-services code.",
            "items": {
              "type": "string"
            }
          },
          "buyerName": {
            "title": "Buyer name contains",
            "type": "string",
            "description": "Opdrachtgever name contains (case-insensitive), e.g. \"gemeente\", \"ministerie\", \"provinicie\"."
          },
          "publishedFrom": {
            "title": "Published from",
            "type": "string",
            "description": "YYYY-MM-DD or relative (\"7 days\", \"30days\"). Default: 7 days ago. Newest publications first. TenderNed has no reliable server-side date filter, so the Actor pages chronologically and stops past this date."
          },
          "publishedTo": {
            "title": "Published to",
            "type": "string",
            "description": "YYYY-MM-DD. Default: today."
          },
          "onlyOpen": {
            "title": "Only open for offers",
            "type": "boolean",
            "description": "Keep only publications whose submission deadline (sluitingsDatum) is today or later and that are not marked awarded / early-terminated. Turn off to include awards and closed notices.",
            "default": true
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no limit. Default 50. TenderNed publishes ~2,500 notices per 30 days (~80/day).",
            "default": 50
          },
          "includeBuyerContacts": {
            "title": "Include buyer contacts",
            "type": "boolean",
            "description": "TenderNed's public API does not publish personal emails or phone numbers. Left off by default for GDPR; keep off unless you later enrich contacts yourself.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new publications (monitoring mode)",
            "type": "boolean",
            "description": "Remember what earlier runs delivered and return (and charge for) only publications you have not received yet. Ideal for scheduled daily alerts.",
            "default": false
          },
          "monitoringId": {
            "title": "Monitoring ID",
            "type": "string",
            "description": "Name of the watch-list memory used by 'Only new'. Use a different ID per saved search/schedule."
          },
          "includeRawData": {
            "title": "Include raw TenderNed detail",
            "type": "boolean",
            "description": "Adds the full TenderNed detail JSON under `raw` (bigger output).",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}