Google Jobs Scraper - Salaries & Apply Links
Pricing
from $4.25 / 1,000 job delivereds
Google Jobs Scraper - Salaries & Apply Links
Scrape Google Jobs in 23 countries: title, company, normalized salary, direct apply links, posted date, job type, remote flag, description. Filter by date, type, remote, company and job board. Daily job alerts with only-new mode. Pay per unique job.
Pricing
from $4.25 / 1,000 job delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Google Jobs Scraper: Salaries and Apply Links
Google Jobs Scraper collects job listings from Google's job search in 23 countries: title, company, location, normalized salary (min, max, currency, period), every direct apply link, posting date, job type, remote flag and the full description, with duplicates removed. It is used by recruiters and sourcers, job boards and aggregators, salary analytics teams, and sales teams looking for companies that are hiring.
At a glance
| Apify plan | Per job | Per 1,000 jobs |
|---|---|---|
| Free | US$ 0.003 | US$ 3.00 |
| Bronze | US$ 0.00285 | US$ 2.85 |
| Silver | US$ 0.0027 | US$ 2.70 |
| Gold and above | US$ 0.00255 | US$ 2.55 |
- One charge per unique job saved. No monthly fee and no start fee; proxy and compute are included. 30 jobs cost US$ 0.09.
- Free: duplicates, jobs outside your filters, and
NO_JOBS_FOUND,JOBS_NOT_AVAILABLEandBLOCKEDrows. - Job alerts:
onlyNewJobson a daily schedule delivers, and charges, only jobs you have not received before.
Quick start
{"queries": ["nurse"],"location": "London","country": "gb","datePosted": "week","jobTypes": ["FULLTIME"],"maxItems": 30}
An empty input searches "software engineer" in the US. One real row from a US "data analyst" run, description and lists shortened:
{"jobId": "eFsvOGOsAGm9b-ZzAAAAAA==","title": "Strategic Data Analyst - Global Business Solutions - New York City","companyName": "TikTok","location": "New York, NY","via": "LinkedIn","postedAgo": "23 days ago","postedAt": "2026-08-21","employmentType": "Full-time","employmentTypes": ["FULLTIME"],"isRemote": false,"salaryText": "The base salary range for this position in the selected city is $108000 - $151200 annually","salaryMin": 108000,"salaryMax": 151200,"salaryCurrency": "USD","salaryPeriod": "YEAR","benefits": ["Health insurance", "Dental insurance", "Paid time off"],"description": "Responsibilities\nAbout Us\nThe Global Business Solutions (GBS) team is responsible for ...","jobHighlights": [{ "title": "Qualifications", "items": ["3+ years in a digital marketing company, ..."] }],"applyOptions": [{ "title": "Apply on LinkedIn", "url": "https://www.linkedin.com/jobs/view/...", "domain": "linkedin.com" },{ "title": "Apply on Dice", "url": "https://www.dice.com/job-detail/...", "domain": "dice.com" }],"applyUrl": "https://www.linkedin.com/jobs/view/...","searchQuery": "data analyst","country": "us","errorCode": null}
What it fixes
- Only 10 jobs per search. Google Jobs shows at most 10 jobs per search to automated clients. With
expandSearch(on by default) the Actor repeats the search in the largest cities of the country and with job-type variations, removes duplicates by Google's job id, and stops when new pages bring fewer than 5 new jobs on average. Single US runs returned 150 "software engineer" and 200 "data analyst" jobs. - Salary as free text. Pay is parsed into
salaryMin,salaryMax,salaryCurrencyandsalaryPeriod, from formats like "$94,100 - $122,300/ year", "35 k € à 40 k € par an", "£1.5k to £2k a month" and Indian lakh amounts. The original stays insalaryText. - Google's date filter is unreliable. The posting date of every job is checked against
datePosted. - Redirect links.
applyOptionsholds the direct links to each job board or career site, with tracking parameters removed.
Switching from another Google Jobs actor? Your existing input works
| Field you already send | Here |
|---|---|
query, searchTerm, searchTerms, includeKeyword | Same as queries (comma-separated includeKeyword is one term) |
locationName, targetLocations | Same as location / locations |
countryCode, countryName ("usa", "uk", "germany"...) | Same as country |
languageCode | Same as language |
posted_within (24h, 3d, 7d, 30d, any), hoursOld | Mapped to datePosted |
jobType (text or array) | Same as jobTypes |
workFromHome, isRemote | Same as remoteOnly |
num_results, maxResults | Same as maxItems |
max_pagination, pagesToFetch | Same as maxPagesPerQuery |
companyName | Added to the search term |
google_domain, include_lrad, lrad_value, max_delay, cleanup_results | Not needed or ignored |
Output uses camelCase: companyName, jobHighlights, applyOptions, jobId, jobUrl (the share link), postedAgo and employmentType.
Countries
Google Jobs answered in our tests for: United States, United Kingdom, Canada, India, Singapore, South Africa, Philippines, Malaysia, United Arab Emirates, Nigeria, Pakistan, Brazil, Germany, Austria, Switzerland, France, Italy, Denmark, Japan, Indonesia, Saudi Arabia, Egypt and Kenya. Australia, New Zealand, Ireland, Spain, Mexico, the Netherlands, Poland, the Nordic countries, South Korea and others showed no jobs tab and return one free JOBS_NOT_AVAILABLE row. Leave language empty outside English-speaking countries: the country's main language is used.
Filters and job alerts
Filters are checked on every job, and jobs that fail them are dropped and not charged: datePosted (today, 3days, week, month), jobTypes, remoteOnly (adds "work from home" in the search language and keeps jobs Google marks as remote), companyNames, excludeCompanies (for example staffing agencies) and excludeSources (job boards such as LinkedIn, matched against via). About half of Google Jobs listings show no posting date, so narrow date windows return few jobs.
Daily alert: save this as a Task with a Schedule.
{ "queries": ["registered nurse"], "location": "Boston, MA", "datePosted": "3days", "excludeSources": ["LinkedIn"], "onlyNewJobs": true, "maxItems": 100 }
The first run delivers what matches today; later runs deliver only jobs not delivered before for the same search, and already-delivered jobs do not count toward maxItems. Memory lives in the Key-Value Store google-jobs-only-new in your account, one record per search, location, country, language and filter set. A day with nothing new costs nothing for results.
Output fields
Fill rates from 200 "data analyst" jobs in the US and 30 "comptable" jobs in France.
| Field | Example | US | FR |
|---|---|---|---|
jobId, title, companyName, location | Google's job id, "TikTok" | 100% | 100% |
via | the site Google found it on: "LinkedIn", "Indeed" | 100% | 100% |
postedAgo, postedAt | "23 days ago", "2026-08-21" (computed on the run day) | 54% | 97% |
employmentType, employmentTypes | "Full-time", ["FULLTIME"] | 98% | 7% |
isRemote | true when Google marks work from home | 100% | 100% |
salaryText, salaryMin, salaryMax, salaryCurrency | 108000, 151200, "USD" | 45% | 60% |
salaryPeriod | HOUR, DAY, WEEK, MONTH or YEAR | 17% | 60% |
benefits, tags | "Paid time off", "No degree mentioned" | 44 to 55% | 90% |
description | full text, e-mails and phones masked | 100% | 100% |
jobHighlights | {title: "Qualifications", items: [...]} | 94% | |
applyOptions, applyUrl | {title, url, domain} per place to apply; the first one | 100% | 100% |
jobUrl, searchUrl | the job on Google Jobs; the search that found it | 100% | 100% |
searchQuery, searchLocation, country, language | what you sent | 100% | 100% |
error, errorCode, scrapedAt | see below |
Rows not charged
errorCode | Meaning |
|---|---|
NO_JOBS_FOUND | No job matched this search and filters. Check the spelling, use the country's language (for example "Pflegekraft" in Germany) or widen datePosted. |
JOBS_NOT_AVAILABLE | Google Jobs does not answer for this country. |
BLOCKED | Google did not return the results page after several attempts. Run again. |
Use it from code and AI agents
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("scrapewise/google-jobs").call(run_input={"queries": ["AI engineer"], "location": "London", "country": "gb", "datePosted": "week"})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job["companyName"], job["salaryMin"], job["applyUrl"])
The same works from the HTTP API (run-sync-get-dataset-items), n8n, Make, Zapier and Google Sheets. For AI agents: https://mcp.apify.com/?actors=scrapewise/google-jobs.
Requests an agent can pass straight through:
- "Find remote machine learning engineer jobs posted this week in the US" ->
{"queries": ["machine learning engineer"], "country": "us", "remoteOnly": true, "datePosted": "week", "maxItems": 50} - "Compare data analyst salaries in Austin, Seattle and Chicago" ->
{"queries": ["data analyst"], "locations": ["Austin, TX", "Seattle, WA", "Chicago, IL"], "maxItems": 90, "maxItemsPerQuery": 30} - "Every morning, send me new nurse jobs in Toronto that are not from LinkedIn" ->
{"queries": ["registered nurse"], "location": "Toronto, ON", "country": "ca", "datePosted": "3days", "excludeSources": ["LinkedIn"], "onlyNewJobs": true, "maxItems": 100}
FAQ
Why did I get fewer jobs than maxItems?
Google Jobs has a limited number of listings per search, and the Actor stops when pages keep repeating jobs. Remove a filter, add locations or add related terms.
How fast is it? The default 30 jobs take about 80 seconds; 200 US jobs took 270 seconds. Plain HTTP through Apify's Google SERP proxy, no browser.
Does it scrape LinkedIn or Indeed directly?
No. It reads Google Jobs, which aggregates them; via shows the source and applyOptions links to all of them.
Can I call it from the API, n8n, Make, Zapier or an AI agent? Yes, see the section above. A raw HTTP call:
curl -X POST "https://api.apify.com/v2/acts/scrapewise~google-jobs/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" -d '{"queries": ["data engineer"], "country": "de", "datePosted": "week"}'
Does it collect personal data? Job postings are company ads; e-mail addresses and phone numbers inside descriptions are masked. You are responsible for how you use the data under GDPR, CCPA or local law.
Limitations
- At most 10 jobs per Google search; larger results come from city and job-type variations.
- With
todayor3days, only jobs that show a posting date are returned. - Descriptions are the text Google shows; some providers show only a preview.
- Something broke? Open an issue on the Issues tab.
Changelog
- 2026-10-19: examples for AI agents (Apify MCP server).
- 2026-10-04:
onlyNewJobsfor daily job alerts; filterscompanyNames,excludeCompaniesandexcludeSources. - 2026-09-14: Store discounts by plan.
- 2026-09-13: first public release; dates checked on every job, free
JOBS_NOT_AVAILABLErows, field names from other scrapers accepted.