Google Jobs Scraper - Salaries & Apply Links avatar

Google Jobs Scraper - Salaries & Apply Links

Pricing

from $4.25 / 1,000 job delivereds

Go to Apify Store
Google Jobs Scraper - Salaries & Apply Links

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

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

a day ago

Last modified

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 planPer jobPer 1,000 jobs
FreeUS$ 0.003US$ 3.00
BronzeUS$ 0.00285US$ 2.85
SilverUS$ 0.0027US$ 2.70
Gold and aboveUS$ 0.00255US$ 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_AVAILABLE and BLOCKED rows.
  • Job alerts: onlyNewJobs on 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, salaryCurrency and salaryPeriod, 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 in salaryText.
  • Google's date filter is unreliable. The posting date of every job is checked against datePosted.
  • Redirect links. applyOptions holds 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 sendHere
query, searchTerm, searchTerms, includeKeywordSame as queries (comma-separated includeKeyword is one term)
locationName, targetLocationsSame as location / locations
countryCode, countryName ("usa", "uk", "germany"...)Same as country
languageCodeSame as language
posted_within (24h, 3d, 7d, 30d, any), hoursOldMapped to datePosted
jobType (text or array)Same as jobTypes
workFromHome, isRemoteSame as remoteOnly
num_results, maxResultsSame as maxItems
max_pagination, pagesToFetchSame as maxPagesPerQuery
companyNameAdded to the search term
google_domain, include_lrad, lrad_value, max_delay, cleanup_resultsNot 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.

FieldExampleUSFR
jobId, title, companyName, locationGoogle's job id, "TikTok"100%100%
viathe 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%
isRemotetrue when Google marks work from home100%100%
salaryText, salaryMin, salaryMax, salaryCurrency108000, 151200, "USD"45%60%
salaryPeriodHOUR, DAY, WEEK, MONTH or YEAR17%60%
benefits, tags"Paid time off", "No degree mentioned"44 to 55%90%
descriptionfull text, e-mails and phones masked100%100%
jobHighlights{title: "Qualifications", items: [...]}94%
applyOptions, applyUrl{title, url, domain} per place to apply; the first one100%100%
jobUrl, searchUrlthe job on Google Jobs; the search that found it100%100%
searchQuery, searchLocation, country, languagewhat you sent100%100%
error, errorCode, scrapedAtsee below

Rows not charged

errorCodeMeaning
NO_JOBS_FOUNDNo job matched this search and filters. Check the spelling, use the country's language (for example "Pflegekraft" in Germany) or widen datePosted.
JOBS_NOT_AVAILABLEGoogle Jobs does not answer for this country.
BLOCKEDGoogle did not return the results page after several attempts. Run again.

Use it from code and AI agents

from apify_client import ApifyClient
client = 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 today or 3days, 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: onlyNewJobs for daily job alerts; filters companyNames, excludeCompanies and excludeSources.
  • 2026-09-14: Store discounts by plan.
  • 2026-09-13: first public release; dates checked on every job, free JOBS_NOT_AVAILABLE rows, field names from other scrapers accepted.