Google Jobs Scraper - Salary, Highlights & Apply Links avatar

Google Jobs Scraper - Salary, Highlights & Apply Links

Pricing

from $1.58 / 1,000 jobs

Go to Apify Store
Google Jobs Scraper - Salary, Highlights & Apply Links

Google Jobs Scraper - Salary, Highlights & Apply Links

Scrape Google Jobs (Google for Jobs) by search query and location. Output: one item per job with title, company, location, source board (via), posted date, employment type, salary, remote flag, full description, job highlights and every apply link. Filters: date posted, employment type, remote.

Pricing

from $1.58 / 1,000 jobs

Rating

0.0

(0)

Developer

Artificially

Artificially

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Google Jobs Scraper – Salary, Highlights & Apply Links

Scrape Google Jobs (Google for Jobs, the "Jobs" tab in Google Search) by job title and location. One search covers LinkedIn, Indeed, Glassdoor, ZipRecruiter, Totaljobs, employer career sites and many other boards, already merged by Google. Every job comes back as clean JSON with title, company, location, the board it was found on (via), posted date, employment type, salary, remote flag, full description, Google's job highlights and every "Apply on …" link.

Built by Artificially | Follow us on X @artificially_io

Use with AI agents (MCP)

This actor works as a tool for Claude, ChatGPT, Cursor and other AI agents through Apify's MCP server. Ask something like "find remote data engineer jobs posted this week in London" and the agent calls it for you. Set compactOutput: true and a small maxResultsPerQuery (e.g. 10) so results fit easily in the agent's context.

Quick setup (sign in with your Apify account when asked):

  • Claude (claude.ai or Claude Desktop): Settings → Connectors → Add custom connector, and paste https://mcp.apify.com?tools=artificially/google-jobs-scraper
  • Claude Code or Cursor via the Apify CLI (latest version, apify upgrade): apify mcp install claude-code --tools artificially/google-jobs-scraper (use cursor instead of claude-code for Cursor)
  • Any MCP client (Cursor, VS Code, Windsurf):
{
"mcpServers": {
"apify": { "url": "https://mcp.apify.com?tools=artificially/google-jobs-scraper" }
}
}

Try asking:

  • "Find registered nurse jobs in Chicago posted this week on Google Jobs, with salary and apply links."
  • "Search Google Jobs for remote data analyst roles in the US and summarize salary ranges."

Why this actor

  • Every job board in one search – Google Jobs aggregates postings from hundreds of boards and career sites; you get them deduplicated by Google's own job ID.
  • Real apply links – every "Apply on LinkedIn / Indeed / company site" button with its destination URL, flagged when it is a direct application.
  • Structured fields – salary parsed into min, max, currency and period; postedAt as an ISO date; normalized employmentType; isRemote; highlights split into qualifications, responsibilities and benefits.
  • Filters that map to Google – date posted (24 hours, 3 days, week, month), employment type and remote only, plus country and language editions of Google (verified: US, UK, Canada, France).
  • More than 10 jobs per search – Google shows about ten jobs per page. Ask for more and the actor follows further pages where available and runs related searches (by employment type, recency and seniority), keeping only new jobs.
  • Monitoring mode – turn on onlyNewSinceLastRun, schedule the actor, and each run returns only jobs you have not seen yet.
  • Uses Apify's official Google SERP proxy – no browser, no login, no cookies from you.
  • You only pay for results – only valid jobs are saved and charged. Searches that return nothing are listed for free in FAILED_SEARCHES.

Use cases

  • Job boards and aggregators – fill a niche board with fresh listings from every major source, with working apply links.
  • Recruiters and sourcers – see who is hiring for a role in a city, on which boards, and how fast.
  • Sales "hiring signal" leads – companies hiring for specific roles are buying signals; feed new postings into your CRM daily.
  • Salary and labor-market research – compare pay ranges, remote share and employment types across roles and countries.
  • Job seekers and communities – alerts for "remote + senior + posted in the last 24 hours".

Input

FieldTypeDescriptionDefault
queriesarrayJob searches, e.g. ["software engineer", "registered nurse"] ("jobs" is added automatically)Required
locationstringCity, region or country added as "in –
countrystringGoogle edition / results country (gl): us, uk, ca, fr, …us
languagestringInterface language (hl): en, de, fr, …en
datePostedstringany, today, 3days, week, monthany
employmentTypesarrayfull-time, part-time, contractor, internship, temporary–
remoteOnlybooleanRemote jobs onlyfalse
maxResultsPerQueryintegerJobs to save per search (1–500)10
maxResultsintegerCap for the whole run–
expandQueriesbooleanRun related searches to reach maxResultsPerQuerytrue
includeDescriptionbooleanReturn the full description texttrue
onlyNewSinceLastRunbooleanReturn only jobs not returned by earlier runs with the same inputfalse
compactOutputbooleanSlim items with only the key fields. Best for AI agentsfalse
maxConcurrencyintegerSearches in parallel (1–10)3
proxyConfigurationobjectKeep Apify proxy group GOOGLE_SERPGOOGLE_SERP

Example input

{
"queries": ["data engineer", "python developer"],
"location": "London",
"country": "uk",
"datePosted": "week",
"employmentTypes": ["full-time"],
"maxResultsPerQuery": 30,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"] }
}

Output

{
"jobId": "1_Iqt1mT0QAAAAAA==",
"title": "Registered Nurse (RN) - Evening Shift",
"company": "Example Healthcare",
"location": "Chicago, IL",
"via": "LinkedIn",
"postedAt": "2026-09-22T12:00:00.000Z",
"postedAtRelative": "1 day ago",
"employmentType": "full-time",
"employmentTypeRaw": "Full-time",
"salary": { "raw": "$39–$45 an hour", "min": 39, "max": 45, "currency": "USD", "period": "hour" },
"isRemote": false,
"tags": ["No degree mentioned", "Dental insurance"],
"description": "Summary\n\nWe are hiring registered nurses for our evening shift...",
"highlights": {
"qualifications": ["Active RN license", "BLS certification"],
"responsibilities": ["Provide direct patient care"],
"benefits": ["Dental insurance", "Paid time off"],
"sections": [{ "title": "Qualifications", "items": ["Active RN license", "BLS certification"] }]
},
"applyLinks": [
{ "title": "Apply on LinkedIn", "source": "LinkedIn", "url": "https://www.linkedin.com/jobs/view/...", "directApply": false },
{ "title": "Apply directly on Example Careers", "source": "Example Careers", "url": "https://careers.example.com/job/9", "directApply": true }
],
"applyUrl": "https://www.linkedin.com/jobs/view/...",
"shareUrl": "https://www.google.com/search?ibp=htl;jobs&q=registered+nurse&htidocid=...",
"query": "registered nurse",
"searchQuery": "registered nurse jobs in Chicago",
"scrapedAt": "2026-09-23T12:00:00.000Z"
}
FieldDescription
jobIdGoogle's job document ID; stable, use it to deduplicate across runs
title, company, locationAs shown by Google
viaThe board or site Google found the posting on
postedAt, postedAtRelativeISO date computed from Google's "N days ago", and the original text
employmentTypefull-time, part-time, contractor, internship, temporary or null (employmentTypeRaw keeps Google's text)
salary{ raw, min, max, currency, period } or null when Google shows no pay; currency is null when Google shows no symbol
isRemotetrue for work-from-home jobs or remote/anywhere locations
tagsOther Google chips such as benefits or "No degree mentioned"
descriptionFull description as plain text (when includeDescription is on)
highlightsGoogle's job highlights: qualifications, responsibilities, benefits, plus all sections as shown
applyLinks, applyUrlEvery apply option with its URL; applyUrl is the first one
shareUrlLink to the job on Google Jobs
query, searchQueryYour search and the exact Google search that found the job

The key-value store also contains:

  • SUMMARY – per-search counts, Google requests used, whether "more jobs" pagination was available, limits reached.
  • FAILED_SEARCHES – searches that returned no jobs or were blocked, with a reason. These are never charged.

Pricing

Pay-per-event: a tiny fee per run plus a fee per job saved. You only pay for results – duplicates, filtered-out jobs, empty searches and blocked pages are free, and Google SERP proxy costs are included. Set a maximum cost per run in Apify Console and the actor stops cleanly when it is reached. See the Pricing tab for current prices.

FAQ

How many jobs can I get per search? Google shows about ten jobs per results page. With maxResultsPerQuery above 10 the actor follows further result pages when Google provides them and runs related searches such as "… full time", "… senior" or "… in the last week" until the number is reached or no new jobs appear. Very narrow searches may simply have fewer jobs.

How do I monitor a search for new jobs? Turn on onlyNewSinceLastRun and create an Apify Schedule, for example every morning with datePosted: "today". The actor remembers the job IDs returned for that exact input and the next runs return only new postings. Changing the searches or filters starts a fresh history.

Which countries and languages are supported? Set country (e.g. us, uk, ca, fr) and language (e.g. en, fr). Verified so far: US, UK, Canada and France. Google currently answers searches for Germany (de) with a captcha, so those return no jobs; you are not charged when a search returns nothing. Other countries usually work but are not yet verified. Dates, salary periods and employment types are parsed best in English; the raw texts are always kept.

Why is salary missing for some jobs? Google shows pay only when the employer or board publishes it. We never guess.

Why did a search return nothing? Check FAILED_SEARCHES. Either Google had no jobs for that search and filters (no_results), or the page could not be loaded. Make sure the proxy is set to the GOOGLE_SERP group. Failed searches are not charged.

Is this legal? The actor reads public Google Search result pages through Apify's official Google SERP proxy. It does not log in or collect personal data about candidates. You are responsible for using the data in line with applicable laws and the sites' terms.

Support

Found a search that does not work, or need another field? Open an issue on the actor's Issues tab – we usually respond within a day.