# Changelog of Job Scraper - LinkedIn Jobs, Indeed & Multi-City Job Alerts (`groupoject/multi-job-board-scraper`) Actor

- **URL**: https://apify.com/groupoject/multi-job-board-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/groupoject/multi-job-board-scraper.md

## Changelog

All notable changes to **Indeed Jobs Scraper** are documented here.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### \[Unreleased] - 2026-09-16

#### Fixed

- Accept Google's observed relative application redirects, resolve destinations with a bounded budget, and never substitute unrelated page links.
- Remove the legacy Google Jobs request parameter and accept the current employment-type label.
- Keep Google monitor identity stable when application redirect tokens rotate.

### \[1.1.5] - 2026-09-16

#### Added

- Up to 20 search locations with per-row search-location provenance.
- Title inclusion/exclusion, exact company exclusions, salary-only output and description format selection.
- Per-board/term/location diagnostics with timings, returned/delivered counts and explicit failures.
- Deduplication of shared direct-application URLs while retaining legacy monitor identities.

#### Fixed

- Monitor checkpoints contain delivered jobs only, not filtered or capped-out candidates.
- State is checkpointed after each successful dataset write; write failures are not hidden as source errors.
- All-source failures fail the run, and missing-title or missing-link records are excluded from output.
- Respect the remaining dataset-event budget; default combined output is 100 jobs (explicit 0 remains unlimited).
- Normalize monitor storage names and keep unknown remote flags from being interpreted as true.

### \[1.1.0] — 2026-09-05

#### Added

- Bayt and Naukri as optional job boards alongside LinkedIn, Indeed, Google Jobs, Glassdoor, and ZipRecruiter.
- Rich salary, company, skills, experience, email, direct-apply, job-age, and hiring-signal fields.
- Search radius, pagination offset, Easy Apply, LinkedIn company targeting, and optional full descriptions.
- Annual salary normalization and persistent `onlyNewJobs` monitoring for scheduled runs.

#### Fixed

- Apply remote filtering after retrieval when Indeed silently ignores it alongside a recency filter.

### \[1.0.13] — 2026-06-23

#### Fixed

- Route Google Jobs searches through Apify's dedicated Google SERP proxy instead of JobSpy's blocked HTTPS transport.
- Parse Google's current server-rendered job cards, including application URLs and full descriptions, instead of relying on JobSpy's obsolete embedded-data parser.
- Return up to 10 Google Jobs per search term, the reliable limit of the supported Google Search response.
- Report empty board runs explicitly in logs and the run summary instead of silently returning zero results.

### \[1.0.0] — 2026-06-17

#### Added

- Initial release.
- Multi-board job scraping (Indeed, Google Jobs, ZipRecruiter, LinkedIn, Glassdoor) via the open-source `python-jobspy` library.
- One clean row per job with normalized salary, company, location, type, remote flag, posting date, and link.
- Cross-board deduplication (URL-normalized, tracking-param aware; keeps Indeed `?jk=` ids distinct) and multi-term search.
- Filters: remote-only, job type, posted-within-hours, location, country, per-board result cap, total-item cap.
- Per-term error isolation, optional Apify Proxy, run SUMMARY in the key-value store.
- Apify input / dataset / output schemas, README, and Store listing copy.
- Unit tests for salary normalization, field mapping, and dedup (incl. an Indeed `?jk=` regression test).
