# Changelog of Remote Jobs Aggregator API: Remote OK, WWR & Jobicy, Deduped (`fecklesspleb/remote-jobs-aggregator`) Actor

- **URL**: https://apify.com/fecklesspleb/remote-jobs-aggregator/changelog.md
- **Full Actor documentation**: https://apify.com/fecklesspleb/remote-jobs-aggregator.md

## Changelog

### Unreleased: small, fast default run (GAP8)

- **BREAKING (default change):** `maxTotalJobs` now defaults to 8 (was 0, no limit), in the input schema and in code when the field is left out. Set it to 0 for the old full pull. Before this, an empty input pushed about 2,000 jobs and took about 4 minutes. If you used a pre-release build whose default was 50, the default is now 8, so runs that left the field empty return 8 jobs instead of 50.
- **BREAKING (output default change):** `includeDescription` now defaults to `false` (was `true`), so `descriptionText` and `descriptionHtml` are no longer in the output unless you turn it on.
- With a `maxTotalJobs` cap and no filters or monitoring mode, each board now stops after 2x the cap instead of reading every page (Jobicy then needs one request instead of up to 50). The boards list newest first, so the result is the same newest jobs; per-source `found` counts in `RUN_SUMMARY` are smaller and show `stoppedEarly`.
- Default mode: when no sources and no filters are given (or all three sources, as in the form prefill) with the default cap, the log says `Default mode: ...`, `RUN_SUMMARY` has `defaultMode: true`, and the status message starts with `Default mode (newest 8 jobs, no filters): `.
- Lint only: removed unused imports in `common.py` and `feeds.py` (pyflakes clean). No behaviour change.

### 2026-10-29: one vocabulary for employmentType

- **Breaking for exact-value filters:** `employmentType` is now always one of the schema.org values `FULL_TIME`, `PART_TIME`, `CONTRACTOR`, `TEMPORARY`, `INTERN`, `VOLUNTEER`, `PER_DIEM`, `OTHER`, or null, the same vocabulary as the ATS job scrapers. Before, each board's own spelling was passed through (`Full-Time`, `Full time`, `Contract`).
- The board's own text is kept in the new field `employmentTypeRaw`. When a board lists several types, the more specific one wins (`Full-Time, Contract` is `CONTRACTOR`). A value that fits none of the types (such as `Permanent`) becomes `OTHER`.

### 2026-10-29: Remote OK text and hourly pay

- Remote OK text that arrived double-encoded (mojibake such as `Ã©` for `é`) is now repaired.
- Remote OK's salary fields are meant to be yearly USD, but some employers enter an hourly rate there. A Remote OK range whose top is $500 or less is now labelled `HOUR` in `salaryPeriod`; everything else stays `YEAR`.

### 2026-10-29: robots.txt on every redirect

- Redirects are now followed one hop at a time (up to 5), and robots.txt is checked for every hop. A host whose robots.txt can't be read (a server error after one retry, a network failure, or an HTML page served as robots.txt) is skipped for the run with a warning. A missing robots.txt (any 4xx) still means no rules.
