Google Jobs Scraper - Salary, Apply Links, Descriptions avatar

Google Jobs Scraper - Salary, Apply Links, Descriptions

Pricing

from $2.00 / 1,000 job postings

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

Google Jobs Scraper - Salary, Apply Links, Descriptions

Scrape Google Jobs for any keyword and city, or paste a Google Jobs link: salary as numbers and yearly pay, remote/hybrid/on-site, contract type, city and country, benefits, posted date, description and every apply link. Only-new-jobs mode. $2.50 per 1,000 jobs on paid plans.

Pricing

from $2.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Khandji Omar

Khandji Omar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Google Jobs Scraper — Salary, Apply Links, Descriptions

Scrape Google Jobs — the index that merges LinkedIn, Indeed, Glassdoor, ZipRecruiter and company career sites — for any keyword and location: job title, company, location, source, posted date, job type, salary parsed into min / max / period, qualifications, benefits, full description and every "Apply on" link. Built for reliability: every Google page is retried on a fresh session, and one failed page never fails the run. $2.50 per 1,000 jobs on paid Apify plans (down to $2), no start fee.

Free tier — 5 results free on every run (free Apify plan)

On the free Apify plan, the first 5 results of every run are free, on every run you make — not a one-off trial. One guard: the free allowance never covers more than half of a run. Every Google page this Actor reads is a paid request, so paid Apify plans get the lower tier prices below instead of free results.

Measured, not promised

Same search on 2026-10-17, "software engineer" in New York, NY, 30 jobs:

This Actorjohnvc Google Jobs Scraperepctex Google Jobs Scraper
Jobs returned3030runs failing (0% succeeded in the last 30 days, Store figure)
Salary as numbers (min / max / period)16 of 300 (text only)—
Posted date23 of 300—
Apply links30 of 3030 of 30—
In the searched city27 + 1 suburb + 2 with no place20, the rest nearby—
Price per 1,000 jobs on a paid plan$2.50$4.50 ($0.045 per page of 10)—
Time64 s25 s—

A second search ("registered nurse", Houston, TX) gave 30 jobs: 10 with a salary, 23 with a posted date, all in Texas. We are slower because we read more pages so that every job is in the place you asked for.

What does this Google Jobs scraper do?

Type job searches ("registered nurse", "python developer", "warehouse") and locations ("Houston", "Texas", "London"). The scraper reads Google Jobs and returns one clean row per job posting, with duplicates removed. Google shows 10 jobs per page, so each search runs several filter variants in parallel (full time, part time, remote, contract, posted today…) to collect up to 140 different jobs per search.

More than the leaders, for less (checked on the Store on 2026-10-28)

This Actorjohnvc/Google-Jobs-Scraper (512 users)epctex/google-jobs-scraper (133 users)
Price per job$0.003$0.09 per page of up to 10 jobs$0.0045
Free jobs on every runYesNoNo
Paste a Google Jobs linkYes (startUrls)NoYes
Salary as numbers + period + yearly equivalentYesNoNo
Every apply link (LinkedIn, Indeed, company site...)YesYesOne apply link
On-site / hybrid / remote, office days, contract typeYesNoNo
City, region and country as separate fieldsYesNoNo
Benefits, skills, years of experience, visa, degreeYesPerk flags onlyNo
Staffing-agency flag and filter, exclude companies or title wordsYesNoNo
Only the jobs new since your last runYesNoNo
Radius around a placeYesYesYes

Compared with johnvc/Google-Jobs-Scraper

Read on the Store on 2026-10-23 (Google Jobs Scraper). Where it does better, this section says so.

  • Built on the site's own data, not a resold scraper: no second Actor between you and the source.
  • Free results on every run and a hard cost cap (maxTotalChargeUsd).
  • Price: $3 per 1,000 here, $90 there.
  • Same perk flags (health insurance, dental, paid time off), Google's share link and the number of jobs found, plus what it does not give: salary as numbers and as a yearly amount, every apply link, years of experience, skills and education.

Why use it

  1. One source for every job board: LinkedIn, Indeed, Glassdoor, ZipRecruiter, Built In and company career pages in a single feed — with each board's direct apply link.
  2. Salary as numbers, more often: salaryMin, salaryMax, salaryPeriod (hour / year…). When Google shows no salary tag, the pay written in the posting itself ("Base Salary Range $137,100—$201,600") is read too; salarySource says which (google or posting_text).
  3. Full content: description, qualifications, responsibilities and benefits.
  4. Reliable: retries with fresh sessions, per-search error reports, partial pages never lost.
  5. Filters: posted within (today, 3 days, week, month), job type, only jobs with a salary.
  6. Cheaper than the alternatives: from $0.002 to $0.0025 per job on paid plans, no start fee.

How to use it in 3 steps

  1. Click Try for free — "data analyst" in Chicago is prefilled.
  2. Enter your job searches and locations.
  3. Click Start and download JSON, CSV or Excel.

Input

FieldWhat it does
queriesJob titles or keywords.
locationsCities, states or countries; each search runs in each location.
radiusKmAsks Google to search within this distance of each location (1 to 300 km). Google treats it as a hint, not a strict border.
strictLocationKeeps only jobs whose location matches the city or the state/region you typed (Austin, TX keeps all of Texas). Remote jobs are kept. Default on; turn it off to get everything Google shows.
maxJobsPerSearch1 to 140. Default 50.
postedWithinAny time, today, last 3 days, this week, this month.
scheduleTypeFull-time, part-time, contractor, internship, temporary.
onlyWithSalaryKeep only postings that show a salary.
includeDescriptionTurn off for lighter rows.
country / languageGoogle Jobs market (us, gb, ca, au, in…) and language.
googleDomainGoogle site to search: google.com (default), google.co.uk, google.ca, google.de, google.fr, google.com.au…
maxTotalChargeUsdOptional hard cost cap for the run.
{
"queries": ["registered nurse", "physical therapist"],
"locations": ["Houston", "Dallas"],
"maxJobsPerSearch": 100,
"postedWithin": "week",
"onlyWithSalary": true
}

Output

Real example (Chicago, lists and description shortened):

A real row from this Actor's latest run on Apify (2026-10-23; long texts are cut and people's names hidden here, your dataset has them in full):

{
"status": "ok",
"title": "Data Business Systems Analyst",
"companyName": "Kemper",
"jobId": "\nO7fIRI6fLFuHPOR7AAAAAA==\nXBRX1njWoDQAAAAAAAAAAA\nyrcpCkrlsxkAAAAAAAAAAA\nhJp4MkyBDi4AAAAAAAAAAA\n34ii14s47VYAAAAAAAAAAA\nfzQArKreRggAAAAAAAA...",
"applyLinks": [
{
"source": "builtinchicago.org",
"url": "https://www.builtinchicago.org/job/data-business-systems-analyst/11781085"
},
{
"source": "indeed.com",
"url": "https://www.indeed.com/viewjob?jk=4ce799da94c0f717"
}
],
"location": "Chicago, IL",
"via": "Built In Chicago",
"postedAgo": "4 days ago",
"postedAt": "2026-10-19",
"scheduleType": "Full-time",
"salary": "89K–148K a year",
"salaryMin": 89000,
"salaryMax": 148000,
"salaryPeriod": "year",
"salarySource": "google",
"isRemote": false,
"benefits": [
"Paid time off",
"Dental insurance"
],
"extensions": [
"4 days ago",
"89K–148K a year"
],
"qualifications": [
"The ideal candidate possesses strong expertise in data analysis, data warehousing, systems analysis, business process validation, testing...",
"Bachelor's degree in Information Systems, Computer Science, Data Analytics, Business Analytics, or a related field; equivalent work exper..."
],
"responsibilities": [
"Kemper is seeking a highly analytical and detail-oriented Senior Data Business Systems Analyst to provide independent validation and qual...",
"This role is responsible for ensuring the accuracy, completeness, reliability, and regulatory compliance of critical business data and en..."
],
"benefitsHighlights": [
"The range for this position is $89,000 to $148,100",
"When determining candidate offers, we consider experience, skills, education, certifications, and geographic location among other factors..."
],
"description": "Location(s)\nCharlotte, North Carolina, Chicago, Illinois, Columbus, Ohio, Dallas, Texas, Denver, Colorado, St. Louis, Missouri\nDetails\nKe...",
"applyUrl": "https://www.builtinchicago.org/job/data-business-systems-analyst/11781085",
"matchedQuery": "data analyst jobs Chicago",
"experienceYears": 6,
"skills": [
"Python",
"SQL"
],
"education": "Bachelor",
"googleUrl": "https://www.google.com/search?q=Data+Business+Systems+Analyst+Kemper&udm=8&hl=en&gl=us",
"country": "us",
"language": "en",
"googleDomain": "google.com",
"rank": 1,
"searchQuery": "data analyst",
"searchLocation": "Chicago",
"pagesRead": 4,
"pagesFailed": 0
}

On top of what Google shows, every row carries facts read from the description by plain rules (no AI, no extra cost): experienceYears (the lowest number of years asked), skills (from a list of about 90 tools), visaSponsorship (yes / no when the text says so) and education. They stay empty when the text does not say. extensions is the raw list of tags under the job, googleUrl reopens the job on Google, and rank, searchQuery, searchLocation, country and language say which search found it. (These last eleven values come from another real posting: "Registered Nurse (Rn), Primary Care" at The University of Texas at Austin Dell Medical Center.)

Since 2026-10-26 every row also carries:

FieldWhat it holds
healthInsurance, dentalInsurance, paidTimeOfftrue when Google's tags or the benefits section mention it, empty otherwise.
salaryYearlyMin, salaryYearlyMaxThe salary as a yearly amount (hourly x 2,080, daily x 260, weekly x 52, monthly x 12), so hourly and yearly offers sort together.
shareLinkGoogle's own link to this one job.
applySourceCountHow many job boards the posting can be applied on.
jobsFoundInSearchHow many distinct jobs Google showed for the search, before your filters.

Facts on every posting (new 2026-10-28)

Read by rules, no extra cost, empty when the posting does not say it: workArrangement (REMOTE, HYBRID, ON_SITE) and officeDaysPerWeek, employmentType, jobCity, jobRegion, jobCountry (2-letter code), benefitsList, jobLanguage, contactEmails (written in the posting), isAgency.

New filters, applied before you pay: workArrangements, countries, excludeTitleKeywords, excludeCompanies, excludeAgencies, and onlyNewJobs (only postings this same search has not delivered before; never charged twice). Paste Google Jobs links in startUrls instead of typing queries.

How much does it cost?

EventPrice
Job posting, paid Apify plans$0.0025 ($2.50 per 1,000), down to $0.002 on the largest plans
Job posting, free Apify plan$0.003
Start feenone

On the free Apify plan, up to 5 jobs of every run are free (at most half of the run). Searches Google cannot answer are reported in the run summary and never charged. Paid Apify plans get lower tier prices.

Use cases

  • Job boards and aggregators — fresh postings from every source, deduplicated.
  • Recruiters and staffing agencies — who is hiring for which role, where, at what pay.
  • Sales teams — companies hiring = companies growing and buying.
  • Salary research — pay ranges by title and city.
  • Career sites and newsletters — daily feeds of new jobs in a niche.

Use it from code (API)

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/google-jobs-scraper").call(run_input={
"queries": ["machine learning engineer"],
"locations": ["New York"],
"postedWithin": "3days",
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["companyName"], job.get("salary"), job["applyUrl"])
curl -X POST "https://api.apify.com/v2/acts/om_kh~google-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"queries": ["nurse"], "locations": ["Houston"], "maxJobsPerSearch": 20}'

Integrations and MCP

Schedule it daily with postedWithin: "today" and send new jobs to Google Sheets, Slack, Airtable or your ATS with n8n, Make or Zapier. AI agents can call it through https://mcp.apify.com as om_kh/google-jobs-scraper.

Tips and limits

  • Google Jobs holds a few hundred postings per search at most: for full coverage, split by city or by more specific titles.
  • Always give a location. With a country alone, Google mostly returns United States jobs. For another country, set the location, the country and the matching googleDomain.
  • Countries. Checked on 6 October 2026 with one large city per country and the local Google domain. Local jobs came back in 31 countries: United States, United Kingdom, Canada, India, Germany, France, Spain, Italy, Netherlands, Switzerland, Belgium, Austria, Denmark, Brazil, Mexico, Argentina, Colombia, Chile, Japan, Singapore, Philippines, Indonesia, Malaysia, Thailand, Pakistan, United Arab Emirates, Saudi Arabia, Egypt, South Africa, Nigeria, Kenya. In Belgium, Austria, Denmark and Thailand the search must be written in the local language ("emploi", "stellenangebote", "job", "งาน") with the matching language. No job came back in 9, in English or in the local language: Australia, New Zealand, Ireland, Sweden, Norway, Finland, Poland, Portugal, South Korea. Other countries were not checked.
  • When Google answers with no job at all, the run says so in plain words ("Google Jobs may not exist in this country") and charges nothing.
  • Google sometimes mixes in jobs from other places; strictLocation (on by default) removes them.
  • postedAt is computed from Google's "3 days ago" label (day precision).
  • Salary is only present when the employer or the board publishes it.

FAQ

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

Does it include LinkedIn and Indeed jobs? Yes, when Google Jobs lists them — with the direct LinkedIn / Indeed apply links.

Is it legal? It reads public search results. Use the data in line with the laws and terms that apply to you.

Your feedback

Did this Actor save you time? A short review on the Reviews tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the Issues tab: it is answered and fixed fast.