{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Jobs Scraper: Workday, Greenhouse, Lever & Teamtailor Jobs",
    "description": "Search live jobs from 6,500+ European employers' career sites on Workday, Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and Teamtailor. No company list needed: filter by keyword, country (NL, DE, UK, DACH, Nordics), remote and date. New-jobs alerts. $8 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "Mv4wqqqVhnbacIQAK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jordydev~eu-job-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jordydev-eu-job-search",
        "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/jordydev~eu-job-search/runs": {
      "post": {
        "operationId": "runs-sync-jordydev-eu-job-search",
        "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/jordydev~eu-job-search/run-sync": {
      "post": {
        "operationId": "run-sync-jordydev-eu-job-search",
        "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": "Job title keywords (any)",
            "type": "array",
            "description": "Keep jobs whose title contains at least one of these words or phrases, e.g. \"data engineer\", \"python\" (whole words, case- and accent-insensitive). Empty = all jobs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Where the job is. ISO codes (NL, DE, GB…), country names (Netherlands) or groups: EU, EUROPE, BENELUX, DACH, NORDICS, UKI. Add REMOTE to also keep fully remote jobs without a country. Multi-location jobs match if any location is in these countries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep jobs published (or, if the ATS has no publish date, updated) in the last N days. 0 = no limit.",
            "default": 0
          },
          "companies": {
            "title": "Companies (optional)",
            "type": "array",
            "description": "Leave empty to search the built-in directory of European employers (search mode). Or list your own: \"ats:slug\" (greenhouse:airbnb, lever:spotify, ashby:ramp, workable:huggingface, recruitee:bunq, personio:tado, teamtailor:career, workday:nvidia/wd5/NVIDIAExternalCareerSite), a job-board URL (https://philips.wd3.myworkdayjobs.com/jobs-and-careers), a careers-page URL that embeds a board, or a company name to auto-detect.",
            "items": {
              "type": "string"
            }
          },
          "ats": {
            "title": "Only these ATSs (search mode)",
            "type": "array",
            "description": "Limit search mode to employers on these applicant tracking systems. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "workday",
                "greenhouse",
                "lever",
                "ashby",
                "workable",
                "recruitee",
                "personio",
                "teamtailor"
              ],
              "enumTitles": [
                "Workday",
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workable",
                "Recruitee",
                "Personio",
                "Teamtailor"
              ]
            },
            "default": []
          },
          "companyQuery": {
            "title": "Employer name contains (search mode)",
            "type": "string",
            "description": "Only search directory employers whose name contains this text. Separate alternatives with commas, e.g. \"bank, insurance\"."
          },
          "maxCompanies": {
            "title": "Max employers to check (search mode)",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Search mode checks the directory employers with the most open jobs in your countries (weighted by local focus) first, and stops at this many (or earlier when Max jobs is reached). Checking employers is free: you pay per job returned.",
            "default": 400
          },
          "maxJobs": {
            "title": "Max jobs in total",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many jobs. This is your cost cap: you pay per job returned.",
            "default": 200
          },
          "postedSince": {
            "title": "Posted since",
            "type": "string",
            "description": "Keep jobs posted on or after this date, e.g. 2026-10-01 or \"7 days\". Combined with \"Posted within (days)\" the stricter one wins."
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked remote (by the ATS workplace field or a \"Remote\" location).",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these, e.g. \"intern\", \"senior\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchInDescription": {
            "title": "Also match keywords in the description",
            "type": "boolean",
            "description": "Search the full job description as well as the title.",
            "default": false
          },
          "locations": {
            "title": "Locations (any)",
            "type": "array",
            "description": "Keep jobs whose location text contains one of these, e.g. \"Amsterdam\", \"Berlin\", \"remote\". Empty = anywhere.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeHybrid": {
            "title": "Count hybrid as remote",
            "type": "boolean",
            "description": "With \"Remote jobs only\", also keep hybrid jobs.",
            "default": false
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only these types. Empty = all (including jobs with an unknown type).",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "apprenticeship"
              ]
            },
            "default": []
          },
          "remote": {
            "title": "Remote (alias of Remote jobs only)",
            "type": "boolean",
            "description": "Same as \"Remote jobs only\".",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "Remember which jobs were already returned (in a named key-value store) and return only new ones. The first run returns everything and sets the baseline. Schedule the Actor daily for a new-jobs feed.",
            "default": false
          },
          "newOnly": {
            "title": "New only (alias)",
            "type": "boolean",
            "description": "Same as \"Only new jobs since the last run\".",
            "default": false
          },
          "onlyNewSinceLastRun": {
            "title": "Only new since last run (alias)",
            "type": "boolean",
            "description": "Same as \"Only new jobs\" (kept for compatibility with the spec name). If either is on, new-jobs mode is on.",
            "default": false
          },
          "stateName": {
            "title": "Feed name (for new-jobs mode)",
            "type": "string",
            "description": "Separate memory per feed. Use a different name for each saved task with different companies or filters.",
            "default": "default"
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "both",
              "none"
            ],
            "type": "string",
            "description": "Recruiter e-mail addresses and phone numbers are removed in all formats.",
            "default": "text"
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "0 = automatic: no limit with your own company list; in search mode max(5, Max jobs / 5) so results come from several employers.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Companies in parallel",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "0 = automatic (8 in search mode, 4 otherwise). Requests to the same host are always spaced out, whatever this is.",
            "default": 0
          },
          "autoDetectAts": {
            "title": "Auto-detect the ATS",
            "type": "boolean",
            "description": "For company names and careers-page URLs, find the board by probing each supported ATS with name-based slugs, or by scanning the careers page for a board link. Off = only \"ats:slug\" and board URLs are accepted.",
            "default": true
          },
          "requestDelayMs": {
            "title": "Delay between requests to one ATS (ms)",
            "minimum": 200,
            "maximum": 10000,
            "type": "integer",
            "description": "Politeness: minimum gap between two requests to the same API host.",
            "default": 500
          },
          "personioLanguage": {
            "title": "Personio feed language",
            "type": "string",
            "description": "Language code for Personio XML feeds (en, de, …). Empty = the board's default.",
            "default": "en"
          },
          "recruiteeToken": {
            "title": "Recruitee careers-site token (optional)",
            "type": "string",
            "description": "Only for a single company's own Recruitee board. Recruitee announced that its Careers Site API will need a token from 10 Feb 2027; until then it is not needed."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}