# Changelog of Google Jobs Scraper — Descriptions, Apply Links, Salaries (`foxlabs/google-jobs-scraper`) Actor

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

## Changelog

### 0.1.5 — 2026-09-28

- **Poland and Turkey removed from the `country` list.** Google showed ordinary web results there instead of Google Jobs (2 of 2 test searches each, 2026-09-28), so a run could only return the free "no jobs" row. An input with `country` `pl` or `tr` is now rejected by input validation before the run starts. The other 39 countries are unchanged.

### 0.1.4 — 2026-09-28

- Pricing: $3 per 1,000 jobs (one `job` event per delivered job) plus Apify's Actor start event. Status rows stay free. README pricing section filled in. No code change.

### 0.1.3 — 2026-09-28

Fixes from an independent review of build 0.1.2 (62 README claims checked against 18 platform runs: 12 wrong, 6 unverifiable). Measured by re-reading the 445 jobs of the 0.1.2 test runs with the new code.

- **Apply links — which links are set apart (changed behaviour, same fields):** every link Google lists now stays in `applyOptions` by default. A link moves to `otherEmployerOptions` only on strong evidence — another company's own ATS page (tenant) or its own careers site (a `careers.`/`jobs.`-style sub-domain outside .org/.edu/.gov, or a corporate careers path), without this job's title — and Google's first link never moves, so `applyUrl` is always Google's first link. Links moved 213 → 40; jobs whose first link was moved 2 → 0; empty `applyUrl` 1 → 0. Of 77 links the review labelled by hand, the 19 still moved are all other companies' (7 other-company links stay: their URL shows no title to compare or no careers-site pattern); none of the 50 job-board links and not the employer's own site is moved. The 0.1 note "job-board links without an employer name all stay" was wrong (8 were moved in those runs).
- **`evidence` values:** `other-site` is gone — another company's own careers site is now `other-company-site`, other such links are `job-board` or `unknown-site` (they stay, `matchesEmployer: null`); new `employer-hosted-page` (a sub-domain named after the company on a careers or hosting platform). More job boards and ATS platforms are recognised (softgarden, applicantpool, betterteam, careers-page, my-board, staffingreferrals; boards from the review). Work-mode words in a title ("Remote", "Remoto", "Homeoffice", "Hybrid"…) no longer have to appear in the link for `titleInUrl`.
- **`companyDomain`:** only the employer's own domain — never a job board, ATS or careers platform, hosting service or aggregator, also for companies that are job boards themselves (LinkedIn). Two-letter prefixes and common words no longer count as initials ("ALL IN GROUP" matched indeed.com). Same rows: 94 values → 76; the 14 the review found wrong are gone, no new value.
- **Pay:** a multiplier written apart from the number is read ("65 k €" → 65,000; "55 Tsd.", "60 mil", "R$ 4 mil"); Portuguese "por mês" is MONTH. 0.1.2 read 7 of 8 pay labels in a Paris run 1,000 times too small; no other of 206 labels changed.
- **Remote:** "Beliebiger Ort" (German) and "Qualquer lugar" (Portuguese) are recognised as "Anywhere" (left out by `auto`/`exclude` with a location; `isRemote: true`); a remote word in the title ("Homeoffice") sets `isRemote`. Other languages' labels were not seen in tests and are not assumed.
- **Employment type and dates:** French "Prestataire" and Portuguese "Prestador de serviços" are CONTRACTOR; Portuguese "há 1 mês" is read.
- **Searches:** a job past the per-search limit is no longer marked as seen, so a later location or query can still deliver it; the same words in another order run as one search.
- **README:** corrected to measured behaviour (`applyUrl`, `otherEmployerOptions`, `matchesEmployer`/`employerInUrl`, `companyDomain`; empty location = remote jobs plus jobs near the proxy's location; invalid input is rejected with HTTP 400 before a run starts — the 0.1 note "invalid values stop the run" was wrong; `SOURCE_REPORT` counts duplicates and filtered jobs; turning descriptions off does not speed a run up; performance and data-quality tables from build 0.1.2 runs with run IDs). The claim that the Actor is monitored with a fixed set of test searches was removed: no monitoring runs at the moment. New notes: Poland and Turkey returned web results instead of Google Jobs in tests; Spain and the Netherlands show description previews.

### 0.1 — 2026-09-28

First version.

- Google Jobs (Search, Jobs tab) through the Apify Google SERP proxy: title, company, location, posted date (parsed in 9 languages; empty when Google shows none — 57–86% of jobs had one in the platform test runs), employment type, salary (range, currency, period), direct apply links (`applyUrl` + `applyOptions`), source, full description or preview (`descriptionIsPreview`), highlights, perks, company logo, Google job ID.
- `companyDomain` from the employer's own apply site when it carries the company name (initials and acronyms count: bswhealth.com, gm.com, hcahealthcare.com for "HCA …"; generic words such as "health" alone do not); `atsProvider` + `atsUrl` from the job's own link or an ATS link whose tenant carries the company's name.
- Other employers' links are separated: Google sometimes groups other employers' jobs under a job (an Uber job listed Paramount's and Capgemini's careers sites, a Baseten job on LinkedIn and Palantir's Lever page, in Uber's own panel). Links whose URL names or belongs to another employer and does not show the job's title go to `otherEmployerOptions`; each link carries `matchesEmployer`, `evidence`, `employerInUrl`, `titleInUrl`, `shownByGoogle` and `googleRank`. Measured on the platform test runs (130 jobs): 61 of 794 links moved, Google's first link never; job-board links without an employer name all stay.
- Apply-button labels are matched to links by name, not by position: Google lists some links without a button, which had shifted every label after them.
- More than 10 jobs per search: related searches and role-neutral variants, de-duplicated by job ID, stopping when searches bring no new jobs.
- `remoteJobs` (`auto` default, `include`, `exclude`, `only`; replaces `remoteOnly`, which still maps to `only`): Google mixes nationwide remote jobs (location "Anywhere") into location searches — 11 of 50 in a New York platform test, 10 of them from widening searches. With `auto`, a search with a location leaves them out (0 after the change; counted in `SOURCE_REPORT` as `filteredOut.remoteAnywhere`) and a search without one keeps them.
- Filters: date window, employment type, remote jobs; invalid values stop the run with the reason.
- Free status rows and a `SOURCE_REPORT` record explain every empty or filtered search; only delivered jobs are charged.
- Batch and Standby code paths share one `runQuery` (published as a batch Actor).
