# Changelog of Google Jobs Scraper - Job Postings API (`redomic/google-jobs`) Actor

- **URL**: https://apify.com/redomic/google-jobs/changelog.md
- **Full Actor documentation**: https://apify.com/redomic/google-jobs.md

## Changelog

### 0.6

- \[2026-11-07 DAY-UPDATE] Multiple searches in one run: new optional `queries` input (up to 10 terms, falls back to the single `query` when empty) runs in order, sharing one time budget and jobId/fingerprint dedupe across searches, with one status row per search and rows tagged by the search that found them; `maxJobs` applies per search, single-query runs unchanged.

- \[2026-11-07 DAY-UPDATE] Monitor mode: history is now stored as `{id: firstSeenISO}` (newest first) and every row delivered with `onlyNewJobs: true` carries `firstSeenAt`; an unchanged repeat run delivers and bills nothing.

- \[2026-11-06 DAY-UPDATE] Job details lookup: new optional `jobIds` input (Google job ids or Google Jobs URLs) returns only those jobs with full description and every apply link, one page per id, without re-running a search; status row reports `jobIds` and ends `all job ids tried`, and an unknown id costs nothing.

- \[2026-11-04 DAY-UPDATE] Listing search-match: actor title/description now target "Google Jobs Scraper - Job Postings API" and "job postings scraper"; added `seoTitle`/`seoDescription`; README H1 and first paragraph mirror the job postings scraper terms.

- A jobs query that Google intermittently answers with "there aren't any Jobs matches" is retried once on a fresh session before the run reports `empty`; this lifts the customer service (SG, 2026-10-31) and data analyst remote week (2026-11-01) battery inputs. Fresh 2026-11-02 fixtures and tests cover both queries and the retry.

### 0.5

- Refreshed live fixtures from 2026-11-02 captures; apply-link source extraction now handles "Apply to ..." labels in addition to "Apply on ...".

### 0.4

- `datePosted=3days` searches now retry `since yesterday` when Google intermittently answers with "there aren't any Jobs matches", mirroring the week/month fallbacks, so a short-window search no longer comes back empty.

### 0.3

- Date-filtered searches no longer fail when Google intermittently answers a jobs query like "data analyst remote in the last week" with "there aren't any Jobs matches": the run now retries shorter windows inside the requested range (`week` -> last 3 days, `month` -> last week -> last 3 days) before giving up. The 2026-11-01 battery failure (`data analyst`, `remote`, `datePosted=week`: 0 rows twice) is covered by live fixtures and tests.

### 0.2

- `salaryCurrency` is now an ISO 4217 code (`USD`, `GBP`, `CAD`...); a bare `$` follows the search country. The symbol stays in `salaryText`.
- Salary is read from the title or description when Google shows no salary chip; new `salarySource` (`chip`, `title`, `description`). Day rates are recognised.
- Flat columns: `applyUrl`, `applySource`, `qualificationsText`, `responsibilitiesText`, `benefitsText`.
- Monitor mode: `onlyNewJobs` returns and charges only jobs earlier runs of the same search have not delivered (history in a named key-value store); the status row reports `alreadyDelivered`.
- Agent-ready: `query` defaults to `software engineer`, so `{}` is a valid input.
- Title is now "Google Jobs API Scraper" (experiment exp-002); the "Full details" table has readable column labels.
- Fix: an empty `location` outside the US (e.g. Singapore) returned no jobs; the country name is now added to the search.

### 0.1

- First release: Google Jobs (udm=8 jobs view) through Apify's Google SERP proxy, for US, GB, CA, IN, SG, BR and MX.
- One row per job with Google's job id, the job's own location, salary parsing, real apply links (deduped), description and highlights.
- More than 10 jobs per query via Google's own refinements (date, job type, seniority, remote), deduped, and only while they keep finding new jobs.
- Stops at maxJobs (max 200), the time budget (120 s default, 60 s minimum) or the spend limit, with a status row per query.
- A jobs page the parser cannot read fails the run loudly instead of returning nothing.
- Recruiter and contact names, personal emails and their phone numbers removed from descriptions by default.
