Google Jobs Scraper: Salaries, Descriptions & Apply Links
Pricing
from $3.00 / 1,000 jobs
Google Jobs Scraper: Salaries, Descriptions & Apply Links
Search public Google Jobs by keyword, country and language. Get up to 10 jobs per query with salary ranges, descriptions, highlights, all shown apply links and clear availability notes.
Google Jobs Scraper: salaries, descriptions and apply links
Get job titles, companies, locations, salary ranges, descriptions, highlights and every application link shown by Google Jobs. Enter a search such as software engineer jobs in austin and export up to ten jobs from the first response.
$0.003 per job, with a $0.018 minimum per successful query covering its first six jobs. A ten-job query costs $0.03. Searches that deliver no jobs have no Actor event charge.
What you get
| Field | What it holds |
|---|---|
| Jobs | A plain verdict first, followed by title, company, location, via, postedAgo, employmentType and the original tags. |
| Salary evidence | salaryText, salaryMin, salaryMax, salaryCurrency, salaryCurrencySource, salaryPeriod and salaryIsEstimate. Missing values stay null. |
| Descriptions and highlights | description, descriptionSource, descriptionStatus, grouped highlights, and benefitTags. These are the source text, without AI rewriting. |
| Application links | Every shown apply option as applyLinks: board name, original URL, URL type and the Google redirect when present. Also sourceUrl, googleJobId and googleJobsUrl. |
| Search context | query, country, language, queryPosition, page, fetchedAt, includedInSearch and a stable resultId. |
| Free notes and SUMMARY | Unavailable searches, source refusals, skipped records, spending-limit stops and the first-response boundary are explicit. Filter kind = job for jobs only. |
What people use it for
- Hiring research: Collect the openings and advertised pay that appear for a role and location.
- Job discovery: Build a shortlist with multiple application options for each listing.
- Pay comparisons: Compare the salary labels actually published, retaining pay periods and missing-currency notes.
- Scheduled monitoring: Repeat the same searches and compare Google job IDs across runs. Each new run is billed separately.
How to use it
- Enter one or more Search queries, including a city, region or remote wording.
- Choose the Country and Result language. Leave Maximum jobs per query at ten for a full first response.
- Set Maximum cost per run to at least $0.03005 for one ten-job query, including Apify’s start charge.
- Start the Actor and open the Jobs table. Filter
kindtojobto exclude free note rows; export JSON for nested application links and highlights.
Input
| Field | Example | Notes |
|---|---|---|
queries | ["software engineer jobs in austin"] | Up to 20 strings, each at most 300 characters. Duplicate searches are combined. Empty input uses this search. |
country | us | Two-letter search setting; examples: gb, za, de. It is not proof of the request’s physical location. |
language | en | English (en) or German (de) interface labels. Source job text is not translated. |
maxJobsPerQuery | 10 | 1–10 from the first response. The six-job minimum price applies even when fewer jobs are requested or found. |
Output
Each result is one row in the run's dataset (download it as JSON, CSV, Excel, XML or HTML, or read it through the API). An example row (values shortened):
{"verdict": "Job found; 8 apply options; salary shown.","kind": "job","title": "Senior Software Engineer","company": "Example Company","location": "Example City, Region","via": "Example Careers","postedAgo": "3 days ago","employmentType": "full-time","salaryText": "155K–170K a year","salaryMin": 155000,"salaryMax": 170000,"salaryCurrency": null,"salaryPeriod": "year","applyLinkCount": 8,"googleJobId": "example-source-job-id","applyLinks": [{"board": "Example Board 1","url": "https://jobs1.example.org/posting/example-job","urlType": "direct"},{"board": "Example Board 2","url": "https://jobs2.example.org/posting/example-job","urlType": "direct"},{"board": "Example Board 3","url": "https://jobs3.example.org/posting/example-job","urlType": "direct"},{"board": "Example Board 4","url": "https://jobs4.example.org/posting/example-job","urlType": "direct"},{"board": "Example Board 5","url": "https://jobs5.example.org/posting/example-job","urlType": "direct"},{"board": "Example Board 6","url": "https://jobs6.example.org/posting/example-job","urlType": "direct"},{"board": "Example Board 7","url": "https://jobs7.example.org/posting/example-job","urlType": "direct"},{"board": "Example Board 8","url": "https://jobs8.example.org/posting/example-job","urlType": "direct"}],"note": "Salary currency was not stated in the salary label.","queryPosition": 1,"includedInSearch": true}
This example comes from the 25 October 2026 fixture replay of a real public search response. Company names, board names, location, job ID and site addresses have been replaced, and the technology name in the title has been removed. The salary, posting age, employment type, number of apply options and missing-currency note are retained. Description and highlight text are omitted from this example. SUMMARY records the searches, delivered rows, notes and event counts.
Pricing
- $0.018 per successful query, including its first six delivered jobs. The
job-searchevent is charged with the first delivered job. - $0.003 per additional delivered job in that query. A query with ten jobs costs $0.03.
- The minimum applies when only one to five jobs are found or requested. No extra charge is made for an absent job.
- Empty results, unavailable pages, blocked searches and diagnostic notes have no Actor event charge.
- The same price on every Apify plan. No AI charge, account login or separate proxy subscription is required.
What typical jobs cost at the list price:
| Job | Cost |
|---|---|
| One query with 1–6 jobs | $0.018 |
| One query with 7 jobs | $0.021 |
| One query with 10 jobs | $0.030 |
| Five queries with 10 jobs each | $0.150 |
| Twenty queries with 10 jobs each | $0.600 |
| A query with no delivered jobs | $0 in Actor events |
Apify’s $0.00005 start charge counts towards the buyer’s Maximum cost per run and is additional to the examples above. Allow at least $0.01805 for one successful query or $0.03005 for ten jobs. The Actor checks the budget before requesting a page. The first six jobs remain included if the minimum consumes the remaining budget; later jobs stop at the limit. A restart of the same run does not charge again for acknowledged rows.
Tips
- Put location and any remote wording in the search itself. Search wording is not a strict job filter.
- Keep the default ten-job limit for the lowest effective price on a full response.
- Keep original salary text beside numeric ranges. A missing currency, pay period or advertised salary is not guessed.
- Use both
googleJobIdand the search context when comparing scheduled runs; a job can appear in several searches.
Use it through the API
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("zaiq/google-jobs-scraper").call(run_input={"queries": ["software engineer jobs in austin"], "country": "us", "language": "en", "maxJobsPerQuery": 10})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('zaiq/google-jobs-scraper').call({"queries": ["software engineer jobs in austin"], "country": "us", "language": "en", "maxJobsPerQuery": 10});const { items } = await client.dataset(run.defaultDatasetId).listItems();
HTTP (one call, results back)
curl -X POST 'https://api.apify.com/v2/acts/zaiq~google-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>' \-H 'Content-Type: application/json' \-d '{"queries": ["software engineer jobs in austin"], "country": "us", "language": "en", "maxJobsPerQuery": 10}'
Integrations and schedules
- Schedules: run it every hour, day or week from the Apify Console (Schedules) and keep a history of results.
- Make, Zapier, n8n, Google Sheets, Slack, Airtable: connect it through Apify's integrations, or send each finished run to a webhook.
- Datasets: results stay in the run's dataset; export them or read them by API whenever you need them.
Use it with AI agents (MCP)
Add Apify's MCP server (https://mcp.apify.com) to Claude, ChatGPT, Cursor, VS Code or any MCP client. The agent can find this Actor and run it for you: ask it for "find software engineer jobs in austin with advertised salaries and application links". AI agents can also pay for runs directly through Apify's agentic payments.
Limits
- This release reads the first response only, usually ten jobs per query. Further paging is not supported.
start=10is not a working Jobs continuation. SUMMARY never claims that all matching jobs were collected. - The source may show fewer jobs, no salary, an abbreviated description, stale postings or application links that later expire. A job found here is not confirmation that the vacancy is still open.
- The Actor uses Google’s returned text and job data. It does not visit application boards, submit applications, verify employer claims or infer missing pay.
- If a direct application URL is absent, its Google redirect is retained with
urlType = google-redirect. It is not followed. - Only public, signed-out pages are read. Login walls, bot checks, unsupported responses and HTTP errors are reported. No CAPTCHA is solved.
- English and German labels are supported. Country is a search setting; results may include other locations. Search wording can request remote work, but no strict remote, date or employment filter is applied.
- Up to 20 queries per run, one request per query, with a 35-second request timeout and a 16 MiB decoded-response limit. No automatic source retries are made.
- Malformed cards are skipped individually and listed in SUMMARY. Diagnostic rows are free and can still appear after the spending limit.
FAQ
Can I collect hundreds of matching jobs from one query?
No. This version returns up to ten jobs from the first response. Use more specific, separate searches when useful; it does not claim to exhaust all results.
Do descriptions or apply links need extra requests?
No. They come from the same page’s embedded public job data. Description text can still be incomplete at the source.
What happens if only one job is found?
The successful-query charge is $0.018. The first six jobs are included in that price, so receiving one job does not create five placeholder rows or separate charges for missing jobs.
What happens after a restart?
The page’s parsed rows are checkpointed together before delivery. A restart of the same run resumes that batch and skips acknowledged result IDs. A separate scheduled run is a new billable run.
Are repeated jobs across different queries removed?
No. One row per Google job ID per distinct query preserves which searches found the job. Repeated identical input queries and duplicate cards within a response are combined.
Why is salaryCurrency null?
Google sometimes shows a range without a currency. The Actor leaves it null. A dollar symbol is interpreted using the country setting and marked symbol-and-country.
Can I export application links?
Yes. JSON retains every nested link and highlight. The dataset also supports CSV and Excel exports.
Related Actors from Zaiq
- ats-jobs-scraper: public vacancies from employers’ supported applicant tracking systems
- workday-jobs-scraper: public vacancies from Workday career sites
Support
Questions, a site that changed, or a field you need? Open an issue on this Actor's Issues tab: we answer there, usually within a day.
Also found as: google jobs scraper, job search API, job listings, job salaries, job descriptions, job application links.