Google Jobs Scraper [$2.5/1k💰] Apply Links, Salary & Emails avatar

Google Jobs Scraper [$2.5/1k💰] Apply Links, Salary & Emails

Pricing

from $2.50 / 1,000 job results

Go to Apify Store
Google Jobs Scraper [$2.5/1k💰] Apply Links, Salary & Emails

Google Jobs Scraper [$2.5/1k💰] Apply Links, Salary & Emails

Scrape Google's jobs vertical (udm=8) — the feed Google aggregates from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Monster, Dice, Workday and career sites. Returns title, company, location, source, posted date, salary and EVERY syndicated apply link. Keyword x location fan-out, employer emails

Pricing

from $2.50 / 1,000 job results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

22

Total users

19

Monthly active users

2 hours ago

Last modified

Share

Google Jobs Scraper — Multi-Board Apply Links, Salary & Employer Emails

Scrape Google's jobs vertical — the aggregated feed Google builds from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Monster, Dice, Built In, Workday, Greenhouse, Lever and thousands of company career sites. One search surfaces postings from all of them at once.

Every row carries the job's title, company, location, source board, posted date, salary, schedule, benefits — and every syndicated apply link Google knows about, not just one.

How the Google Jobs Scraper works


Why use this scraper

Every apply route, not oneGoogle lists the same job on LinkedIn and Indeed and the employer's own ATS. Most scrapers return a single link. This one returns all 4–8, each labelled with its board.
Full descriptions, structuredNot just a teaser: the complete job description (median ~3,500 characters) plus Google's own qualification, responsibility and benefit bullets as clean arrays.
New-jobs-only monitoringTurn on one checkbox and the actor remembers what it already sent you. Schedule it daily and every run returns only the postings that are new — no re-reading yesterday's list, and no paying for duplicate rows.
Employer contact emailsOptional: resolve the hiring company's own website and pull a public contact address, turning a job feed into a lead list.
Goes past the 10-result capGoogle's jobs tab visibly stops at ~10 results. This actor follows Google's own "load more" cursor to fetch further pages — up to 10 pages (~100 jobs) per search, something the visible page never offers.
Built for breadthOn top of paging, your keywords × locations expand into a full search matrix run in parallel, then de-duplicated.
One consistent row shapeIdentical field names to the rest of this jobs-scraper family, so one column mapping works across all of them.

Overview

Google's jobs vertical (the "Jobs" tab, internally udm=8) is the largest job aggregator most people never scrape directly — because it will not render without JavaScript and blocks datacenter traffic outright. This actor handles that for you and returns clean, structured rows.

Give it a list of keywords and a list of locations. It builds one Google search per combination, fetches them concurrently, parses each result card, merges everything, drops duplicates, and writes one row per job.


Supported inputs

InputExampleNotes
Keywordssoftware engineer, registered nurseJob titles, skills, or free text
LocationsNew York, Chicago, LondonRequired in practice — see the FAQ
Countryus, gb, ca, au, inWhich Google market to search
Google Jobs URLshttps://www.google.com/search?q=nurse+jobs+in+chicago&udm=8Paste directly; legacy ibp=htl;jobs links are upgraded automatically

Use cases

  • Job boards & aggregators — fill a niche board from a source that already merges every major board.
  • Recruitment agencies — monitor who is hiring for your specialty in your city, daily, and see which ATS each employer uses.
  • Sales & lead generation — companies that are hiring are companies that are spending. Turn on email enrichment and every posting becomes a qualified lead with a contact address.
  • Market & salary research — track posting volume, salary bands and remote share by role and metro over time.
  • Candidate tools — power a job-alert product with a de-duplicated, multi-board feed.
  • HR & competitive intelligence — watch a competitor's hiring: which roles, which locations, which salary bands.

How it works

  1. Expand — your keywords × locations become a matrix of Google searches.
  2. Fetch — each search is rendered server-side through a built-in unblocking service, from a residential exit node in your chosen country. Nothing to configure.
  3. Parse — each result card yields title, company, location, source board, posted date, salary, schedule, benefits and qualifications.
  4. Attribute — Google renders each job's apply links in its own container; the actor matches them 1:1 to the right job, so links never bleed between postings.
  5. De-duplicate — the same job found by two different searches is emitted once.
  6. Filter — recency, salary-only, remote-only and schedule filters are applied.
  7. Enrich (optional) — resolve the employer's website and scrape a public contact email.
  8. Push — one clean row per job.

Input configuration

FieldTypeDefaultDescription
keywordsarray["software engineer"]Job titles / keywords to search
locationsarray["New York", "San Francisco"]Cities or regions. Strongly recommended
countryselectusGoogle market (gl). See the EU note in the FAQ
languagestringenGoogle interface language (hl)
googleDomainstringe.g. google.co.uk
startUrlsarrayPaste Google Jobs URLs directly
Google-side filtersapplied before Google's ~10-result cut
datePostedselecttoday / 3days / week / month
employmentTypesarrayFULLTIME / PARTTIME / CONTRACTOR / INTERNalso widens coverage
workFromHomebooleanfalseGoogle's own remote filter
radiusintegerMiles around the location
Client-side filtersapplied to what Google returned
postedWithinHoursintegerKeep only jobs posted in the last N hours
salaryOnlybooleanfalseKeep only jobs that display a salary
remoteOnlybooleanfalseKeep only remote-looking jobs
scheduleTypesarraye.g. Full-time, Contractor
companyFilterarrayOnly these employers
excludeCompaniesarrayDrop these employers (e.g. staffing agencies)
viaFilterarrayOnly jobs from these source boards
onlyNewJobsbooleanfalseEmit only postings not seen in previous runs
enrichEmailsbooleanfalseFind employer contact emails
qualifyByPaymentbooleanfalseFlag employers that take payments online
maxPagesPerQueryinteger3Result pages per search (1–10), ~10 jobs each
maxItemsinteger1000Stop after this many jobs
maxConcurrencyinteger10Parallel Google searches

Google's jobs tab shows ~10 results and offers no page 2 — but this actor gets past that two ways, and they multiply:

  1. Pages per search (maxPagesPerQuery, default 3): the actor follows Google's own "load more" mechanism to fetch additional result pages. Each page returns ~10 different jobs — in testing, 3 pages on one keyword and city produced 30 unique jobs with zero overlap.
  2. The search matrix: keywords × locations × employmentTypes each add distinct searches. Employment types are especially effective — each type returns a largely different result set (FULLTIME + CONTRACTOR doubled results with zero overlap in testing).

Combined: 3 keywords × 4 cities × 3 pages ≈ 360 jobs.

Example input

{
"keywords": ["software engineer", "data analyst"],
"locations": ["New York", "Chicago", "Austin"],
"country": "us",
"postedWithinHours": 24,
"onlyNewJobs": true,
"maxItems": 500
}

That is 2 × 3 = 6 searches, filtered to the last 24 hours, returning only jobs no previous run has seen.


Output overview

One row per job. Fields the source does not provide are null (or []) rather than missing, so your columns never shift.

Output sample

{
"type": "job",
"source": "google-jobs",
"jobId": "lead software engineer java aws|jpmorganchase|new york ny",
"title": "Lead Software Engineer: Java/AWS",
"companyName": "JPMorganChase",
"location": "New York, NY",
"remote": false,
"via": "LinkedIn",
"postedRaw": "12 hours ago",
"postedDate": "2026-07-25T09:26:48.375Z",
"salary": {
"currency": "USD",
"min": 152000,
"max": 215000,
"raw": "152K–215K a year",
"unit": "YEAR"
},
"salaryRaw": "152K–215K a year",
"contractType": "Full-time",
"employmentTypes": ["Full-time"],
"benefits": ["Health insurance", "Dental insurance"],
"qualifications": [],
"applyType": "external",
"applyUrl": "https://www.linkedin.com/jobs/view/lead-software-engineer-java-aws-at-jpmorganchase-4445316605?utm_campaign=google_jobs_apply",
"applyLinks": [
{ "board": "LinkedIn", "url": "https://www.linkedin.com/jobs/view/..." },
{ "board": "JPMorgan Chase", "url": "https://jpmc.fa.oraclecloud.com/hcmUI/CandidateExperience/..." },
{ "board": "Indeed", "url": "https://www.indeed.com/viewjob?jk=88e34225b97d1f3a..." },
{ "board": "Built In NYC", "url": "https://www.builtinnyc.com/job/lead-software-engineer-java-aws/..." }
],
"applyLinkCount": 8,
"searchKeyword": "software engineer",
"searchLocation": "New York",
"searchCountry": "us",
"scrapedAt": "2026-07-25T21:26:52.983Z"
}

Key output fields

FieldTypeDescription
titlestringJob title
companyNamestringHiring employer
locationstringAs shown by Google, e.g. New York, NY
remotebooleanInferred from the title and location
viastringThe board Google syndicated this posting from
postedDateISO dateAbsolute date derived from Google's "12 hours ago"
postedRawstringGoogle's original relative wording
salaryobject{ currency, min, max, raw, unit }
contractTypestringFull-time, Contractor, Internship, …
descriptionstringFull job description text — median ~3,500 characters
qualificationsarrayRequirement bullets, as identified by Google from the original post
responsibilitiesarrayDuty bullets from the same source
benefitsarraye.g. Health insurance, 401(k)
applyLinksarrayEvery apply route, each with its board name
applyUrlstringThe primary apply link (the via board where possible)
contactEmailstringEmployer email — only with enrichEmails
contactWebsitestringEmployer website — only with enrichEmails
searchKeyword / searchLocationstringWhich of your searches produced this row

FAQ

How many jobs will I get per search? Up to ~10 per page × maxPagesPerQuery (default 3, max 10) — so ~30 per search by default, up to ~100. Google's own interface stops at 10; the extra pages come from the same "load more" mechanism the interface uses, fetched for you automatically. For even more volume, widen the matrix: 5 keywords × 6 cities × 3 pages ≈ 900 jobs.

Should I use the Google-side or the client-side filters? Prefer the Google-side ones (datePosted, employmentTypes, workFromHome, radius). Because Google only returns ~10 results, filtering there changes which jobs you receive; filtering afterwards only throws away rows you already paid for. Asking Google for "past 24 hours" returns 10 fresh jobs; asking for anything and then filtering to 24 hours might leave you 2.

Do I have to provide a location? In practice, yes. Google's jobs vertical usually answers a bare keyword with "there aren't any Jobs matches on this topic". Add a location and the same keyword returns a full set. The actor warns you in the log if you omit locations.

Why do I get no results for Germany / France / Spain? Google has wound its jobs widget down across the EU, and those markets now return nothing at all. This is Google's change, not a fault in the actor — the log warns you when you pick an affected country. The US, UK, Canada, Australia and India all return rich results.

Why is salary empty on many rows? Because Google only displays a salary when the source posting includes one — roughly 30% of the time in our testing. The salaryOnly filter keeps just those rows if you need complete compensation data.

Does the email enrichment find an address for every employer? No, and it is honest about that. It resolves the employer's website from the company name and reads its public contact pages. Large corporations (Amazon, Charles Schwab) usually publish no contact email, so contactEmail will be empty even though contactWebsite is filled. Hit rates are much better on small and mid-sized employers.

How does "only new jobs" decide what is new? A job's identity is its title + company + location. Once emitted, it is remembered for 45 days in the actor's key-value store, then forgotten — so a genuine re-posting months later reaches you again. The first run returns everything; every run after that returns only what changed.

Do I need a proxy? No. Google is fetched through a built-in unblocking service with no configuration. The proxy input is used only by the optional email-enrichment step.


Support

Found a bug or want a field added? Open an issue on the actor's Issues tab and I will take a look.

Additional services

Need this customised — a specific country, extra fields, a private variant, or a different delivery format? Get in touch through the Apify Store profile.

Explore more scrapers

This actor is part of a large family of job-board scrapers sharing the same output shape: LinkedIn Jobs, Indeed, ZipRecruiter, Glassdoor, Dice, SimplyHired, Seek, StepStone, Reed, TotalJobs, Workday, Greenhouse, Lever, Ashby, BambooHR, SmartRecruiters and many more.


🤖 For AI agents & LLM apps

This actor is a clean tool call for agents that need live labour-market data.

  • Deterministic inputkeywords and locations are plain string arrays; no URL construction required.
  • Stable schema — every row has the same keys in the same order, with null instead of missing fields, so parsing never breaks.
  • Structured salarysalary.min / salary.max / salary.currency are already numbers and codes, no regex needed downstream.
  • Idempotent schedulingonlyNewJobs: true gives an agent a change feed instead of a full snapshot, so memory stays small and tokens stay cheap.
  • Provenance built insearchKeyword, searchLocation and via let an agent explain exactly where each row came from.

⚠️ Disclaimer

This actor collects only publicly available information displayed on Google search result pages. It does not log in, does not bypass any paywall, and does not access private or personal data.

Job listings and their content remain the property of their respective sources and employers. You are responsible for ensuring your use of the scraped data complies with Google's Terms of Service, the source boards' terms, and all applicable laws in your jurisdiction — including GDPR, CCPA and equivalent data-protection regulations where relevant. This tool is provided for legitimate research, recruitment and market-analysis purposes.

Google's jobs vertical is a third-party surface that can change or be withdrawn at any time — as already happened across the EU. Availability and field coverage may vary by country and over time.


SEO Keywords

google jobs scraper, google for jobs scraper, google jobs api, scrape google jobs, google job search scraper, google jobs data extraction, job listings scraper, multi board job scraper, linkedin indeed glassdoor aggregator, job aggregator scraper, apply link scraper, job posting scraper, salary data scraper, employer email finder, recruitment lead generation, hiring intent data, job market research, job monitoring api, new job alerts api, ats detection, workday greenhouse lever scraper, remote jobs scraper, job feed api, google serp jobs, udm=8 scraper, apify job scraper, job board data, talent intelligence, recruiting automation