Google Jobs Scraper – Real Apply Links, Salary & 20+ Job Boards avatar

Google Jobs Scraper – Real Apply Links, Salary & 20+ Job Boards

Pricing

from $1.00 / 1,000 jobs

Go to Apify Store
Google Jobs Scraper – Real Apply Links, Salary & 20+ Job Boards

Google Jobs Scraper – Real Apply Links, Salary & 20+ Job Boards

Scrape Google for Jobs by phrase and location: one search covers LinkedIn, Indeed, ZipRecruiter, employer career pages and 20+ boards. Typed JSON per job with apply links resolved to their real destination, salary, schedule type, posted date, description, highlights and source board.

Pricing

from $1.00 / 1,000 jobs

Rating

0.0

(0)

Developer

inovaflow

inovaflow

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Share

Google for Jobs is the widest net there is: one search covers LinkedIn, Indeed, ZipRecruiter, Monster, Glassdoor, Built In, employer career pages and 20+ other boards, already merged by Google. The catch is that a Google job card has no address of its own — tools that only read the list hand you rich text with no link a person can apply through. Google Jobs Scraper fixes exactly that: every job comes back as typed JSON with its "Apply on …" buttons resolved to the real destination (the employer's ATS, LinkedIn, Indeed, …), plus salary, schedule type, posted date, full description, Google's highlights and the board the posting came from. No Google account, no browser to babysit.

  • Job boards & aggregators — one source that already spans every major board, with a real apply link on every row.
  • Recruiters & sourcers — see which boards carry a role, which employers post directly, and who is hiring right now.
  • Sales & B2B teams — hiring is a buying signal: the run's companies-hiring summary ranks employers by open roles and shows their ATS links.
  • Analysts, researchers & AI agents — salary and schedule data across boards, deduplicated by Google's own job identity.

What does Google Jobs Scraper do?

Give it search phrases and locations (or paste a Google Jobs URL from your browser) and it returns the matching Google for Jobs listings — each with title, company, location, the board it came from (via), posted date, salary (parsed into min / max / currency / period), employment type, benefits chips, Google's job highlights (qualifications, responsibilities, benefits), the full description, and every apply option with its resolved URL, ranked so applyUrl is the best place to apply (employer ATS first). Duplicates across searches are removed by Google's document id, and a companies-hiring summary is written next to the dataset. It works as a Google Jobs API: call it from the Apify API, schedule it, or use it from an AI agent through MCP.

Why use this Google Jobs scraper?

  • Real apply links. Each "Apply on …" button is followed to its destination; applyUrl is the best of them (employer ATS → recognised board → direct apply → anything but a syndication farm) and atsUrl flags a direct employer link when one exists.
  • 20+ boards in one pass. LinkedIn, Indeed, ZipRecruiter, Monster, Glassdoor, Built In, Dice, employer career pages and more — deduplicated.
  • Typed fields, not blobs. salaryMin / salaryMax / salaryCurrency / salaryPeriod, postedAt as an ISO date, employmentType, isRemote, structured highlights.
  • Beyond ten results. Google shows ten jobs per phrase; ask for more and the Actor widens the phrase with natural variants (… remote, … senior, … contract, …) until your cap is reached.
  • Any country and language. Pick the Google edition (us, gb, de, in, …) and interface language.
  • Companies hiring. COMPANIES ranks employers by open roles with titles, locations, the boards carrying them, newest posting and ATS links.
  • Pay per job, no minimums. 5 jobs cost 5 jobs. Duplicates, filtered-out jobs and empty pages are free.

What data does it extract?

FieldDescription
id, googleUrlGoogle's job document id and the canonical Google Jobs link
title, company, location, isRemote, viaCore fields; via is the board the posting was found on
postedAt, postedText, ageDaysISO date derived from Google's "N days ago", the original text and the age in days
employmentType, benefits, qualificationChipGoogle's chips: Full-time / Contractor / …, benefit chips, "No degree mentioned"
salaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriodSalary when Google shows one
applyUrl, applySource, atsUrl, directApplyAvailableBest resolved apply link, which board it is on, the employer's own ATS link when present
applyOptions[]Every apply button: source, resolved url, Google's googleUrl, directApply, isAts
highlightsqualifications[], responsibilities[], benefits[] as Google extracted them
descriptionFull job description as readable text
thumbnailUrl, searchQuery, searchLocation, searchVariant, scrapedAtLogo when shown; provenance (which phrase / variant found the job)

How to scrape Google for Jobs

  1. Open the Actor and click Try for free.
  2. Enter Search phrases (one per line) and Locations (one per line). Every phrase is searched in every location. Pick the Country if it is not the United States.
  3. Optionally narrow with Posted within, Remote only, Employment type, or paste a Google Jobs URL from your browser.
  4. Set Max jobs per phrase (10 = one Google page; more = the Actor widens the phrase) and click Start.
  5. Read the Output tab, download JSON / CSV / Excel, or open COMPANIES to see who is hiring most.

Leave Resolve apply links on (default). Every row then has applyUrl pointing at the board or employer page, applyOptions[] with all alternatives, and atsUrl when the employer's own applicant-tracking system is among them — ideal for job boards that want to send candidates straight to the source.

How to track new jobs across all boards every day

Set Posted within to Last 24 hours and schedule the Actor daily in Apify. Add a webhook or an integration (Slack, Google Sheets, Make, Zapier, n8n) to push new rows where your team works.

How much does it cost to scrape Google Jobs?

Pay-per-event: $0.001 per job delivered plus a small run-start fee — 1,000 jobs for about $1. Duplicates, filtered-out jobs and empty pages are never charged. Google result pages are fetched through Apify's Google SERP proxy, which every Apify plan includes and bills per page (a page holds up to ten jobs); apply-link redirects use ordinary datacenter proxy traffic (a few kilobytes each).

Input

Example — two roles in two cities, remote, posted this week, up to 30 jobs per phrase:

{
"queries": ["python developer", "data engineer"],
"locations": ["New York", "Austin"],
"country": "us",
"postedWithin": "week",
"remoteOnly": true,
"maxJobsPerQuery": 30
}

Or paste a Google Jobs URL from your browser:

{ "startUrls": [{ "url": "https://www.google.com/search?q=registered+nurse+jobs+Texas&udm=8" }] }

All fields are optional except one of queries / startUrls. Aliases such as keywords, query, location, num_results, limit and jobTypes are accepted, so inputs written for other Google Jobs scrapers usually work unchanged.

Output

One dataset row per job:

{
"id": "5M12SHHWnEg7yxXuAAAAAA==",
"title": "Lead Python Developer, New York",
"company": "ION Group",
"location": "New York, NY",
"isRemote": false,
"via": "Built In NYC",
"postedAt": "2026-08-21",
"postedText": "19 days ago",
"ageDays": 19,
"employmentType": "Full-time",
"salaryText": "$140K–$210K a year",
"salaryMin": 140000,
"salaryMax": 210000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"benefits": ["Health insurance", "Dental insurance"],
"applyUrl": "https://www.builtinnyc.com/job/python-developer-new-york/1433153",
"applySource": "Built In NYC",
"atsUrl": null,
"directApplyAvailable": true,
"applyOptions": [
{ "source": "Built In NYC", "url": "https://www.builtinnyc.com/job/python-developer-new-york/1433153", "googleUrl": "https://www.google.com/goto?url=…", "directApply": false, "isAts": false },
{ "source": "Monster", "url": "https://www.monster.com/job-openings/lead-python-developer-…", "googleUrl": "https://www.google.com/goto?url=…", "directApply": false, "isAts": false },
{ "source": "Career.io", "url": "https://career.io/…", "googleUrl": "https://www.google.com/goto?url=…", "directApply": true, "isAts": false }
],
"highlights": {
"qualifications": ["Operating in an Agile environment, this position requires strong expertise in Python…"],
"responsibilities": ["Develop scalable Python-based microservices…"],
"benefits": ["Mid to Senior level – $180,000 - $220,000", "…"]
},
"description": "The Role\n\nLab49 is seeking a skilled Python Developer to work on complex and challenging projects…",
"googleUrl": "https://www.google.com/search?ibp=htl;jobs&q=python+developer+jobs+New+York&htidocid=5M12SHHWnEg7yxXuAAAAAA%3D%3D",
"searchQuery": "python developer",
"searchLocation": "New York",
"searchVariant": null
}

Also in the key-value store: COMPANIES (+ COMPANIES.csv) — employers ranked by open roles — JOBS.csv, and OUTPUT with run counts (jobs delivered, with salary, with ATS link, Google pages fetched, apply links resolved, filtered, duplicates).

Using it from AI agents and code

Through the Apify MCP server an agent can call this Actor with plain-language inputs (queries, locations, country, postedWithin). Rows are flat and typed, applyUrl is always an openable link, and the OUTPUT summary says how many Google pages were used and how many jobs were delivered, skipped as duplicates or filtered out — so an agent never has to guess. From code, use the Apify API or clients:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('inovaflow/google-jobs-scraper').call({
queries: ['registered nurse'],
locations: ['Texas'],
postedWithin: 'day',
maxJobsPerQuery: 30,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Tips

  • Phrase like a person. Google understands senior react developer fintech or warehouse jobs no experience; the Actor adds jobs and the location for you.
  • Locations are matched as text, so the Actor keeps only the city / region part (Berlin, GermanyBerlin) and puts the country into the Google edition (Country) — that is what Google's own job search does, and it finds far more than a full address would.
  • Ten jobs per page is Google's rule. Each extra variant is one more Google page; OUTPUT.googlePagesFetched shows how many were used. Set maxJobsPerQuery to 10 for the cheapest possible run.
  • searchVariant tells you which widening (remote, senior, …) surfaced a job — handy when tuning phrases.
  • Posting age is only known when Google shows it; jobs without an age are kept even with a Posted within window.

FAQ

Do I need a Google account or API key? No.

Why do some jobs have applyUrl on a board rather than the employer? Google lists the boards that carry the posting; when the employer's own page is not among them, the best available board is chosen. applyOptions[] has all of them.

Can I get more than ten results per phrase? Yes — set Max jobs per phrase higher; the Actor widens the phrase automatically. Expect diminishing returns past ~50 per phrase for narrow searches.

Which countries work? Any Google edition; pick it in Country. Job content comes back in its original language.

Is it legal to scrape Google for Jobs? Job postings are public information published to be found. You are responsible for how you use the data — respect the boards' and employers' terms, and personal-data laws where you operate.

Support

Found a field you need or a search that misbehaves? Open an issue on the Actor's Issues tab — feedback shapes the roadmap.