# Changelog of Drushim Scraper — Israel Job Listings (Hebrew) (`blackfalcondata/drushim-scraper`) Actor

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

## Changelog

### 0.2.4 - 2026-10-02

#### Fixed

- Searches no longer come back empty while the source is having trouble. The source often answers a search with an internal error instead of results, and the run counted that as "nothing found" and finished with 0 results. Those answers are now retried, and if the source keeps failing the run reports an error instead of an empty success.
- City lookup is more complete for the same reason, so fewer locations fail to resolve.
- A run with a maximum cost per run now collects only the results that limit pays for and finishes normally, instead of being stopped part-way. In incremental mode, jobs left out because of the limit are delivered on a later run instead of being skipped.

### 0.2.3 - 2026-09-29

#### Fixed

- Several search terms or locations written as a JSON list in the text field (for example `["developer", "מפתח"]`, as the field description suggests) are now searched one by one. Before, the whole list was sent as a single search term and the run returned nothing.

### 0.2.2 — 2026-09-03

#### Fixed

- Runs started failing on 2026-09-03 because the source stopped answering where the actor was asking. Restored, and runs return results again.
- City filtering no longer falls back to a short built-in list of place names, so less common locations resolve again.
- `locationEnglish` and `regionEnglish` no longer carry stray whitespace from the source, so one city is one value when you group or join on it.

### 0.2.1 — 2026-08-16

#### Fixed

- A bad network route no longer fails the whole run. Every run used the same fixed route, and every retry reused it, so once that route stopped working the run died even though a different one would have worked. Runs now get their own route, and a retry switches to a fresh one.

### 0.2.0 — 2026-04-25

#### Added — Output fields

- `salaryMin`, `salaryMax`, `salaryCurrency: "ILS"`, `salaryPeriod` — structured salary (parsed from `SalaryRangeText` via `_lib/salaryParser`)
- `extractedEmails: string[]` — regex-extracted emails from description+requirements (HTML)
- `extractedPhones: string[]` — defensive phone-number extraction
- `extractedUrls: string[]` — URLs in description (excluding self-referential drushim.co.il)
- `socialProfiles: { linkedin, twitter, instagram, facebook, youtube, tiktok, github, xing }`
- `postedAt` — alias of `postedDate`
- Incremental lifecycle: `firstSeenAt`, `lastSeenAt`, `previousSeenAt`, `expiredAt`
- Repost detection: `isRepost`, `repostOfId`, `repostDetectedAt`

#### Added — Inputs

- `emitUnchanged`, `emitExpired`, `skipReposts` — emission policy
- 5 notification platforms: Telegram/Discord/Slack/WhatsApp Cloud API/generic webhook
- `webhookUrl`, `webhookHeaders` — for n8n/Make/Zapier
- `notificationLimit`, `notifyOnlyChanges`, `phoneExtractionMode`

#### Changed

- **Full incremental classification** — `changeType` now emits `NEW`/`UPDATED`/`UNCHANGED`/`EXPIRED`/`REAPPEARED` (uppercase). Previously only `new`/`updated`.
- **State-lock** — concurrent runs sharing `stateKey` refuse with `Actor.fail`.
- **Multi-query/multi-location preserved** — query × location product still works; state is per-stateKey across all combinations.
- **Reliability preserved** — connection handling for drushim's anti-bot protection unchanged.

#### Compliance

- Migrated from hand-rolled `hash.ts` + `Record<jobCode, hash>` map to canonical `_lib/incrementalState.ts` + `_lib/stateLock.ts` + `_lib/notifications.ts`.
- Preserved drushim's local `salaryParser.ts` (apiClient depends on `parseSalaryFromJsonLd`/`EMPTY_SALARY`/`SalaryData` exports specific to Drushim's JSON-LD format) and `htmlToMarkdown.ts` (site-specific HTML conventions).

### 0.1.x — 2026-04-19

- Fixed: English location names (e.g. "Tel Aviv") now resolve correctly — previously the autocomplete API returned `GeoLexId=0` for English input, which caused every search to return zero results
- Fixed: `maxPages` input now correctly limits pagination (was ignored in previous releases)

### 0.1.0

- Initial release
