- 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.
- 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.
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.
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).