{
  "openapi": "3.0.1",
  "info": {
    "title": "Jobbird Scraper [💰$0.90] - Netherlands, Germany & UK + Salary",
    "description": "Scrape Jobbird jobs in the Netherlands, Germany and the UK by keyword, city + radius, category, hours and contract type. 53 fields: salary min/max/period, company website, region, distance in km, employer type, full description, emails and phones. Incremental monitoring and alerts.",
    "version": "0.1",
    "x-build-id": "hYOTV1F5vD08TGkA9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/corvuslab~jobbird-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-corvuslab-jobbird-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/corvuslab~jobbird-scraper/runs": {
      "post": {
        "operationId": "runs-sync-corvuslab-jobbird-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/corvuslab~jobbird-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-corvuslab-jobbird-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": {
          "searchTerms": {
            "title": "🔑 Search terms",
            "type": "array",
            "description": "Job titles, skills or company names, e.g. \"developer\", \"verpleegkundige\", \"logistiek medewerker\". Leave empty to get every job matching your other filters. A term with no matches returns nothing — never unrelated jobs.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "🌍 Countries",
            "type": "array",
            "description": "Which Jobbird country sites to search — each has its own jobs. Defaults to the Netherlands.",
            "items": {
              "type": "string",
              "enum": [
                "nl",
                "de",
                "uk"
              ],
              "enumTitles": [
                "🇳🇱 Netherlands",
                "🇩🇪 Germany",
                "🇬🇧 United Kingdom"
              ]
            },
            "default": [
              "nl"
            ]
          },
          "locations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "Cities, towns or Dutch postcodes, e.g. \"Amsterdam\", \"Den Haag\", \"1012AB\", \"Berlin\", \"Manchester\". Only jobs within the radius below are returned. A place the site does not recognise is skipped with a warning rather than returning jobs from the whole country. Provinces are not supported. Leave empty to search the whole country.",
            "items": {
              "type": "string"
            }
          },
          "radiusKm": {
            "title": "📏 Radius (km)",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How far around each location to search.",
            "default": 30
          },
          "startUrls": {
            "title": "📋 Start URLs",
            "type": "array",
            "description": "Optional. Paste Jobbird search URLs (e.g. https://www.jobbird.com/nl/vacature?s=developer — every filter in the URL is kept) or job URLs, from any country site. When set, these replace the search form above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "🔢 Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs to return across all searches. Set 0 for no limit. Jobbird shows up to 7,500 jobs per search — add search terms, locations or categories to collect more.",
            "default": 25
          },
          "maxResultsPerSearch": {
            "title": "⚖️ Max results per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Cap each single search (one country × search term × location) so a multi-keyword or multi-city run comes back balanced. 0 = no per-search cap.",
            "default": 0
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "auto",
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Order of the results. Automatic sorts newest first, except on the German site: there one job platform refreshes its ads every day and would fill the newest-first pages, so German results come most relevant first. Pick Newest first to get the newest jobs first in every country.",
            "default": "auto"
          },
          "postedWithin": {
            "title": "📅 Posted within",
            "enum": [
              "any",
              "0",
              "1",
              "7",
              "30"
            ],
            "type": "string",
            "description": "Only jobs posted or refreshed recently.",
            "default": "any"
          },
          "categories": {
            "title": "🗂️ Categories",
            "type": "array",
            "description": "Only jobs in these Jobbird categories, by name or as in the site's URL, e.g. \"ICT\", \"Zorg en medisch\", \"techniek\" (Netherlands), \"IT\", \"Logistik und Lager\" (Germany), \"Retail\" (United Kingdom).",
            "items": {
              "type": "string"
            }
          },
          "contractTypes": {
            "title": "📝 Contract types",
            "type": "array",
            "description": "Only jobs with these contract types, e.g. \"Fulltime\", \"Parttime\", \"Stage\", \"Bijbaan\", \"Freelance-zzp\" (Netherlands), \"Vollzeit\", \"Teilzeit\", \"Minijob\", \"Praktikum\" (Germany). Many jobs do not state one.",
            "items": {
              "type": "string"
            }
          },
          "educationLevels": {
            "title": "🎓 Education levels",
            "type": "array",
            "description": "Only jobs asking for these education levels, e.g. \"MBO\", \"HBO\", \"WO\" (Netherlands).",
            "items": {
              "type": "string"
            }
          },
          "workingHours": {
            "title": "⏱️ Hours per week",
            "type": "array",
            "description": "Only jobs in these weekly-hours ranges.",
            "items": {
              "type": "string",
              "enum": [
                "0-8",
                "9-16",
                "17-24",
                "25-32",
                "33-36",
                "37-*",
                "missing"
              ],
              "enumTitles": [
                "0–8 hours",
                "9–16 hours",
                "17–24 hours",
                "25–32 hours",
                "33–36 hours",
                "37+ hours",
                "Hours not stated"
              ]
            }
          },
          "applicationMethods": {
            "title": "📨 How to apply",
            "type": "array",
            "description": "Only jobs with these application options.",
            "items": {
              "type": "string",
              "enum": [
                "on_site",
                "off_site",
                "whatsapp",
                "is_motivation_mandatory"
              ],
              "enumTitles": [
                "Apply on Jobbird",
                "Apply on the employer's website",
                "Apply via WhatsApp",
                "No cover letter required"
              ]
            }
          },
          "directEmployerOnly": {
            "title": "🏢 Direct employers only",
            "type": "boolean",
            "description": "Only jobs posted by the employer itself, not by an agency. Netherlands and Germany only.",
            "default": false
          },
          "salaryOnly": {
            "title": "💰 Only jobs with a salary",
            "type": "boolean",
            "description": "Skip jobs that do not publish a pay range. Skipped jobs are not charged.",
            "default": false
          },
          "includeDetails": {
            "title": "🔬 Full job details",
            "type": "boolean",
            "description": "Open every job to add its full description (text, HTML and Markdown), category, contract types, languages, employer type and any emails, phone numbers and links written in it. Turn off for the fastest runs with search-result fields only.",
            "default": true
          },
          "includeCompanyDetails": {
            "title": "🏷️ Company website & address",
            "type": "boolean",
            "description": "Also add the employer's website, region, street address and the employer's own apply link (needs Full job details). Turn off for faster runs.",
            "default": true
          },
          "descriptionFormat": {
            "title": "📝 Description format",
            "enum": [
              "all",
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "Which representation(s) of the job description to include.",
            "default": "all"
          },
          "descriptionMaxLength": {
            "title": "✂️ Description max length",
            "minimum": 0,
            "type": "integer",
            "description": "Cut descriptions to this many characters. 0 = full length.",
            "default": 0
          },
          "compact": {
            "title": "📦 Compact records",
            "type": "boolean",
            "description": "Emit only the core fields (title, company, location, category, hours, salary, links, date). Ideal for AI agents and MCP clients.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Drop empty fields",
            "type": "boolean",
            "description": "Remove null, empty-string and empty-list fields from each record.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental mode",
            "type": "boolean",
            "description": "Track jobs between runs and tag every record NEW / UPDATED / UNCHANGED / EXPIRED. Unchanged jobs are skipped and not charged.",
            "default": false
          },
          "stateKey": {
            "title": "🗝️ State key",
            "type": "string",
            "description": "Stable name for the tracked search. Leave empty to derive one automatically from your search settings."
          },
          "emitUnchanged": {
            "title": "🔁 Include unchanged jobs",
            "type": "boolean",
            "description": "Also emit jobs that have not changed since the previous run.",
            "default": false
          },
          "emitExpired": {
            "title": "🗑️ Include expired jobs",
            "type": "boolean",
            "description": "Emit jobs that were open before but are gone now. Needs a run that reads the whole search (Max results 0 or above the number of matches).",
            "default": false
          },
          "skipReposts": {
            "title": "♻️ Skip re-posted jobs",
            "type": "boolean",
            "description": "Leave out jobs that an employer took down and posted again under a new link (same title, company and location as a job already tracked). They are not charged. Every new job still carries isRepost either way.",
            "default": false
          },
          "telegramToken": {
            "title": "💬 Telegram bot token",
            "type": "string",
            "description": "Bot token from @BotFather."
          },
          "telegramChatId": {
            "title": "🆔 Telegram chat ID",
            "type": "string",
            "description": "Chat or channel ID, e.g. \"-100123456789\" or \"@yourchannel\"."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack webhook URL",
            "type": "string",
            "description": "Slack incoming-webhook URL."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord webhook URL",
            "type": "string",
            "description": "Discord incoming-webhook URL."
          },
          "webhookUrl": {
            "title": "🪝 Webhook URL",
            "type": "string",
            "description": "Any HTTPS endpoint. Receives a JSON POST with the matched jobs — works with n8n, Make and Zapier."
          },
          "webhookHeaders": {
            "title": "🧾 Webhook headers",
            "type": "object",
            "description": "Extra headers for the webhook request, e.g. {\"Authorization\": \"Bearer xyz\"}."
          },
          "notificationLimit": {
            "title": "🔢 Jobs per notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many jobs to include in each notification message.",
            "default": 5
          },
          "notifyOnlyChanges": {
            "title": "🎯 Alert only on changes",
            "type": "boolean",
            "description": "In incremental mode, alerts list only new, updated and reappeared jobs, even when Include unchanged jobs is on.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "On by default: Apify Proxy runs alongside the Actor's own connection, so large runs finish several times faster. Turn it off to use only the Actor's own connection — slower, and Apify Proxy is still brought in by itself if the site starts refusing.",
            "default": {
              "useApifyProxy": true
            }
          },
          "ignoreUrlFailures": {
            "title": "⏭️ Ignore URL failures",
            "type": "boolean",
            "description": "Skip start URLs that cannot be interpreted instead of failing the whole run.",
            "default": true
          },
          "maxRequestRetries": {
            "title": "🔄 Max request retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed request before giving up on it.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}