# Changelog of Google Jobs Scraper — Job Listings, Salaries & Apply Links (`sondalabs/google-jobs-scraper`) Actor

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

## Changelog

### Search examples and Store SEO — 2026-10-20

- Measure five role phrases in each of ten markets using Sonda Labs Google Trends Scraper; compare only shared weekly scales with sufficient data.
- Replace older software-focused examples with ten small profiles for nursing, warehouse, driving, data entry and administrative jobs. Retain Texas nursing and the Mexico City task; preserve old task data and incremental state.
- Update Store title, description and README opening around job listings, salaries, direct apply links and the measured role families. Pricing, canaries and scraper behavior are unchanged.

### Global quality campaign — 2026-10-20

- Share the four HTTP attempts across a base search and its location fallback, including mixed transport/session failures. Preserve one plus one for purely empty searches and report budget exhaustion.

- Recognize explicit ISO currencies and regional symbols, Swiss grouping, Indonesian/Vietnamese/Danish/Russian magnitudes, traditional Chinese units and Japanese salary prefixes. Preserve original salary text and unknown currencies.

- Parse Arabic numeral glyphs, relative dates, salary periods and regional currency abbreviations; retain original text. Add Greek thousands, regional currency aliases, and historical ZMK as published. Keep ambiguous dollar currencies unknown.

- Share employment badge vocabulary between extraction and normalization, including localized part-time and full-time labels. Permanent contracts alone do not imply full-time hours.

- Recognize explicit Russian, Vietnamese, Indonesian and Arabic work schedules; keep permanent-contract labels separate from hours.

- Keep a missing job location null when Google supplies only the company and source portal; retain the portal in `via`, including observed Chinese, Arabic, Greek, Indonesian, Italian, Portuguese, Russian and Japanese source labels.

### Locale release — 2026-10-20

- Share date-badge, relative-date and salary-period vocabulary for every default language in the country enum. Fix Italian/Dutch dates and salary periods, add missing language units, and normalize numeric separators using the base locale. Preserve unknown dates as null. Add per-country behavioral coverage and sanitized live fixtures.
- Retest AU/IE/NZ/PL/SE/KR with one query each; none returned identifiable job cards, so the country selector remains unchanged.
- Candidate0.1.20 approved for production after owner platform verification: Dutch dates and monthly pay, Italian dates and the three-day filter, Portugal/Brazil, and US/German/empty/default-input regressions. Italian jobs without a date in Google's HTML remain null. Production is rebuilt from main with the same scraper code.

### Earlier changes

- Declare the default dataset in the Actor output schema for Apify Store and API output discovery.

- Private 0.1.17: keep valid Google no-results pages with autocomplete or UI metadata `empty`; require job-specific metadata or a docid before reporting parser mismatch. Explain confirmed single-search failures and that affected searches are not charged.

- Run up to three base searches together even when the charge or job cap covers only part of the input; stop scheduling after a batch has enough eligible candidates. Record actual peak concurrency in `RUN_STATS`.

- Add `skipped` summaries for searches left unexecuted by global limits; report `stopReason` and `unexecutedSearches` in status messages and KV `SUMMARY`.

- Include employment keywords in base and fallback queries, keep expansion within requested schedules, and report employment filter exclusions above 40% in logs, status and search summaries. Date warnings now also appear in each affected summary.

- Parse `M`, `K` and `mil` salary amounts, recognize inline ISO currency codes, and use the country's currency when salary text has no marker.

- Use the prefilled query for `{}` input. Keep normalized `via` free of the `via ` prefix in `both` output and exclude interface controls from highlights.

- Recommend `3days` with `onlyNewJobs` for scheduled daily feeds, including the US example task; `today` can deliver zero when its candidates are all older than 24 hours.

- `today` now searches `qdr:d3`, then keeps only jobs with a known `postedAt` within 24 hours; search expansion uses a `date-3days` variant.

- Removed the `hour` input option after three real `qdr:h` searches returned no jobs. Empty responses now get one retry instead of three.

- Added a warning when the requested date window excludes more than 40% of parsed candidates.

- Process independent base searches in batches of up to three while keeping result order. Each crawler now uses an isolated request list so concurrent searches cannot take one another's URLs.

- Prepared five example tasks, including Santiago and Mexico City, and three daily country canaries with failure and low-result alerts. Public task visibility awaits Store publication.

- Added original Sonda Labs icon, Store SEO, category and tier pricing setup.

### 0.1.0 — 2026-10-18

- Initial Google Jobs Actor with unique-job PPE delivery, search summaries, multi-country parsing, salary and date normalization, direct apply links, search expansion, and incremental state.
- Descriptions reflect the text available in Google's initial response. `descriptionIsTruncated` identifies previews without expanded text.

### Local audit — 2026-10-19 (included in private 0.1.16)

- Serialize billing inside the adapter; reject non-job/invalid items before charging.
- Persist incremental delivery reservations before push, confirm each delivery durably, lock writers, sweep all state shards and cap live IDs at 100,000.
- Collect only eligible canonical snapshots, deduplicate provenance, bound retained raw payloads with temporary disk spilling and release duplicate results promptly.
- Add `maxSearchRequests` (default 100), bound mixed/session retries to four, share the two-request empty budget with location fallback, and deduplicate expansion URLs.
- Report unknown HTML, redirect responses, result depth and remote-filter exclusions explicitly; retain skipped/stop summaries and `skippedUncertain`.
- Redact secrets/contact text and unsafe links, stop saving raw debug HTML, and disable secret-bearing Crawlee statistics persistence. Add optional `personalDataRedacted`.
- Fix compact salary ranges, French grouping, explicit From ranges, JPY/ZAR fallback, localized date labels, singular quantities, minutes and calendar boundaries.
- Validate all configured `google_domain` hosts and fail clearly on unsupported proxy configurations.
- Add local SDK/fixture regressions and a reproducible resource benchmark. No pricing or visibility changes.

### Private validation 0.1.16 — 2026-10-19

- Fix Indian L/lakh/lac/LPA and Cr/crore magnitudes, including compact ranges and explicit INR outside India.
- Add regression coverage for Japanese 万/億, German Tsd./Mio./Mill. and localized million words; preserve explicit currency codes over country defaults.
- India fixture distinguishes the real reported salary from synthetic variants. Private platform validation and measured costs are recorded in docs/05-costos-y-precios.md.
