Google Jobs Scraper & API: Apply Links, Salary, Description avatar

Google Jobs Scraper & API: Apply Links, Salary, Description

Pricing

from $1.40 / 1,000 jobs

Go to Apify Store
Google Jobs Scraper & API: Apply Links, Salary, Description

Google Jobs Scraper & API: Apply Links, Salary, Description

Scrape Google Jobs (the search Google builds from LinkedIn, Indeed, Glassdoor, ZipRecruiter and career sites) by keyword and location or URL, with every direct apply link, salary, highlights and full description, no login needed. Only-new-jobs mode for scheduled alerts; $2 per 1,000 jobs.

Pricing

from $1.40 / 1,000 jobs

Rating

0.0

(0)

Developer

Jay Novello

Jay Novello

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Get job postings from Google Jobs (the search Google builds from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Monster and employer career sites) by keyword and location or from a Google jobs URL, each with every direct apply link (real URLs, not Google redirects), salary, job type, posting date, Google's job highlights and the full description, as JSON, CSV or Excel, with no login, Google account or proxy setup.

Try it: Click Start with the default input: 10 data analyst jobs in Chicago in 8 s for about $0.02 (run of October 21, 2026, build 1.0.9: one Google request, 0 duplicates, 4 of 10 with a salary, 6 apply links per job on average).

From that default run:

TitleCompanyViaPostedSalaryApply links
Data Analyst III - ConsultingGHXSimplyHired3 days ago$74K–$98K a year1
Senior Data AnalystTransUnionIndeed15 days ago$90K–$150K a year8
Business Intelligence Analyst / Data EngineerGEICOLinkedIn6 days ago$91,225–$172,200 a year8
Data Visualization AnalystLockton, Inc.Indeed$75K–$115K a year8
Sr. Data AnalystCapital OneZipRecruiter15 days ago8

Pricing: $2 per 1,000 jobs ($0.002 each), plus $0.003 per search per run only in only-new-jobs mode and $0.00005 per run start. Duplicates, searches with no jobs and failed runs are not charged; Google SERP proxy and platform usage are included.

Google shows about 10 jobs per search; raise Max jobs per search and the Actor runs related searches (full time, remote, entry level, senior, part time, contract and more) and merges them without duplicates, usually 60 to 90 jobs per keyword and location. Turn on Only jobs not returned by earlier runs and schedule it for daily job alerts or lists of hiring companies.

More real examples

Warehouse associate, Dallas (October 12, 2026)

Input:

{
"queries": ["warehouse associate"],
"locations": ["Dallas, TX"],
"maxJobsPerSearch": 30
}

Result: 30 unique jobs in 83 seconds from 5 Google requests (1 plain search plus 4 related searches; 7 duplicates removed and not charged). 17 of 30 had a salary, each job had on average 5.0 direct apply links, and the most common sources were LinkedIn (12), Indeed (5), Amazon Careers (2), Learn4Good (2). Cost at $2 per 1,000 jobs: $0.06.

First job in the dataset (description shortened here):

{
"jobId": "Kla7jhfm7fquCkGaAAAAAA==",
"title": "Warehouse Associate - $26/hr +",
"company": "Uline",
"location": "Dallas, TX",
"via": "LinkedIn",
"postedAgo": "5 days ago",
"postedAt": "2026-10-08T00:56:23+00:00",
"employmentType": "Full-time",
"salary": {
"min": 26,
"max": 32,
"currency": "USD",
"period": "HOUR",
"text": "$26–$32 an hour"
},
"isRemote": false,
"noDegreeMentioned": true,
"applyLink": "https://www.linkedin.com/jobs/view/warehouse-associate-%2426-hr-%2B-at-uline-4476713101",
"applyLinks": [
{
"source": "LinkedIn",
"url": "https://www.linkedin.com/jobs/view/warehouse-associate-%2426-hr-%2B-at-uline-4476713101",
"shownOnGoogle": true
},
{
"source": "Indeed",
"url": "https://www.indeed.com/viewjob?jk=19a784aedc300565",
"shownOnGoogle": true
},
{
"source": "Uline - Uline Careers",
"url": "https://gfj.uline.jobs/hiring/warehouse-associate-26-hr-dallas-tx-69c295d3ca70fe08f3a9ce16",
"shownOnGoogle": true
},
{
"...": "5 more"
}
],
"highlights": {
"Qualifications": [
"High school diploma or equivalent",
"Frequently move packages weighing up to 50 - 70 lbs",
"... 2 more"
],
"Benefits": [
"Pay from $26 to $32 per hour with significant growth and earning potential!",
"Great Pay and Benefits: Competitive pay and comprehensive benefits to support your future and well-being",
"... 6 more"
],
"Responsibilities": [
"Full-Time Hours: Monday - Friday, 10:30 AM to 7 PM + overtime opportunities",
"Pick customer order items and package them for same day shipping",
"... 2 more"
]
},
"description": "Warehouse Associate\n\nPay from $26 to $32 per hour with significant growth and earning potential!\n\nTexas Branch - Irving, TX\n\nGo-getters wanted! Looking to join a top-tier team? Join Uline as a Warehouse Associate for job ...",
"googleJobsUrl": "https://www.google.com/search?q=warehouse+associate+jobs+in+Dallas,+TX&ibp=htl;jobs&udm=8&htidocid=Kla7jhfm7fquCkGaAAAAAA%3D%3D",
"position": 2,
"searchQuery": "warehouse associate",
"searchLocation": "Dallas, TX",
"googleQuery": "warehouse associate jobs in Dallas, TX",
"foundBy": "plain search",
"country": "us",
"scrapedAt": "2026-10-13T00:56:23+00:00"
}

What you get

  • Direct apply links for every board Google lists for the job (often 5 to 10: LinkedIn, Indeed, ZipRecruiter, Glassdoor, the employer's own site...), with utm_ tags removed.
  • Salary parsed into min, max, currency and period (YEAR, HOUR, MONTH...) when Google shows one. In our US test runs 43 to 57 percent of jobs had a salary.
  • Job highlights (Qualifications, Benefits, Responsibilities) and the full description (usually 2,000 to 9,000 characters).
  • Posting age as shown (3 days ago) and as an approximate ISO date (postedAt).
  • Employment type, isRemote, noDegreeMentioned, the board it came via, and a link to the job on Google.
  • Google's job ID (jobId), stable across runs, so you can de-duplicate or join with earlier data.

Google shows about 10 jobs per search and no longer serves a usable "next page" to scrapers. To go deeper, this actor runs a set of related searches for each keyword and location (full time, entry level, senior, part time, contract, remote, hybrid, internship, posted today, posted this month and more), merges them, and removes duplicates by Google's job ID. It stops as soon as related searches stop finding new jobs, so you never pay for padding.

In our tests one keyword plus a city reached 60 to 90 unique jobs (12 searches for "marketing manager, New York" gave 91). Set maxJobsPerSearch to what you need (default 50). For more coverage, add more locations (nearby cities) or more specific keywords.

Pages are fetched through Apify's Google SERP proxy with automatic retries; slow or broken Google answers are retried up to 4 times, so runs finish instead of timing out.

Input examples

Keywords × locations (each keyword is searched in each location):

{
"queries": ["registered nurse", "software engineer"],
"locations": ["Austin, TX", "Denver, CO"],
"maxJobsPerSearch": 40,
"maxItems": 200,
"datePosted": "week"
}

Paste Google jobs URLs (from google.com/search?...&udm=8 or older ibp=htl;jobs links; filters in the URL are kept):

{
"startUrls": [{ "url": "https://www.google.com/search?q=python+developer+jobs+remote&udm=8&hl=en&gl=us" }],
"maxJobsPerSearch": 20
}

Only new jobs, for schedules (daily job alerts, lead lists of hiring companies):

{
"queries": ["electrician"],
"locations": ["Phoenix, AZ"],
"onlyNewJobs": true,
"stateName": "phoenix-electricians"
}

The first run returns everything it finds. Later runs with the same stateName return, and charge for, only jobs that earlier runs have not returned. To keep scheduled checks cheap, later runs look at Google's first page for each search and run the related searches only when that page has at least 3 new jobs. For daily alerts, add "datePosted": "today" so the first page holds the freshest jobs. Jobs not seen for forgetAfterDays (default 60) are forgotten.

Countries: United States, United Kingdom, Canada, Australia, India, New Zealand, Singapore, South Africa, UAE, Philippines, Malaysia, Nigeria, Kenya, Brazil, Mexico, Japan. Google has switched its jobs search off in most EU countries.

Output fields

FieldExample
jobIdFYe5zXq-syi_TXg3AAAAAA==
titleLead Finance Data Analyst - Enterprise Reporting
companyUL Solutions
locationChicago, IL (or Anywhere for remote)
viaLinkedIn
postedAgo / postedAt5 hours ago / 2026-10-12T19:41:31+00:00
employmentTypeFull-time
salary{"min": 95000, "max": 112000, "currency": "USD", "period": "YEAR", "text": "$95K–$112K a year"}
isRemote, noDegreeMentionedfalse, true
applyLinkfirst apply URL (the via source)
applyLinks[{"source": "LinkedIn", "url": "https://www.linkedin.com/jobs/view/...", "shownOnGoogle": true}, ...]
highlights{"Qualifications": [...], "Benefits": [...], "Responsibilities": [...]}
descriptionfull text (turn off with includeDescription: false)
googleJobsUrlopens the job on Google
searchQuery, searchLocation, googleQuery, foundBy, position, country, scrapedAtwhere and when it was found

The dataset has three views: Overview, All fields, and Apply links (one row per link). A run summary (Google requests, retries, duplicates removed, jobs returned) is saved as RUN_SUMMARY in the run's key-value store.

Pricing

Pay per result, no subscription:

EventPrice
Job returned$0.002 ($2 per 1,000 jobs)
New-jobs check (only with onlyNewJobs)$0.003 per search per run
Actor start$0.00005

You are not charged for duplicates, for jobs skipped by onlyNewJobs, or for searches where Google has no jobs. The new-jobs check covers the Google request a scheduled run makes even when nothing new has been posted; normal runs never pay it. Platform usage and proxies are included.

You wantCost
100 jobs$0.20
1,000 jobs$2.00
Daily alert for 5 searches, about 20 new jobs a dayabout $1.65 a month ($1.20 for jobs + $0.45 for checks)

Accuracy and limits

  • Data is what Google shows on its jobs search at run time. postedAt is computed from Google's "N days ago" and is approximate (Google rounds to hours or days; "30+ days ago" becomes 30 days).
  • Google returns about 10 jobs per search; depth comes from related searches (see above), so very broad keywords in big cities will not return every posting Google has. Narrow keywords and more locations give better coverage.
  • The remote related search can add nationwide "Anywhere" jobs; filter on isRemote or location if you want only local ones.
  • Each Google page takes 5 to 50 seconds to load. A run with one keyword and 10 jobs takes under a minute; 100 jobs across two searches takes about 2 to 3 minutes.
  • Company logos are not included.
  • Salary currency is detected from the symbol; plain numbers without a symbol get currency: null.

FAQ

Is there an API? Yes. Every Apify actor is an API: call POST https://api.apify.com/v2/acts/varnmill~google-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN with the input JSON and get the jobs back as JSON. It also works from Python, JavaScript, Make, n8n, Zapier and the Apify MCP server for AI agents.

Do I need a proxy or a Google account? No. Google is fetched through Apify's Google SERP proxy, which is included in the price.

Why only about 10 jobs per Google search? That is what Google's jobs search returns per query today. The related searches are how you get 60 to 90 per keyword and location.

Are the apply links direct? Yes. They are the real posting URLs (LinkedIn, Indeed, employer ATS...), not google.com/url redirects.

Can I get jobs posted in the last 24 hours only? Set datePosted to today. For alerts, combine it with onlyNewJobs on a daily schedule.

Is scraping Google Jobs legal? The actor only collects job postings that are publicly shown to anyone on Google, without logging in. Make sure your use of the data complies with the laws that apply to you.

Changelog

  • 1.0.10 (October 21, 2026): README leads with the default-input example from an October 21 run. No code changes.
  • 1.0 (October 12, 2026): First release. Keyword × location search, Google jobs URLs, related-search depth with de-duplication by job ID, direct apply links, salary parsing, highlights, full descriptions, only-new-jobs mode for schedules, 16 countries.