{
  "openapi": "3.0.1",
  "info": {
    "title": "Dutch & Belgian Companies Hiring Now – Vacancy Leads (NL/BE)",
    "description": "Which Dutch and Belgian companies are hiring near you, and for what? Vacancies (vacatures) straight from employers' own career sites, no agencies or job boards. Filter by province, city and job group; get one lead per company with open roles, new this week, hard-to-fill roles and hiring signals.",
    "version": "0.1",
    "x-build-id": "r84YpDXck05u11Hee"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/codeclouds~nlbe-vacature-leads-werkgevers/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-codeclouds-nlbe-vacature-leads-werkgevers",
        "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/codeclouds~nlbe-vacature-leads-werkgevers/runs": {
      "post": {
        "operationId": "runs-sync-codeclouds-nlbe-vacature-leads-werkgevers",
        "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/codeclouds~nlbe-vacature-leads-werkgevers/run-sync": {
      "post": {
        "operationId": "run-sync-codeclouds-nlbe-vacature-leads-werkgevers",
        "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": {
          "provinces": {
            "title": "Provinces (provincies)",
            "type": "array",
            "description": "Only vacancies in these provinces. The province is derived from the postcode first, then the place name, then the ATS region. Leave empty for the whole country. Nationwide/remote vacancies have no province and are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "NL-DR",
                "NL-FL",
                "NL-FR",
                "NL-GE",
                "NL-GR",
                "NL-LI",
                "NL-NB",
                "NL-NH",
                "NL-OV",
                "NL-UT",
                "NL-ZE",
                "NL-ZH",
                "BE-VAN",
                "BE-VLI",
                "BE-VOV",
                "BE-VWV",
                "BE-VBR",
                "BE-BRU",
                "BE-WBR",
                "BE-WHT",
                "BE-WLG",
                "BE-WNA",
                "BE-WLX"
              ],
              "enumTitles": [
                "Drenthe (NL)",
                "Flevoland (NL)",
                "Friesland (NL)",
                "Gelderland (NL)",
                "Groningen (NL)",
                "Limburg (NL)",
                "Noord-Brabant (NL)",
                "Noord-Holland (NL)",
                "Overijssel (NL)",
                "Utrecht (NL)",
                "Zeeland (NL)",
                "Zuid-Holland (NL)",
                "Antwerpen (BE)",
                "Limburg (BE)",
                "Oost-Vlaanderen (BE)",
                "West-Vlaanderen (BE)",
                "Vlaams-Brabant (BE)",
                "Brussel / Bruxelles (BE)",
                "Waals-Brabant / Brabant wallon (BE)",
                "Henegouwen / Hainaut (BE)",
                "Luik / Liège (BE)",
                "Namen / Namur (BE)",
                "Luxemburg / Luxembourg (BE)"
              ]
            }
          },
          "cities": {
            "title": "Cities (plaatsen)",
            "type": "array",
            "description": "Only vacancies in these places, e.g. Eindhoven, Tilburg, Den Bosch, Gent. Matches the city or location text, so it also works for vacancies without a postcode.",
            "items": {
              "type": "string"
            }
          },
          "jobGroups": {
            "title": "Job groups (beroepsgroepen)",
            "type": "array",
            "description": "Only vacancies in these job groups, classified from the job title (Dutch, English and French titles). Empty = all groups. Tip: everything except 'stage' leaves out internships and graduation projects.",
            "items": {
              "type": "string",
              "enum": [
                "logistiek",
                "transport",
                "productie",
                "techniek",
                "bouw",
                "zorg",
                "onderwijs",
                "horeca",
                "schoonmaak",
                "beveiliging",
                "retail",
                "klantenservice",
                "administratie",
                "financien",
                "ict",
                "sales",
                "marketing",
                "hr",
                "juridisch",
                "advies",
                "management",
                "stage",
                "overig"
              ],
              "enumTitles": [
                "Logistics / warehouse / purchasing (logistiek)",
                "Transport / drivers (transport)",
                "Production / manufacturing (productie)",
                "Technical / maintenance / inspection (techniek)",
                "Construction / civil (bouw)",
                "Healthcare / mental health (zorg)",
                "Education / childcare (onderwijs)",
                "Hospitality (horeca)",
                "Cleaning (schoonmaak)",
                "Security guards (beveiliging)",
                "Retail (retail)",
                "Customer service (klantenservice)",
                "Administration / office (administratie)",
                "Finance / accounting / tax (financien)",
                "IT (ict)",
                "Sales (sales)",
                "Marketing (marketing)",
                "HR / recruitment (hr)",
                "Legal (juridisch)",
                "Advisory / consultancy (advies)",
                "Management (management)",
                "Internships / graduation / student jobs (stage)",
                "Other (overig)"
              ]
            }
          },
          "titleKeywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Only vacancies whose title contains at least one of these words (case-insensitive), e.g. heftruck, monteur, verpleegkundige.",
            "items": {
              "type": "string"
            }
          },
          "minOpenJobs": {
            "title": "Minimum matching vacancies per employer",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Only employers with at least this many open matching vacancies (e.g. 3 for 'companies hiring 3+ technicians'). Employers from your own company list below it come back as free not_found records.",
            "default": 1
          },
          "minDaysOpen": {
            "title": "Only vacancies open at least (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Hard to fill: only vacancies open at least this many days, e.g. 60. These are the employers most likely to need help from an agency. 0 = no limit.",
            "default": 0
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only vacancies published in the last N days. 0 = no limit. Vacancies without a publication date are kept.",
            "default": 0
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Only vacancies located in these countries (NL = Netherlands, BE = Belgium).",
            "items": {
              "type": "string",
              "enum": [
                "NL",
                "BE"
              ],
              "enumTitles": [
                "Netherlands (NL)",
                "Belgium (BE)"
              ]
            },
            "default": [
              "NL",
              "BE"
            ]
          },
          "postcodes": {
            "title": "Postcode prefixes",
            "type": "array",
            "description": "Only vacancies whose postcode starts with one of these prefixes, e.g. 50 (Tilburg region), 5611, 2000 (Antwerpen). Dutch and Belgian codes overlap (28 is both Gouda and Mechelen): combine with Countries. Vacancies without a published postcode are excluded when this is set; use Cities for those.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Company websites or job pages",
            "type": "array",
            "description": "One per line: a website (acme.nl), a careers page (acme.nl/werken-bij), a company name, or a job-board URL (acme.recruitee.com, https://acme.teamtailor.com/jobs, https://apply.workable.com/acme). The job system is detected automatically. Employers without a public job system come back as free not_found records. Max 1,000 per run.",
            "items": {
              "type": "string"
            }
          },
          "alsoSearchDirectory": {
            "title": "Also search the built-in directory",
            "type": "boolean",
            "description": "With an own company list the built-in directory is skipped, unless this is on.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new since the previous run",
            "type": "boolean",
            "description": "Deliver only vacancies that were not there at the previous run of this feed, plus vacancies an earlier run matched but could not deliver (max vacancies or max charge). Company leads are only delivered (and charged) for employers with at least one genuinely new vacancy; their counts still cover all open matching vacancies. The first run stores the baseline and returns everything. Each task (or each filter combination) keeps its own history.",
            "default": false
          },
          "trackChanges": {
            "title": "Track changes between runs",
            "type": "boolean",
            "description": "Remember which vacancies each employer had, so the next run marks new ones (isNew) and counts closed ones. Needed for 'Only new'.",
            "default": true
          },
          "output": {
            "title": "What to deliver",
            "enum": [
              "leads",
              "leads_and_jobs",
              "jobs"
            ],
            "type": "string",
            "description": "Company leads only (one row per employer, with its top 3 newest vacancies inside), leads plus one row per vacancy, or vacancies only. Leads only gives the cleanest table and the lowest cost.",
            "default": "leads_and_jobs"
          },
          "maxCompanies": {
            "title": "Max employers to check (directory)",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Upper limit on directory employers checked per run. Employers matching your provinces/postcodes are selected first, larger employers before smaller ones.",
            "default": 100
          },
          "maxJobs": {
            "title": "Max vacancies per run",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Upper limit on vacancy rows delivered (and charged) per run, shared fairly over the employers (newest vacancies first). Company leads always count all matching vacancies.",
            "default": 500
          },
          "excludeStaffingAgencies": {
            "title": "Exclude staffing & recruitment agencies",
            "type": "boolean",
            "description": "Skip uitzendbureaus, detacheerders, recruiters and job boards (detected by name or by 'voor onze opdrachtgever zoeken wij' wording), so you only get direct employers.",
            "default": true
          },
          "sbiPrefixes": {
            "title": "SBI code prefixes (experimental, NL)",
            "type": "array",
            "description": "Only directory employers whose main KvK activity (SBI) starts with one of these codes, e.g. 86 (healthcare). Experimental: only a few dozen directory employers have known KvK data, so this narrows the result to very few leads. Not applied to your own company list.",
            "items": {
              "type": "string"
            }
          },
          "maxKvkLookups": {
            "title": "Max live KvK lookups per run",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "SBI code and legal form come from the KVK open dataset, which rate-limits hard: every lookup adds 25-90 seconds of run time. Results are cached in your account, so later runs get them for free. 0 = only cached/pre-enriched KvK data.",
            "default": 1
          },
          "includeDescription": {
            "title": "Include vacancy text",
            "type": "boolean",
            "description": "Add the plain-text vacancy description (max 20,000 characters) to each vacancy row. Makes the dataset much larger.",
            "default": false
          },
          "stateKey": {
            "title": "History key",
            "type": "string",
            "description": "Optional name for this feed's history (new/closed vacancies). By default each saved task, or else each combination of filters, has its own history. Set the same key on two runs to make them share one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}