{
  "data": {
    "id": "gw3YBVkV24sNW7w9O",
    "actId": "6jUhhkfjsSlsGsgzy",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-14T10:43:36.010Z",
    "finishedAt": "2026-11-14T10:43:40.794Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 4728,
      "runTimeSecs": 4.728,
      "computeUnits": 0.005253333333333333,
      "imageSizeBytes": 319219200
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "6GwdnIcc2aWR7LzCS",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"EURES Job Vacancy Scraper Input\",\n  \"description\": \"Search live job vacancies on EURES (the EU's job mobility portal), or fetch full details for specific job vacancy IDs.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byIds\"\n      ],\n      \"enumTitles\": [\n        \"Search job vacancies\",\n        \"Lookup by vacancy ID or URL\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Search query\",\n      \"type\": \"string\",\n      \"description\": \"Free-text keyword to search for (mode=search). Matches job title, description and employer name depending on `searchIn`.\",\n      \"editor\": \"textfield\",\n      \"default\": \"developer\",\n      \"prefill\": \"developer\"\n    },\n    \"searchIn\": {\n      \"title\": \"Search scope\",\n      \"type\": \"string\",\n      \"description\": \"Where the search query is matched.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"EVERYWHERE\",\n        \"TITLE\",\n        \"DESCRIPTION\",\n        \"EMPLOYER\"\n      ],\n      \"enumTitles\": [\n        \"Everywhere (title + description + employer)\",\n        \"Job title only\",\n        \"Job description only\",\n        \"Employer name only\"\n      ],\n      \"default\": \"EVERYWHERE\",\n      \"prefill\": \"EVERYWHERE\"\n    },\n    \"jobIds\": {\n      \"title\": \"Job vacancy IDs or URLs (mode=byIds)\",\n      \"type\": \"array\",\n      \"description\": \"EURES job vacancy IDs or full detail-page URLs, as found in the `jobId` or `sourceUrl` output field, e.g. `MzQwNDYwIDU` or `https://europa.eu/eures/portal/jv-se/jv-details/MzQwNDYwIDU`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"countries\": {\n      \"title\": \"Countries\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to job locations in these countries. Leave empty for all EEA countries.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"at\",\n          \"be\",\n          \"bg\",\n          \"ch\",\n          \"cy\",\n          \"cz\",\n          \"de\",\n          \"dk\",\n          \"ee\",\n          \"el\",\n          \"es\",\n          \"fi\",\n          \"fr\",\n          \"hr\",\n          \"hu\",\n          \"ie\",\n          \"is\",\n          \"it\",\n          \"li\",\n          \"lt\",\n          \"lu\",\n          \"lv\",\n          \"mt\",\n          \"nl\",\n          \"no\",\n          \"pl\",\n          \"pt\",\n          \"ro\",\n          \"se\",\n          \"si\",\n          \"sk\"\n        ],\n        \"enumTitles\": [\n          \"Austria\",\n          \"Belgium\",\n          \"Bulgaria\",\n          \"Switzerland\",\n          \"Cyprus\",\n          \"Czechia\",\n          \"Germany\",\n          \"Denmark\",\n          \"Estonia\",\n          \"Greece\",\n          \"Spain\",\n          \"Finland\",\n          \"France\",\n          \"Croatia\",\n          \"Hungary\",\n          \"Ireland\",\n          \"Iceland\",\n          \"Italy\",\n          \"Liechtenstein\",\n          \"Lithuania\",\n          \"Luxembourg\",\n          \"Latvia\",\n          \"Malta\",\n          \"Netherlands\",\n          \"Norway\",\n          \"Poland\",\n          \"Portugal\",\n          \"Romania\",\n          \"Sweden\",\n          \"Slovenia\",\n          \"Slovakia\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"regionCodes\": {\n      \"title\": \"Region codes (NUTS)\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to job locations in these region codes (finer-grained than `countries`), e.g. `deb` for Berlin (Germany) or `no0b` for Trondelag (Norway). Find a region's code in the `nutsRegionCodes` output field of a previous run, or on the EURES advanced-search location picker. Finer NUTS codes are automatically matched to the nearest supported parent region. Combines with `countries` as an OR (union of matches).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"sectors\": {\n      \"title\": \"Business sector (NACE)\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to these NACE Rev.2 business sectors.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"a\",\n          \"b\",\n          \"c\",\n          \"d\",\n          \"e\",\n          \"f\",\n          \"g\",\n          \"h\",\n          \"i\",\n          \"j\",\n          \"k\",\n          \"l\",\n          \"m\",\n          \"n\",\n          \"o\",\n          \"p\",\n          \"q\",\n          \"r\",\n          \"s\",\n          \"t\",\n          \"u\",\n          \"v\"\n        ],\n        \"enumTitles\": [\n          \"Agriculture, forestry and fishing\",\n          \"Mining and quarrying\",\n          \"Manufacturing\",\n          \"Electricity, gas, steam and air conditioning supply\",\n          \"Water supply, sewerage, waste management\",\n          \"Construction\",\n          \"Wholesale and retail trade; repair of motor vehicles\",\n          \"Transportation and storage\",\n          \"Accommodation and food service activities\",\n          \"Information and communication\",\n          \"Financial and insurance activities\",\n          \"Real estate activities\",\n          \"Professional, scientific and technical activities\",\n          \"Administrative and support service activities\",\n          \"Public administration and defence; social security\",\n          \"Education\",\n          \"Human health and social work activities\",\n          \"Arts, entertainment and recreation\",\n          \"Other service activities\",\n          \"Activities of households as employers\",\n          \"Activities of extraterritorial organisations and bodies\",\n          \"Other / not classified\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"positionOfferingCodes\": {\n      \"title\": \"Contract type\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to these contract/position offering types.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"directhire\",\n          \"temporary\",\n          \"temporarytohire\",\n          \"contracttohire\",\n          \"contract\",\n          \"apprenticeship\",\n          \"selfemployed\",\n          \"oncall\",\n          \"seasonal\",\n          \"internship\",\n          \"recruitmentreserve\",\n          \"volunteer\"\n        ],\n        \"enumTitles\": [\n          \"Direct hire\",\n          \"Temporary\",\n          \"Temporary to hire\",\n          \"Contract to hire\",\n          \"Contract\",\n          \"Apprenticeship\",\n          \"Self-employed\",\n          \"On-call\",\n          \"Seasonal\",\n          \"Internship\",\n          \"Recruitment reserve\",\n          \"Volunteer\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"positionScheduleCodes\": {\n      \"title\": \"Work schedule\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to these work schedules.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"fulltime\",\n          \"parttime\",\n          \"flextime\"\n        ],\n        \"enumTitles\": [\n          \"Full-time\",\n          \"Part-time\",\n          \"Flexible\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"educationLevels\": {\n      \"title\": \"Education level\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to these required education levels.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"basic\",\n          \"medium\",\n          \"tertiary\",\n          \"bachelor\",\n          \"master\",\n          \"doctoral\",\n          \"not_classified\"\n        ],\n        \"enumTitles\": [\n          \"Basic\",\n          \"Medium (secondary)\",\n          \"Tertiary\",\n          \"Bachelor\",\n          \"Master\",\n          \"Doctoral\",\n          \"Not classified\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"experienceLevels\": {\n      \"title\": \"Required experience\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to these required-experience bands.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"none_required\",\n          \"up_to_1_year\",\n          \"between_1_and_2_years\",\n          \"between_2_and_5_years\",\n          \"more_than_5_years\"\n        ],\n        \"enumTitles\": [\n          \"None required\",\n          \"Up to 1 year\",\n          \"1 to 2 years\",\n          \"2 to 5 years\",\n          \"More than 5 years\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"languageSkills\": {\n      \"title\": \"Required language skills\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to jobs requiring at least basic proficiency in these languages.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"bg\",\n          \"cs\",\n          \"da\",\n          \"de\",\n          \"et\",\n          \"el\",\n          \"en\",\n          \"es\",\n          \"fr\",\n          \"ga\",\n          \"hr\",\n          \"is\",\n          \"it\",\n          \"lv\",\n          \"lt\",\n          \"hu\",\n          \"mt\",\n          \"nl\",\n          \"no\",\n          \"pl\",\n          \"pt\",\n          \"ro\",\n          \"sk\",\n          \"sl\",\n          \"fi\",\n          \"sv\"\n        ],\n        \"enumTitles\": [\n          \"Bulgarian\",\n          \"Czech\",\n          \"Danish\",\n          \"German\",\n          \"Estonian\",\n          \"Greek\",\n          \"English\",\n          \"Spanish\",\n          \"French\",\n          \"Irish\",\n          \"Croatian\",\n          \"Icelandic\",\n          \"Italian\",\n          \"Latvian\",\n          \"Lithuanian\",\n          \"Hungarian\",\n          \"Maltese\",\n          \"Dutch\",\n          \"Norwegian\",\n          \"Polish\",\n          \"Portuguese\",\n          \"Romanian\",\n          \"Slovak\",\n          \"Slovenian\",\n          \"Finnish\",\n          \"Swedish\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"occupationUris\": {\n      \"title\": \"ESCO occupation or ISCO URIs\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to jobs classified under these ESCO occupation URIs or broader ISCO group URIs. Copy occupation values from the `occupationUris` field of a previous search result, e.g. `http://data.europa.eu/esco/occupation/f2b15a0e-e65a-438a-affb-29b9d50b77d1`; an ISCO URI such as `http://data.europa.eu/esco/isco/C2221` matches every occupation in that ISCO group.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"skillUris\": {\n      \"title\": \"ESCO skill URIs\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to jobs requiring these ESCO skill URIs. Copy values from the `requiredSkills` field of a previous `mode=byIds` result, e.g. `http://data.europa.eu/esco/skill/ccd0a1d9-afda-43d9-b901-96344886e14d`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"benefitCodes\": {\n      \"title\": \"Extra benefits offered\",\n      \"type\": \"array\",\n      \"description\": \"Restrict results to jobs that explicitly advertise these extra (non-salary) benefits. Note: most EURES listings do not disclose extra-benefit information at all, so this filter narrows results significantly -- leave empty to include all jobs regardless of disclosed benefits.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"1\",\n          \"2\",\n          \"3\",\n          \"4\",\n          \"5\",\n          \"6\",\n          \"7\",\n          \"8\",\n          \"9\",\n          \"10\",\n          \"11\",\n          \"12\",\n          \"13\",\n          \"14\",\n          \"15\"\n        ],\n        \"enumTitles\": [\n          \"Accommodation included\",\n          \"Meals included\",\n          \"Relocation assisted\",\n          \"Travel expenses\",\n          \"Medical insurance\",\n          \"Dental insurance\",\n          \"Vision insurance\",\n          \"Life insurance\",\n          \"Short-term disability insurance\",\n          \"Long-term disability insurance\",\n          \"Retirement plan\",\n          \"Company car possible\",\n          \"Relocation assistance\",\n          \"Expatriate benefits\",\n          \"Other benefits\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"euresFlagOnly\": {\n      \"title\": \"EURES-flagged jobs only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only return jobs explicitly flagged as cross-border EURES vacancies (employer welcomes candidates from other EEA countries).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeDetails\": {\n      \"title\": \"Include full vacancy details\",\n      \"type\": \"boolean\",\n      \"description\": \"Also fetch each search result's detail record — salary, benefits, contacts, application link and full location. One extra request per emitted record; off by default for fast, low-cost searches.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"publicationPeriod\": {\n      \"title\": \"EURES recency window\",\n      \"type\": \"string\",\n      \"description\": \"EURES's own recency filter: only return vacancies received or last re-synced within this window (output field `lastModifiedDate`). This is not the original employer posting date (`publicationDate`) -- national employment services periodically re-sync unchanged listings, so an older vacancy can appear in a recent window.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"LAST_DAY\",\n        \"LAST_THREE_DAYS\",\n        \"LAST_WEEK\",\n        \"LAST_MONTH\"\n      ],\n      \"enumTitles\": [\n        \"Any time\",\n        \"Last day\",\n        \"Last three days\",\n        \"Last week\",\n        \"Last month\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"minNumberOfPosts\": {\n      \"title\": \"Minimum number of open posts\",\n      \"type\": \"integer\",\n      \"description\": \"Only return job vacancies offering at least this many open posts/positions (useful for finding bulk-hiring vacancies).\",\n      \"minimum\": 1,\n      \"maximum\": 999\n    },\n    \"sortBy\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Order of returned results. `MOST_RECENT` orders by each listing's last-synced/last-modified timestamp in EURES's own index (output field `lastModifiedDate`), which usually but not always matches `publicationDate` -- national employment services periodically re-sync unchanged listings, which refreshes this timestamp without a new posting. Note: when `searchQuery` is set, results are always ordered by relevance (best match) regardless of this setting, since EURES cannot reliably combine keyword search with most-recent ordering.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"BEST_MATCH\",\n        \"MOST_RECENT\"\n      ],\n      \"enumTitles\": [\n        \"Relevance (best match)\",\n        \"Most recent\"\n      ],\n      \"default\": \"BEST_MATCH\",\n      \"prefill\": \"BEST_MATCH\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted records.\",\n      \"minimum\": 1,\n      \"maximum\": 2000,\n      \"default\": 50,\n      \"prefill\": 3\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# EURES Cross-Border Job Search & Vacancy Lookup\n\nEURES is the European Union's official portal for cross-border employment, aggregating job vacancies posted by national employment services across every EU member state plus Iceland, Liechtenstein, Norway and Switzerland. This actor searches that live vacancy index by keyword and more than a dozen filters, or pulls full detail — salary, benefits, contact info, application link — for specific vacancy IDs you've already found.\n\n## What this actor does\n\n- **Two modes**: `search` (keyword + filters over the whole index) and `byIds` (full detail for vacancy IDs or detail-page URLs you supply)\n- **Geographic filtering** at two levels: 31 EEA country codes, and finer-grained EU NUTS region codes that can be combined with country filters\n- **More than a dozen filters**: business sector (NACE), contract type, work schedule, education level, required experience, required languages, ESCO occupation/skill codes, advertised benefits, and minimum open-post count\n- **Detail-mode enrichment**: application links and deadlines, salary figures, named benefits, remote-work and travel flags, and recruiter contact details when the employer discloses them\n- **Empty fields are omitted** — a listing only carries the fields EURES actually published for it\n\n## Output per job vacancy\n\n- `jobId` — EURES vacancy identifier, usable with `mode=byIds`\n- `title`, `description` — job title and full description text\n- `publicationDate`, `lastModifiedDate` — when first posted and when EURES's index last synced it\n- `reference`, `documentId` — the source employment service's own reference/document numbers\n- `numberOfPosts` — how many open posts this single vacancy covers\n- `euresFlag` — whether the employer explicitly welcomes cross-border EEA candidates\n- `countries[]`, `countryNames[]` — job location country code(s) and name(s)\n- `nutsRegionCodes[]` — EU NUTS statistical region code(s) covering the job location, feedable back into the `regionCodes` input\n- `locations[]`, `postalCodes[]`, `addressLines[]` — location names, postal codes and free-text street addresses when the source publishes them (`mode=byIds`)\n- `positionOfferingCode`, `positionOfferingLabel` — contract type code and plain-English label (e.g. `directhire` / Direct hire)\n- `positionScheduleCodes[]`, `positionScheduleLabels[]` — `fulltime` / `parttime` / `flextime` with plain-English labels; a few national feeds publish the source alias `any` when every schedule applies\n- `employerName`, `employerWebsite`, `employerDescription`, `employerSectorCodes[]` — employer identity and NACE sector(s)\n- `employerLegalId`, `employerSizeCode` — employer registration ID and organisation-size band, when disclosed (`mode=byIds`)\n- `occupationUris[]` — ESCO occupation classification URIs\n- `requiredSkills[]` — ESCO skill URIs required for the role (`mode=byIds`)\n- `requiredYearsOfExperience`, `requiredExperienceDescription` — numeric or free-text experience requirement\n- `requiredEducationLevelCode` — ISCED-based required education level\n- `availableLanguages[]` — language(s) the listing is available in (`mode=search`)\n- `workingLanguages[]`, `requiredLanguageSkills[]` — working language(s) and per-language proficiency requirements (`mode=byIds`)\n- `drivingLicensesRequired[]` — required driving license categories, when specified\n- `employmentPeriod`, `employmentStartDate`, `employmentEndDate` — contract duration and dates, when fixed-term\n- `applicationUrl`, `applicationInstructions`, `applicationDeadline` — how and by when to apply (`mode=byIds`)\n- `remoteWorkAllowed`, `immediateStart` — flags the employer explicitly set, when disclosed\n- `travelRequired`, `travelPercentage`, `travelDescription` — travel expectations, when the employer specified them\n- `salaryMin`, `salaryMax`, `salaryReference`, `salaryCurrency`, `salaryPeriod`, `salaryDescription` — pay figures and notes, only when the employer discloses pay\n- `benefits[]`, `benefitsDescription` — named extra benefits (accommodation, meals, relocation, insurance types, etc.) and free-text perks, when disclosed\n- `contactName`, `contactEmail`, `contactPhone`, `contactAddress` — recruiter contact details, when published (`mode=byIds`)\n- `contentLanguage` — the language the returned `title`/`description` text is actually written in\n- `source`, `sourceUrl` — originating employment service and the canonical EURES vacancy page URL\n- `scrapedAt` — ISO 8601 timestamp of the run\n\n## What's new in 2.0\n\n- Exact-match safety nets for ESCO occupation filters, transformable education buckets, region codes and country+region union semantics\n- `byIds` now accepts full EURES detail-page URLs as well as bare vacancy IDs\n- `includeDetails` enriches search results in place with salary, benefits, contacts and the application link\n- Plain-English contract-type and work-schedule labels alongside the source codes\n- Legacy task keys from earlier versions (`query`, `keyword`, `ids`, `country`, `sector`, `contractTypes`, `limit`, `sort`, …) are mapped in code, so saved tasks keep working even though those keys are no longer shown in the input form\n- Daily-test prefill reduced to 3 records\n\n## Input\n\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` or `byIds` |\n| `searchQuery` | string | `developer` | Free-text keyword (mode=search) |\n| `searchIn` | string | `EVERYWHERE` | `EVERYWHERE` / `TITLE` / `DESCRIPTION` / `EMPLOYER` — where the keyword is matched |\n| `jobIds` | array | – | Vacancy IDs or full detail-page URLs to fetch (mode=byIds) |\n| `countries` | array | – | One or more of the 31 EEA country codes |\n| `regionCodes` | array | – | Region codes from `nutsRegionCodes`; finer codes are matched to the nearest supported parent region. Combines with `countries` as a union |\n| `sectors` | array | – | NACE Rev.2 business sector codes |\n| `positionOfferingCodes` | array | – | Contract types (direct hire, temporary, internship, etc.) |\n| `positionScheduleCodes` | array | – | `fulltime` / `parttime` / `flextime` |\n| `educationLevels` | array | – | Required education level (basic to doctoral) |\n| `experienceLevels` | array | – | Required-experience band |\n| `languageSkills` | array | – | Required working language(s) |\n| `occupationUris` | array | – | ESCO occupation URIs (from a prior result's `occupationUris`) or broader ISCO group URIs |\n| `skillUris` | array | – | ESCO skill URIs (from a prior `byIds` result's `requiredSkills`) |\n| `benefitCodes` | array | – | Advertised extra-benefit codes |\n| `euresFlagOnly` | boolean | `false` | Only cross-border-flagged vacancies |\n| `includeDetails` | boolean | `false` | Also fetch each search result's detail record (salary, benefits, contacts, application link). One extra request per record |\n| `publicationPeriod` | string | `` (any time) | `LAST_DAY` / `LAST_THREE_DAYS` / `LAST_WEEK` / `LAST_MONTH` — EURES's own recency window, applied to `lastModifiedDate` (see FAQ) |\n| `minNumberOfPosts` | integer | – | Only vacancies with at least this many open posts |\n| `sortBy` | string | `BEST_MATCH` | `BEST_MATCH` or `MOST_RECENT` (keyword searches always sort by relevance) |\n| `maxItems` | integer | `50` | Hard cap on returned records (1–2000) |\n\n### Example: keyword search in one country\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"warehouse\",\n  \"countries\": [\"de\"],\n  \"maxItems\": 100\n}\n```\n\n### Example: bulk-hiring full-time roles in a region, recently active\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"\",\n  \"regionCodes\": [\"deb\"],\n  \"positionScheduleCodes\": [\"fulltime\"],\n  \"minNumberOfPosts\": 5,\n  \"publicationPeriod\": \"LAST_WEEK\",\n  \"maxItems\": 200\n}\n```\n\n### Example: full detail for known vacancy IDs\n\n```json\n{\n  \"mode\": \"byIds\",\n  \"jobIds\": [\"MzQwNDYwIDU\"]\n}\n```\n\n### Example: nurse roles requiring specific experience and languages\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"nurse\",\n  \"sectors\": [\"q\"],\n  \"experienceLevels\": [\"between_1_and_2_years\"],\n  \"languageSkills\": [\"de\", \"en\"],\n  \"maxItems\": 150\n}\n```\n\n## Use cases\n\n- **Cross-border recruitment agencies** — source candidates by sector, language and region across the EEA in one search\n- **Labour-market research** — track vacancy volume and contract-type mix by country or NACE sector over time\n- **HR tech integrations** — feed EURES vacancies into a job-aggregator or ATS pipeline by ESCO occupation\n- **Relocation and mobility platforms** — filter for EURES-flagged jobs that explicitly welcome candidates relocating from another EEA country\n- **Public-policy and academic research** — analyse posted salary, benefit and experience requirements across the single market\n\n## FAQ\n\n**Do I need an account or API key for EURES?**\nNo. EURES's job search is public; this actor queries the same public search index that powers the EURES website.\n\n**How large is the EURES vacancy index?**\nIt typically holds well over a million active postings aggregated from national employment services across 31 EEA countries at any given time. Use filters and `maxItems` to target a workable slice.\n\n**What's the difference between `search` and `byIds`?**\n`search` runs a keyword/filter query and returns a page of matching vacancies with the fields EURES's listing index exposes. `byIds` fetches the full detail page for specific vacancy IDs or detail-page URLs — collect `jobId` or `sourceUrl` values from a `search` run first, then feed them into a `byIds` run to get salary, benefits, contacts and the application link.\n\n**Why do some records have far fewer fields than others?**\nEURES aggregates postings from dozens of national employment services, each publishing a different level of detail. A field like `salaryMin` or `contactEmail` only appears when the originating service actually disclosed it — there's no fallback value.\n\n**Can I filter below the country level?**\nYes — `regionCodes` accepts region codes (e.g. `deb` for Berlin), which you can find in the `nutsRegionCodes` field of any prior result. EURES's filter endpoint supports a coarser set than its results expose, so a fine code such as `BE232` is automatically matched to its nearest supported parent (e.g. `be2`). It combines with `countries` as a union, not an intersection.\n\n**What does `sortBy=MOST_RECENT` actually sort on?**\nIt sorts by `lastModifiedDate`, the timestamp of the vacancy's last sync into EURES's index — not always the same as `publicationDate`, since a national service occasionally re-syncs an unchanged listing. This sort order is ignored whenever `searchQuery` is set, because keyword matches are always ranked by relevance.\n\n**What does `publicationPeriod` actually filter on?**\nIt is EURES's own recency filter and applies to `lastModifiedDate` (when EURES received or last re-synced the vacancy), not to the original employer posting date in `publicationDate`. National services re-sync unchanged listings, so a vacancy first posted months ago can still appear inside a recent window. Filter on `publicationDate` in your downstream workflow if you need strict first-publication recency.\n\n**Will every vacancy include salary or benefits?**\nNo. Most EURES postings don't disclose pay or extra benefits at all. Setting `benefitCodes` narrows results to only vacancies that explicitly advertise one of the benefits you choose; note that the detail feed does not always echo the benefit codes used by the search index, so a filtered row may still omit `benefits[]`.\n\n**Why do a few records show `positionScheduleCodes: [\"any\"]`?**\nSome national feeds mark a vacancy as open to any working schedule instead of listing each option. The code is passed through as published (`any` means full-time, part-time and flexible all apply).\n\n**Is this affiliated with EURES or the European Union?**\nNo. This is an independent, third-party actor built against EURES's own public job-search index; it is not operated by or affiliated with EURES or the European Commission.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "eures-cross-border-job-search-and-vacancy-lookup",
      "title": "EURES Cross-Border Job Search & Vacancy Lookup",
      "description": "Search EURES's cross-border EEA job vacancy index by keyword, country, region, sector, contract type, education level and more, or fetch full detail — salary, benefits, contacts — for specific vacancy IDs or detail-page URLs.",
      "version": "2.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# EURES Cross-Border Job Search & Vacancy Lookup\n\nEURES is the European Union's official portal for cross-border employment, aggregating job vacancies posted by national employment services across every EU member state plus Iceland, Liechtenstein, Norway and Switzerland. This actor searches that live vacancy index by keyword and more than a dozen filters, or pulls full detail — salary, benefits, contact info, application link — for specific vacancy IDs you've already found.\n\n## What this actor does\n\n- **Two modes**: `search` (keyword + filters over the whole index) and `byIds` (full detail for vacancy IDs or detail-page URLs you supply)\n- **Geographic filtering** at two levels: 31 EEA country codes, and finer-grained EU NUTS region codes that can be combined with country filters\n- **More than a dozen filters**: business sector (NACE), contract type, work schedule, education level, required experience, required languages, ESCO occupation/skill codes, advertised benefits, and minimum open-post count\n- **Detail-mode enrichment**: application links and deadlines, salary figures, named benefits, remote-work and travel flags, and recruiter contact details when the employer discloses them\n- **Empty fields are omitted** — a listing only carries the fields EURES actually published for it\n\n## Output per job vacancy\n\n- `jobId` — EURES vacancy identifier, usable with `mode=byIds`\n- `title`, `description` — job title and full description text\n- `publicationDate`, `lastModifiedDate` — when first posted and when EURES's index last synced it\n- `reference`, `documentId` — the source employment service's own reference/document numbers\n- `numberOfPosts` — how many open posts this single vacancy covers\n- `euresFlag` — whether the employer explicitly welcomes cross-border EEA candidates\n- `countries[]`, `countryNames[]` — job location country code(s) and name(s)\n- `nutsRegionCodes[]` — EU NUTS statistical region code(s) covering the job location, feedable back into the `regionCodes` input\n- `locations[]`, `postalCodes[]`, `addressLines[]` — location names, postal codes and free-text street addresses when the source publishes them (`mode=byIds`)\n- `positionOfferingCode`, `positionOfferingLabel` — contract type code and plain-English label (e.g. `directhire` / Direct hire)\n- `positionScheduleCodes[]`, `positionScheduleLabels[]` — `fulltime` / `parttime` / `flextime` with plain-English labels; a few national feeds publish the source alias `any` when every schedule applies\n- `employerName`, `employerWebsite`, `employerDescription`, `employerSectorCodes[]` — employer identity and NACE sector(s)\n- `employerLegalId`, `employerSizeCode` — employer registration ID and organisation-size band, when disclosed (`mode=byIds`)\n- `occupationUris[]` — ESCO occupation classification URIs\n- `requiredSkills[]` — ESCO skill URIs required for the role (`mode=byIds`)\n- `requiredYearsOfExperience`, `requiredExperienceDescription` — numeric or free-text experience requirement\n- `requiredEducationLevelCode` — ISCED-based required education level\n- `availableLanguages[]` — language(s) the listing is available in (`mode=search`)\n- `workingLanguages[]`, `requiredLanguageSkills[]` — working language(s) and per-language proficiency requirements (`mode=byIds`)\n- `drivingLicensesRequired[]` — required driving license categories, when specified\n- `employmentPeriod`, `employmentStartDate`, `employmentEndDate` — contract duration and dates, when fixed-term\n- `applicationUrl`, `applicationInstructions`, `applicationDeadline` — how and by when to apply (`mode=byIds`)\n- `remoteWorkAllowed`, `immediateStart` — flags the employer explicitly set, when disclosed\n- `travelRequired`, `travelPercentage`, `travelDescription` — travel expectations, when the employer specified them\n- `salaryMin`, `salaryMax`, `salaryReference`, `salaryCurrency`, `salaryPeriod`, `salaryDescription` — pay figures and notes, only when the employer discloses pay\n- `benefits[]`, `benefitsDescription` — named extra benefits (accommodation, meals, relocation, insurance types, etc.) and free-text perks, when disclosed\n- `contactName`, `contactEmail`, `contactPhone`, `contactAddress` — recruiter contact details, when published (`mode=byIds`)\n- `contentLanguage` — the language the returned `title`/`description` text is actually written in\n- `source`, `sourceUrl` — originating employment service and the canonical EURES vacancy page URL\n- `scrapedAt` — ISO 8601 timestamp of the run\n\n## What's new in 2.0\n\n- Exact-match safety nets for ESCO occupation filters, transformable education buckets, region codes and country+region union semantics\n- `byIds` now accepts full EURES detail-page URLs as well as bare vacancy IDs\n- `includeDetails` enriches search results in place with salary, benefits, contacts and the application link\n- Plain-English contract-type and work-schedule labels alongside the source codes\n- Legacy task keys from earlier versions (`query`, `keyword`, `ids`, `country`, `sector`, `contractTypes`, `limit`, `sort`, …) are mapped in code, so saved tasks keep working even though those keys are no longer shown in the input form\n- Daily-test prefill reduced to 3 records\n\n## Input\n\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` or `byIds` |\n| `searchQuery` | string | `developer` | Free-text keyword (mode=search) |\n| `searchIn` | string | `EVERYWHERE` | `EVERYWHERE` / `TITLE` / `DESCRIPTION` / `EMPLOYER` — where the keyword is matched |\n| `jobIds` | array | – | Vacancy IDs or full detail-page URLs to fetch (mode=byIds) |\n| `countries` | array | – | One or more of the 31 EEA country codes |\n| `regionCodes` | array | – | Region codes from `nutsRegionCodes`; finer codes are matched to the nearest supported parent region. Combines with `countries` as a union |\n| `sectors` | array | – | NACE Rev.2 business sector codes |\n| `positionOfferingCodes` | array | – | Contract types (direct hire, temporary, internship, etc.) |\n| `positionScheduleCodes` | array | – | `fulltime` / `parttime` / `flextime` |\n| `educationLevels` | array | – | Required education level (basic to doctoral) |\n| `experienceLevels` | array | – | Required-experience band |\n| `languageSkills` | array | – | Required working language(s) |\n| `occupationUris` | array | – | ESCO occupation URIs (from a prior result's `occupationUris`) or broader ISCO group URIs |\n| `skillUris` | array | – | ESCO skill URIs (from a prior `byIds` result's `requiredSkills`) |\n| `benefitCodes` | array | – | Advertised extra-benefit codes |\n| `euresFlagOnly` | boolean | `false` | Only cross-border-flagged vacancies |\n| `includeDetails` | boolean | `false` | Also fetch each search result's detail record (salary, benefits, contacts, application link). One extra request per record |\n| `publicationPeriod` | string | `` (any time) | `LAST_DAY` / `LAST_THREE_DAYS` / `LAST_WEEK` / `LAST_MONTH` — EURES's own recency window, applied to `lastModifiedDate` (see FAQ) |\n| `minNumberOfPosts` | integer | – | Only vacancies with at least this many open posts |\n| `sortBy` | string | `BEST_MATCH` | `BEST_MATCH` or `MOST_RECENT` (keyword searches always sort by relevance) |\n| `maxItems` | integer | `50` | Hard cap on returned records (1–2000) |\n\n### Example: keyword search in one country\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"warehouse\",\n  \"countries\": [\"de\"],\n  \"maxItems\": 100\n}\n```\n\n### Example: bulk-hiring full-time roles in a region, recently active\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"\",\n  \"regionCodes\": [\"deb\"],\n  \"positionScheduleCodes\": [\"fulltime\"],\n  \"minNumberOfPosts\": 5,\n  \"publicationPeriod\": \"LAST_WEEK\",\n  \"maxItems\": 200\n}\n```\n\n### Example: full detail for known vacancy IDs\n\n```json\n{\n  \"mode\": \"byIds\",\n  \"jobIds\": [\"MzQwNDYwIDU\"]\n}\n```\n\n### Example: nurse roles requiring specific experience and languages\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"nurse\",\n  \"sectors\": [\"q\"],\n  \"experienceLevels\": [\"between_1_and_2_years\"],\n  \"languageSkills\": [\"de\", \"en\"],\n  \"maxItems\": 150\n}\n```\n\n## Use cases\n\n- **Cross-border recruitment agencies** — source candidates by sector, language and region across the EEA in one search\n- **Labour-market research** — track vacancy volume and contract-type mix by country or NACE sector over time\n- **HR tech integrations** — feed EURES vacancies into a job-aggregator or ATS pipeline by ESCO occupation\n- **Relocation and mobility platforms** — filter for EURES-flagged jobs that explicitly welcome candidates relocating from another EEA country\n- **Public-policy and academic research** — analyse posted salary, benefit and experience requirements across the single market\n\n## FAQ\n\n**Do I need an account or API key for EURES?**\nNo. EURES's job search is public; this actor queries the same public search index that powers the EURES website.\n\n**How large is the EURES vacancy index?**\nIt typically holds well over a million active postings aggregated from national employment services across 31 EEA countries at any given time. Use filters and `maxItems` to target a workable slice.\n\n**What's the difference between `search` and `byIds`?**\n`search` runs a keyword/filter query and returns a page of matching vacancies with the fields EURES's listing index exposes. `byIds` fetches the full detail page for specific vacancy IDs or detail-page URLs — collect `jobId` or `sourceUrl` values from a `search` run first, then feed them into a `byIds` run to get salary, benefits, contacts and the application link.\n\n**Why do some records have far fewer fields than others?**\nEURES aggregates postings from dozens of national employment services, each publishing a different level of detail. A field like `salaryMin` or `contactEmail` only appears when the originating service actually disclosed it — there's no fallback value.\n\n**Can I filter below the country level?**\nYes — `regionCodes` accepts region codes (e.g. `deb` for Berlin), which you can find in the `nutsRegionCodes` field of any prior result. EURES's filter endpoint supports a coarser set than its results expose, so a fine code such as `BE232` is automatically matched to its nearest supported parent (e.g. `be2`). It combines with `countries` as a union, not an intersection.\n\n**What does `sortBy=MOST_RECENT` actually sort on?**\nIt sorts by `lastModifiedDate`, the timestamp of the vacancy's last sync into EURES's index — not always the same as `publicationDate`, since a national service occasionally re-syncs an unchanged listing. This sort order is ignored whenever `searchQuery` is set, because keyword matches are always ranked by relevance.\n\n**What does `publicationPeriod` actually filter on?**\nIt is EURES's own recency filter and applies to `lastModifiedDate` (when EURES received or last re-synced the vacancy), not to the original employer posting date in `publicationDate`. National services re-sync unchanged listings, so a vacancy first posted months ago can still appear inside a recent window. Filter on `publicationDate` in your downstream workflow if you need strict first-publication recency.\n\n**Will every vacancy include salary or benefits?**\nNo. Most EURES postings don't disclose pay or extra benefits at all. Setting `benefitCodes` narrows results to only vacancies that explicitly advertise one of the benefits you choose; note that the detail feed does not always echo the benefit codes used by the search index, so a filtered row may still omit `benefits[]`.\n\n**Why do a few records show `positionScheduleCodes: [\"any\"]`?**\nSome national feeds mark a vacancy as open to any working schedule instead of listing each option. The code is passed through as published (`any` means full-time, part-time and flexible all apply).\n\n**Is this affiliated with EURES or the European Union?**\nNo. This is an independent, third-party actor built against EURES's own public job-search index; it is not operated by or affiliated with EURES or the European Commission.\n",
      "input": {
        "title": "EURES Job Vacancy Scraper Input",
        "description": "Search live job vacancies on EURES (the EU's job mobility portal), or fetch full details for specific job vacancy IDs.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch.",
            "editor": "select",
            "enum": [
              "search",
              "byIds"
            ],
            "enumTitles": [
              "Search job vacancies",
              "Lookup by vacancy ID or URL"
            ],
            "default": "search",
            "prefill": "search"
          },
          "searchQuery": {
            "title": "Search query",
            "type": "string",
            "description": "Free-text keyword to search for (mode=search). Matches job title, description and employer name depending on `searchIn`.",
            "editor": "textfield",
            "default": "developer",
            "prefill": "developer"
          },
          "searchIn": {
            "title": "Search scope",
            "type": "string",
            "description": "Where the search query is matched.",
            "editor": "select",
            "enum": [
              "EVERYWHERE",
              "TITLE",
              "DESCRIPTION",
              "EMPLOYER"
            ],
            "enumTitles": [
              "Everywhere (title + description + employer)",
              "Job title only",
              "Job description only",
              "Employer name only"
            ],
            "default": "EVERYWHERE",
            "prefill": "EVERYWHERE"
          },
          "jobIds": {
            "title": "Job vacancy IDs or URLs (mode=byIds)",
            "type": "array",
            "description": "EURES job vacancy IDs or full detail-page URLs, as found in the `jobId` or `sourceUrl` output field, e.g. `MzQwNDYwIDU` or `https://europa.eu/eures/portal/jv-se/jv-details/MzQwNDYwIDU`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Restrict results to job locations in these countries. Leave empty for all EEA countries.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "at",
                "be",
                "bg",
                "ch",
                "cy",
                "cz",
                "de",
                "dk",
                "ee",
                "el",
                "es",
                "fi",
                "fr",
                "hr",
                "hu",
                "ie",
                "is",
                "it",
                "li",
                "lt",
                "lu",
                "lv",
                "mt",
                "nl",
                "no",
                "pl",
                "pt",
                "ro",
                "se",
                "si",
                "sk"
              ],
              "enumTitles": [
                "Austria",
                "Belgium",
                "Bulgaria",
                "Switzerland",
                "Cyprus",
                "Czechia",
                "Germany",
                "Denmark",
                "Estonia",
                "Greece",
                "Spain",
                "Finland",
                "France",
                "Croatia",
                "Hungary",
                "Ireland",
                "Iceland",
                "Italy",
                "Liechtenstein",
                "Lithuania",
                "Luxembourg",
                "Latvia",
                "Malta",
                "Netherlands",
                "Norway",
                "Poland",
                "Portugal",
                "Romania",
                "Sweden",
                "Slovenia",
                "Slovakia"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "regionCodes": {
            "title": "Region codes (NUTS)",
            "type": "array",
            "description": "Restrict results to job locations in these region codes (finer-grained than `countries`), e.g. `deb` for Berlin (Germany) or `no0b` for Trondelag (Norway). Find a region's code in the `nutsRegionCodes` output field of a previous run, or on the EURES advanced-search location picker. Finer NUTS codes are automatically matched to the nearest supported parent region. Combines with `countries` as an OR (union of matches).",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "sectors": {
            "title": "Business sector (NACE)",
            "type": "array",
            "description": "Restrict results to these NACE Rev.2 business sectors.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "a",
                "b",
                "c",
                "d",
                "e",
                "f",
                "g",
                "h",
                "i",
                "j",
                "k",
                "l",
                "m",
                "n",
                "o",
                "p",
                "q",
                "r",
                "s",
                "t",
                "u",
                "v"
              ],
              "enumTitles": [
                "Agriculture, forestry and fishing",
                "Mining and quarrying",
                "Manufacturing",
                "Electricity, gas, steam and air conditioning supply",
                "Water supply, sewerage, waste management",
                "Construction",
                "Wholesale and retail trade; repair of motor vehicles",
                "Transportation and storage",
                "Accommodation and food service activities",
                "Information and communication",
                "Financial and insurance activities",
                "Real estate activities",
                "Professional, scientific and technical activities",
                "Administrative and support service activities",
                "Public administration and defence; social security",
                "Education",
                "Human health and social work activities",
                "Arts, entertainment and recreation",
                "Other service activities",
                "Activities of households as employers",
                "Activities of extraterritorial organisations and bodies",
                "Other / not classified"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "positionOfferingCodes": {
            "title": "Contract type",
            "type": "array",
            "description": "Restrict results to these contract/position offering types.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "directhire",
                "temporary",
                "temporarytohire",
                "contracttohire",
                "contract",
                "apprenticeship",
                "selfemployed",
                "oncall",
                "seasonal",
                "internship",
                "recruitmentreserve",
                "volunteer"
              ],
              "enumTitles": [
                "Direct hire",
                "Temporary",
                "Temporary to hire",
                "Contract to hire",
                "Contract",
                "Apprenticeship",
                "Self-employed",
                "On-call",
                "Seasonal",
                "Internship",
                "Recruitment reserve",
                "Volunteer"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "positionScheduleCodes": {
            "title": "Work schedule",
            "type": "array",
            "description": "Restrict results to these work schedules.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "fulltime",
                "parttime",
                "flextime"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Flexible"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "educationLevels": {
            "title": "Education level",
            "type": "array",
            "description": "Restrict results to these required education levels.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "basic",
                "medium",
                "tertiary",
                "bachelor",
                "master",
                "doctoral",
                "not_classified"
              ],
              "enumTitles": [
                "Basic",
                "Medium (secondary)",
                "Tertiary",
                "Bachelor",
                "Master",
                "Doctoral",
                "Not classified"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "experienceLevels": {
            "title": "Required experience",
            "type": "array",
            "description": "Restrict results to these required-experience bands.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "none_required",
                "up_to_1_year",
                "between_1_and_2_years",
                "between_2_and_5_years",
                "more_than_5_years"
              ],
              "enumTitles": [
                "None required",
                "Up to 1 year",
                "1 to 2 years",
                "2 to 5 years",
                "More than 5 years"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "languageSkills": {
            "title": "Required language skills",
            "type": "array",
            "description": "Restrict results to jobs requiring at least basic proficiency in these languages.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "bg",
                "cs",
                "da",
                "de",
                "et",
                "el",
                "en",
                "es",
                "fr",
                "ga",
                "hr",
                "is",
                "it",
                "lv",
                "lt",
                "hu",
                "mt",
                "nl",
                "no",
                "pl",
                "pt",
                "ro",
                "sk",
                "sl",
                "fi",
                "sv"
              ],
              "enumTitles": [
                "Bulgarian",
                "Czech",
                "Danish",
                "German",
                "Estonian",
                "Greek",
                "English",
                "Spanish",
                "French",
                "Irish",
                "Croatian",
                "Icelandic",
                "Italian",
                "Latvian",
                "Lithuanian",
                "Hungarian",
                "Maltese",
                "Dutch",
                "Norwegian",
                "Polish",
                "Portuguese",
                "Romanian",
                "Slovak",
                "Slovenian",
                "Finnish",
                "Swedish"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "occupationUris": {
            "title": "ESCO occupation or ISCO URIs",
            "type": "array",
            "description": "Restrict results to jobs classified under these ESCO occupation URIs or broader ISCO group URIs. Copy occupation values from the `occupationUris` field of a previous search result, e.g. `http://data.europa.eu/esco/occupation/f2b15a0e-e65a-438a-affb-29b9d50b77d1`; an ISCO URI such as `http://data.europa.eu/esco/isco/C2221` matches every occupation in that ISCO group.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "skillUris": {
            "title": "ESCO skill URIs",
            "type": "array",
            "description": "Restrict results to jobs requiring these ESCO skill URIs. Copy values from the `requiredSkills` field of a previous `mode=byIds` result, e.g. `http://data.europa.eu/esco/skill/ccd0a1d9-afda-43d9-b901-96344886e14d`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "benefitCodes": {
            "title": "Extra benefits offered",
            "type": "array",
            "description": "Restrict results to jobs that explicitly advertise these extra (non-salary) benefits. Note: most EURES listings do not disclose extra-benefit information at all, so this filter narrows results significantly -- leave empty to include all jobs regardless of disclosed benefits.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12",
                "13",
                "14",
                "15"
              ],
              "enumTitles": [
                "Accommodation included",
                "Meals included",
                "Relocation assisted",
                "Travel expenses",
                "Medical insurance",
                "Dental insurance",
                "Vision insurance",
                "Life insurance",
                "Short-term disability insurance",
                "Long-term disability insurance",
                "Retirement plan",
                "Company car possible",
                "Relocation assistance",
                "Expatriate benefits",
                "Other benefits"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "euresFlagOnly": {
            "title": "EURES-flagged jobs only",
            "type": "boolean",
            "description": "Only return jobs explicitly flagged as cross-border EURES vacancies (employer welcomes candidates from other EEA countries).",
            "default": false,
            "prefill": false
          },
          "includeDetails": {
            "title": "Include full vacancy details",
            "type": "boolean",
            "description": "Also fetch each search result's detail record — salary, benefits, contacts, application link and full location. One extra request per emitted record; off by default for fast, low-cost searches.",
            "default": false,
            "prefill": false
          },
          "publicationPeriod": {
            "title": "EURES recency window",
            "type": "string",
            "description": "EURES's own recency filter: only return vacancies received or last re-synced within this window (output field `lastModifiedDate`). This is not the original employer posting date (`publicationDate`) -- national employment services periodically re-sync unchanged listings, so an older vacancy can appear in a recent window.",
            "editor": "select",
            "enum": [
              "",
              "LAST_DAY",
              "LAST_THREE_DAYS",
              "LAST_WEEK",
              "LAST_MONTH"
            ],
            "enumTitles": [
              "Any time",
              "Last day",
              "Last three days",
              "Last week",
              "Last month"
            ],
            "default": "",
            "prefill": ""
          },
          "minNumberOfPosts": {
            "title": "Minimum number of open posts",
            "type": "integer",
            "description": "Only return job vacancies offering at least this many open posts/positions (useful for finding bulk-hiring vacancies).",
            "minimum": 1,
            "maximum": 999
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Order of returned results. `MOST_RECENT` orders by each listing's last-synced/last-modified timestamp in EURES's own index (output field `lastModifiedDate`), which usually but not always matches `publicationDate` -- national employment services periodically re-sync unchanged listings, which refreshes this timestamp without a new posting. Note: when `searchQuery` is set, results are always ordered by relevance (best match) regardless of this setting, since EURES cannot reliably combine keyword search with most-recent ordering.",
            "editor": "select",
            "enum": [
              "BEST_MATCH",
              "MOST_RECENT"
            ],
            "enumTitles": [
              "Relevance (best match)",
              "Most recent"
            ],
            "default": "BEST_MATCH",
            "prefill": "BEST_MATCH"
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on emitted records.",
            "minimum": 1,
            "maximum": 2000,
            "default": 50,
            "prefill": 3
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "EURES Cross-Border Job Search & Vacancy Lookup Output",
        "description": "Job vacancies scraped from EURES — title, description, employer, locations, contract type, schedule, required experience/education/languages, and the canonical EURES job URL.",
        "properties": {
          "jobs": {
            "type": "string",
            "title": "EURES job vacancies",
            "description": "Dataset containing all scraped EURES job vacancies.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Job vacancies",
              "transformation": {
                "fields": [
                  "title",
                  "employerName",
                  "countries",
                  "positionScheduleCodes",
                  "positionOfferingCode",
                  "publicationDate",
                  "sourceUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "2.0.1",
    "imageDigest": "7198d72e551fd0cf25c81821f0e4272a17d1a1c024e01972b570014060fca7e7",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.005253333333333333
    }
  }
}