# Changelog of JobsDB Scraper \[Just 💰$0.99] — Hong Kong & Thailand Jobs (`blackfalcondata/jobsdb-scraper`) Actor

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

## Changelog

### Unreleased

#### Fixed

- A date-only "To date" (for example 2026-09-25) now includes jobs posted at any time on that day. Before, it stopped at midnight, so "From date" and "To date" set to the same day returned no jobs. A full date-and-time "To date" still cuts off at that exact time.

### 0.4.1 — 2026-08-14

#### Fixed

- Runs no longer fail outright when a search is refused. A minority of requests were being rejected before results came back, and because every retry left from the same place, one rejection failed the whole run with "rate limited" — even though the same search succeeded seconds later. Requests now rotate their route on each attempt and switch to a second route when one is refused, so an isolated rejection costs a retry instead of the run.

### 0.4.0 — 2026-06-24

#### Changed

- **Reliability and freshness improvements** to how listings are retrieved — more consistent results across every supported market. No input changes required and existing configurations keep working.
- **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-31

#### Added

- **Applicant demand data** (opt-in via `includeApplicantInsights`, default off). Each job can carry `applicantCount`, `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`.
- **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.

### 0.2 — 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 — 2026-05-15

#### Added

- Advanced post-filters: include/exclude keywords, field-specific keyword matching, date windows, and custom output-field filters.
- `jobScore` and `jobScoreReasons` for ranking, triage, and AI workflows.
- Detail proxy fallback counters, content-quality distribution, and operator diag signal for degraded detail quality.
- Release gate script and GitHub Actions workflow for build/schema/test validation.

#### Changed

- Incremental state now includes filter dimensions so different filter universes do not share state.
- `maxResults` is treated as an output cap after post-filters.
- Compact output now includes `jobScore`.
- Detail concurrency reduced to 50 for steadier runs.

#### Fixed

- Replaced regex Redux extraction with balanced JSON scanning.
- Improved detail enrichment field coverage.
- Escaped block-level HTML descriptions are now decoded before text/Markdown conversion while escaped inline tags remain literal.
- Improved notification URL error handling and diagnostic input redaction.
- Removed unused timed batch fetch code.

### 0.1 — unreleased

#### Added

- Initial scaffold (ported from jobstreet-scraper)
- Multi-market support: Hong Kong, Thailand
- Keyword search with location, classification, salary, and work type filters
- Detail enrichment with full descriptions, company profiles, and salary data
- Incremental mode — only new or changed listings on recurring runs
- Compact output mode for AI-agent and MCP workflows
- Description HTML + markdown output for RAG/LLM pipelines
- Cross-run repost detection
