Google Jobs Scraper: New Job Alerts, Salaries & Apply Links
Google Jobs listings for many roles in many US cities in one run — salary, highlights, full description and direct apply links — with a new-jobs-only mode for daily alerts.
Verification
Output fields
Authoritative field set from the dataset schema.
| Field | Type |
|---|---|
job_id | string|null |
title | string|null |
company | string|null |
location | string|null |
other_locations_count | integer|null |
via | string|null |
salary_text | string|null |
salary_min | number|null |
salary_max | number|null |
salary_period | string|null |
salary_currency | string|null |
schedule_types | array|null |
work_from_home | boolean|null |
no_degree_mentioned | boolean|null |
benefit_tags | array|null |
other_tags | array|null |
qualifications | array|null |
responsibilities | array|null |
benefits | array|null |
description | string|null |
apply_url | string|null |
employer_apply_url | string|null |
apply_options | array|null |
search_query | string|null |
search_location | string|null |
matched_search | string|null |
notice | string|null |
notice_type | string|null |
source_url | string|null |
Sample row
{
"job_id": "ZrBruAaEW4Eb97eJAAAAAA==",
"title": "Sr Software Engineer",
"company": "Charles Schwab",
"location": "Austin, TX",
"other_locations_count": 2,
"via": "Schwab Jobs",
"salary_text": "164K–205K a year",
"salary_min": 164000,
"salary_max": 205000,
"salary_period": "year",
"salary_currency": null,
"schedule_types": [
"Full-time"
],
"work_from_home": false,
"no_degree_mentioned": true,
"benefit_tags": [
"Dental insurance",
"Health insurance",
"Paid time off"
],
"qualifications": [
"8+ years of software engineering experience"
],
"responsibilities": [
"Design, develop, and maintain software solutions using modern engineering practices"
],
"benefits": [
"In addition to the salary range, this role is also eligible for bonus or incentive opportunities"
],
"description": "Your opportunity\nAt Schwab, you’re empowered to make an impact on your career…",
"apply_url": "https://www.schwabjobs.com/job/austin/sr-software-engineer/33727/101909398560",
"employer_apply_url": "https://www.schwabjobs.com/job/austin/sr-software-engineer/33727/101909398560",
"apply_options": [
{
"source": "Schwab Jobs",
"url": "https://www.schwabjobs.com/job/austin/sr-software-engineer/33727/101909398560",
"is_job_board": false
},
{
"source": "CareerBuilder",
"url": "https://www.careerbuilder.com/job-details/sr-software-engineer-blockchain-ann-arbor-mi--34192420-ab6d-446d-b589-b215d70fe39c",
"is_job_board": true
}
],
"search_query": "software engineer",
"search_location": "Austin, TX",
"matched_search": "software engineer jobs in Austin, TX",
"source_url": "https://www.google.com/search?q=software%20engineer%20jobs%20in%20Austin%2C%20TX&udm=8&hl=en&gl=us"
} Inputs
| Field | Type | Req | Default | Description |
|---|---|---|---|---|
query | string | no | — | A role or keywords, e.g. 'registered nurse' or 'python developer'. Kept forever alongside 'Jobs to search for' — saved tasks and API callers send it. |
queries | array | no | ["registered nurse"] | One or many roles in ONE run, e.g. 'registered nurse', 'medical assistant'. Every role is searched in every location below, and a job found by two searches is returned once. |
location | string | no | — | A US city as 'City, ST', e.g. 'Chicago, IL'. Kept forever alongside 'Locations'. |
locations | array | no | ["Chicago, IL"] | One or many US cities as 'City, ST' (e.g. 'Chicago, IL', 'Austin, TX'). Leave empty to search without a place. A city is what lets the Actor add nearby cities; a state or 'Remote' is searched as written, without them. |
maxJobsPerSearch | integer | no | 30 | Cap PER role-and-location pair, not per run. Google shows 10 jobs per search, so the Actor runs more searches (nearby cities, then job types) until it has this many new jobs or runs out of searches. 10 costs one search. |
postedWithin | string | no | "any" | Keep only jobs Google shows as posted within this window. Applied before billing. Jobs Google shows no age for are kept, so nothing disappears unexplained. The age itself is never included in the output. |
onlyNewJobs | boolean | no | false | Remember every job this monitor has delivered and return (and bill) only jobs it has not sent before. Schedule the Actor daily with this on for a new-jobs feed. The memory is kept in your own Apify account (key-value store 'google-jobs-seen'). |
monitorName | string | no | — | Optional name for the 'only new jobs' memory, e.g. 'nurses-chicago'. Leave empty and the memory is tied to the exact roles and locations you search. Use the same name to share one memory across differently configured runs. |
remoteOnly | boolean | no | false | Keep only jobs Google marks 'Work from home'. Applied before billing. |
expandNearbyCities | boolean | no | true | Also search the largest cities around each US location (Round Rock and Georgetown around Austin). Each nearby city added 8–10 new jobs per search when tested. |
nearbyCities | integer | no | 8 | How many nearby cities to add at most. They are only searched while the cap above is not yet reached. |
nearbyRadiusMiles | integer | no | 25 | How far from each location a nearby city may be. |
expandJobTypes | boolean | no | true | Also search entry level, remote, contract, internship, part time and senior variants of each role. Each added 4–10 new jobs per search when tested. |
includeDescription | boolean | no | true | The full posting text (median ~4,000 characters). Turn off for a lighter dataset; highlights stay either way. |
Pricing
Pay per result (job-listing) — no charge for empty runs.
Example: 1000 job listings at $0.0025/result ≈ $2.50.
FAQ
How many jobs can I get for one role in one city?
As many as Google has across the searches the Actor runs for it. Google shows 10 jobs per search and will not page further without a browser, so the Actor adds the largest nearby cities (up to 30, within the radius you set) and six job-type variants. On 2026-10-31, with 30 nearby cities and a 30-mile radius, one run returned 173 software-engineer jobs around Austin (33 searches), 305 around Chicago (37), and 281 and 354 registered-nurse jobs around Austin and Chicago. Set 'Maximum jobs per role and location' to stop sooner; 10 costs one search.
How does 'Only jobs not sent before' work?
Each run remembers the Google job IDs it delivered, in a key-value store named 'google-jobs-seen' in your own Apify account, under a key for this monitor — your 'Monitor name', or one derived from the roles and places you search. The next run skips those jobs before billing and searches further to fill your cap with new ones. Run twice back to back on 2026-10-31, the second run returned 100 different jobs. When nothing new exists you get one free row saying so. Delete the store to start over.
Why are there no posting dates in the rows?
Google shows an age ('3 days ago'), not a date, and our rows carry no dates. 'Posted within' still uses that age to filter before billing; listings Google shows no age for are kept rather than silently dropped. For a daily feed, 'Only jobs not sent before' is the more exact tool: it compares job IDs, not dates.
Are the apply links the real postings?
Yes. Google's apply buttons are redirect links; the Actor ships the posting URL Google holds for each button instead, with tracking parameters removed. Across 1,113 jobs on 2026-10-31, 4,583 of 4,617 apply options carried a URL and 1,107 jobs had at least one. Google sometimes groups a near-identical posting from another city or employer under one job, and those links are passed on exactly as Google lists them.
What is employer_apply_url?
An apply link on the employer's own careers site or applicant-tracking system, filled only when a distinctive word of the employer's name appears in that link's source or address. Many listings are on job boards only, so it was filled for 169 of 1,113 jobs on 2026-10-31; when no link is clearly the employer's it stays empty rather than guessed.
How often is a salary shown?
When Google shows one: 482 of 1,113 jobs on 2026-10-31. You get Google's wording plus min, max and period. Most US listings print no currency symbol, so salary_currency is set only when one appears.
Which locations work?
US cities written as 'City, ST' get nearby cities added from the US postal place list. Anything else — a state, 'Remote', or a non-US place — is searched exactly as written, without nearby cities. Searches run on Google's US site in English; other countries were not tested.
What happens when Google does not answer?
Each search is retried once. A role and place whose searches all fail returns one free 'blocked' row; a search Google answers with no listings returns a free 'no_results' row. Nothing is billed for either.
Do I pay for the extra searches?
No. You pay per job returned after filters, at $2.50 per 1,000. A run that needs 30 searches to find 100 new jobs costs the same as one that needs 10.
Guides & use cases
Related actors