# Changelog of SEEK Job Scraper — Australia & New Zealand Job Listings (`blackfalcondata/seek-scraper`) Actor

- **URL**: https://apify.com/blackfalcondata/seek-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/blackfalcondata/seek-scraper.md

## Changelog

### 0.4.59 (2026-09-28)

#### Fixed

- A search that finds no jobs now says so in the run status, naming the search and the date window (for example "SEEK has no jobs listed in the last 1 day matching ..."), instead of finishing with a blank status. Callers that read only the run status, such as MCP clients, now see why the dataset is empty.

### 0.4.58 — 2026-09-26

#### Fixed

- A job URL for a job that has been removed from SEEK no longer fails the run with "Please try again later". The log now says the job is no longer available, and the run completes.
- Several job IDs pasted into one job URL (for example `https://www.seek.com.au/job/94389099 94544884`), separated by spaces, commas or semicolons, are now read as separate jobs instead of failing the run.

### 0.4.2 — 2026-07-19

#### Fixed

- Applicant demand data (`applicantCount`, `applicantVolumeLabel`, `coverLetterPercentage`) is now fetched over the same connection path as the rest of the run, so it populates more consistently on longer runs.
- Runs that end with no results now report a more precise reason internally, which shortens diagnosis when a run is blocked at the source.

### 0.4.1 — 2026-07-12

#### Fixed

- A run no longer aborts on a single temporary "access denied" response from the source. Such responses are now retried on a fresh connection before the run gives up, so brief upstream throttling recovers automatically instead of ending the run with no results.

### 0.4.0 — 2026-06-24

#### Changed

- **Applicant demand data is now included by default.** `applicantCount`, `applicantVolumeLabel`, and `coverLetterPercentage` now populate on every run (previously opt-in). No price change. Set `includeApplicantInsights: false` to turn it off.

#### Added

- **Category IDs** — each job now carries `categoryId` and `subCategoryId` (the stable classification / sub-classification IDs) alongside the existing `category`/`subCategory` names, so you can filter and join on IDs that don't change when labels are reworded. Present on search-sourced jobs; `null` on paste-a-URL / detail-only runs.

### 0.3.0 — 2026-05-30

#### Added

- **Company enrichment** — when `includeDetails` is on, each job now also carries `companyLogo`, `companyCoverImageUrl`, `companyDescription`, `companyPerks`, `companyReviewRating`, `companyReviewCount`, `companySearchUrl`, and `isVerifiedAdvertiser`. Pulled from the detail page already fetched (no extra request). Null for private advertisers; logo falls back to per-ad branding when no company profile exists.
- **Applicant demand data** (opt-in via `includeApplicantInsights`, default off). Each job can now carry `applicantCount` (number of applicants), `applicantVolumeLabel` (e.g. "High application volume"), and `coverLetterPercentage`. Useful for spotting low-competition roles and gauging hiring demand. Adds one extra request per job. Coverage is partial — standard-apply listings expose it; external-apply listings return `null`.

### 0.2.5 — 2026-05-25

#### Fixed

- Improved resilience of SERP fetches against transient upstream failures so a single bad proxy exit no longer fails the whole run.

### 0.2.x — 2026-05-21

#### Fixed

- Input-validation errors now surface a clear, actionable message listing the valid `startUrls` shapes — previously these returned the same generic "try again later" message used for transient failures.

#### Changed

- In non-incremental mode, unparseable `startUrls` are dropped with a warning and the run continues using the remaining valid URLs and/or query inputs instead of hard-failing. Incremental-mode runs still fail fast on invalid URLs to protect state-key integrity.
- `startUrls` input description now spells out valid shapes and explicitly notes that the bare homepage is not accepted.

### 0.2.x — 2026-05-15

#### Added

- `customFilters` post-filter DSL for advanced filtering against output fields.
- Keyword field toggles (`keywordMatchTitle`, `keywordMatchCompany`, `keywordMatchDescription`, `keywordMatchCategory`, `keywordMatchBulletPoints`) for scoped include/exclude keyword filters.
- `jobScore` v0 and `jobScoreReasons` output fields based on parseable salary, full detail content, and posting recency.
- Store docs and examples for keyword, date, and custom post-filter workflows.
- Note: strict `customFilters` can significantly reduce emitted rows and pay-per-event dataset-item charges.

#### Changed

- Auto-derived incremental state keys now include `customFilters`, so different custom-filter universes are isolated.
- Auto-derived incremental state keys now include keyword field toggles, so different keyword scopes are isolated.
- Pasted search `startUrls` now expose cleaner `searchQuery`/location metadata instead of using the full URL as the query label.
- Content-quality degradation is now emitted as an operator diag event instead of a user-visible warning.
- Description text and Markdown now use a shared HTML entity decoder for named, decimal, and hex entities.

#### Fixed

- Escaped block-level HTML descriptions are now decoded before text/Markdown conversion while escaped inline tags remain literal.

### 0.2.x — 2026-05-14

#### Added

- Detail URL paste-mode for direct `/job/<id>` inputs.
- Structured SERP, detail-fetch, and content-quality run counters.
- Post-filter pipeline for `includeKeywords`, `excludeKeywords`, `fromDate`, `toDate`, and `maxAgeMinutes`.
- `includeRunSummary` notification toggle.

#### Fixed

- Incremental state isolation for search filters and post-filters.
- `maxResults` output-cap handling for incremental and post-filtered runs.
- Detail-fetch proxy fallback and detail field coverage.
- Description length now reflects truncated output.
