# Changelog of Workday Jobs Scraper & API — No Site ID Needed (`dataloft/workday-jobs-scraper`) Actor

- **URL**: https://apify.com/dataloft/workday-jobs-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/dataloft/workday-jobs-scraper.md

## Changelog

### 0.3 — 2026-09-05

- Fail visibly on unavailable monitoring history or unresolved delivery; use non-overlapping runs per watchlist.
- Budget-aware SDK result-event delivery and explicit charge/delivery reconciliation.
- Purposeful, bounded public example inputs and corrected default API input.
- Source-dependent limitations and Actor-start fee disclosed.

### 0.2 — 2026-09-02

#### Monitoring mode (only new jobs since last run)

- New input **`onlyNewJobs`**. When on, every posting delivered is remembered in a *named*
  key-value store and skipped on later runs. Skipped postings are neither saved to the dataset
  nor charged for, so a scheduled task costs only what actually changed.
- New input **`seenStoreName`** overrides the store name (default
  `dataloft-seen-workday-jobs-scraper`), so several watchlists can run without sharing history.
- A posting is matched on its Workday requisition id *and* on its normalised job URL. That matters
  here: Workday reports a different id depending on whether descriptions are fetched, and matching
  on either identity keeps runs with different settings in agreement.
- Per-site and whole-run log lines report `scanned N, new M, previously seen K`; the same counts
  land in `RUN_SUMMARY` under `monitoring`.
- The set is written back at the end of the run and also on `migrating` / `aborting`, so an
  interrupted run does not force the next one to re-deliver everything.

#### Input aliases for migrating from other actors

- **`companies`**, **`companyUrls`** and **`startUrls`** (objects or plain strings) are accepted and
  folded into `careerSites`, which already handles Workday URLs, `tenant|wdN|site` refs and bare
  company domains.
- `careerSites` is no longer a *required* field, because a run may now supply its targets through an
  alias instead. Supplying none of them still fails immediately with a message naming every accepted
  field.
- Alias values that are neither a URL nor a domain are reported in the log and in
  `RUN_SUMMARY.unresolved`.

#### Cost and platform settings

- Memory is now declared: default **512 MB**, minimum 256 MB, maximum 1024 MB. This actor is a
  pure-HTTP JSON API client, so the previous 4 GB default was quadrupling the platform cost of
  every run for no benefit.

#### Schema fixes

- The dataset overview view showed `atsPlatform`, which is the constant `"workday"` on every row.
  Replaced with `workdayTenant` and `workdaySite`, which are the fields that actually distinguish
  rows in a multi-site run.
- `changelog` declared in `.actor/actor.json`.
