DEV Community

nahueDev
nahueDev

Posted on

How to Scrape Google Jobs in 2026 (Salaries + Direct Apply Links, No Code)

Google Jobs is one of the best sources of job postings on the web. It aggregates listings from LinkedIn, Indeed, Glassdoor, ZipRecruiter, company career pages and dozens of niche boards, and shows them in one place. If you need job data — for recruiting, salary research or a job board — it's the obvious place to start.

The problem: Google offers no official API for it, and scraping it yourself means dealing with JavaScript walls, CAPTCHAs, and HTML that changes every few weeks.

In this guide I'll show you how to get Google Jobs data without writing a scraper, and how to call it from code if you want to automate it.

What data can you get?

For every job posting:

Field Example
Title 1-1 School Registered Nurse (RN)
Company White Glove Community Care
Location New York, NY
Salary 65–75 an hour
Job type Full-time and Part-time
Posted 5 days ago
Source Indeed
Highlights Qualifications, benefits, responsibilities
Description The full job description
Apply links Direct URLs to every site where the job is posted

The apply links matter most. Google normally hides them behind its own redirect URLs. Here you get the real ones, like https://www.indeed.com/viewjob?jk=... or https://www.linkedin.com/jobs/view/....

Option 1: No code (2 minutes)

Disclosure: I built this scraper. I wrote this guide because I needed this data myself and couldn't find a clean way to get it.

  1. Open the Google Jobs Scraper on Apify and click Try for free.
  2. Under Job titles, add what you're looking for, for example registered nurse or python developer.
  3. Under Locations, add one or more cities, for example Chicago, IL.
  4. Set Max jobs per search, for example 50.
  5. Click Start.

Google Jobs Scraper input form on Apify

When the run finishes, download the results as CSV, Excel or JSON, or view them in a table right in the browser.

Google Jobs results table with salary and apply links

Two tips that make a big difference

Always add a location. Google Jobs ties results to a place. In my tests, searches with a city returned 10 jobs per query almost every time (13 out of 14), while searches without one returned jobs only about a third of the time. The exception is searches like "remote customer service".

You can get more than 10 jobs per search. Google Jobs shows about 10 jobs per query, and its "page 2" doesn't work for automated requests. The scraper gets around this by running variations of your search ("full time …", "remote …", "entry level …", "senior …") and keeping only the jobs it hasn't seen before. It stops early when the variations stop finding new jobs.

Option 2: From code

Python

pip install apify-client
Enter fullscreen mode Exit fullscreen mode
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("nahuedev/google-jobs-scraper").call(run_input={
    "queries": ["data analyst"],
    "locations": ["New York, NY", "Seattle, WA"],
    "maxJobsPerSearch": 50,
})

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], "|", job["company"], "|", job["salary"])
Enter fullscreen mode Exit fullscreen mode

JavaScript / Node.js

npm install apify-client
Enter fullscreen mode Exit fullscreen mode
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('nahuedev/google-jobs-scraper').call({
    queries: ['software engineer'],
    locations: ['Austin, TX'],
    maxJobsPerSearch: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((job) => `${job.title} @ ${job.company}`));
Enter fullscreen mode Exit fullscreen mode

Plain HTTP (one request, results back)

curl -X POST "https://api.apify.com/v2/acts/nahuedev~google-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["warehouse worker"],"locations":["Dallas, TX"],"maxJobsPerSearch":30}'
Enter fullscreen mode Exit fullscreen mode

Example output

{
  "id": "eMcqFV57T6rMpQnmAAAAAA==",
  "title": "1-1 School Registered Nurse (RN)",
  "company": "White Glove Community Care",
  "location": "New York, NY",
  "via": "Indeed",
  "postedAt": "5 days ago",
  "salary": "65–75 an hour",
  "employmentType": "Full-time and Part-time",
  "tags": ["No degree mentioned", "Health insurance"],
  "highlights": {
    "qualifications": ["Valid RN license", "1 year of experience as an RN needed"],
    "benefits": ["Weekly pay – Direct Deposit", "Health Insurance"],
    "responsibilities": ["Protecting and maintaining students’ health..."]
  },
  "description": "BECOME A SCHOOL NURSE! Our kids need you...",
  "applyLinks": [
    { "source": "Indeed", "direct": true, "url": "https://www.indeed.com/viewjob?jk=..." }
  ],
  "searchQuery": "registered nurse",
  "searchLocation": "New York, NY"
}
Enter fullscreen mode Exit fullscreen mode

The id is Google's job ID and stays the same across runs. Use it to find new postings since your last run.

What people use this for

  • Recruiting and staffing agencies: find companies hiring for a role in a city right now, and pitch them.
  • Salary research: compare pay for the same role across cities.
  • Job boards and newsletters: schedule a daily run and publish fresh, niche listings, like "remote Python jobs" or "nursing jobs in Texas".
  • Competitive intelligence: see which competitors are hiring, and for which roles.
  • Market research: track hiring demand for a skill over time.

Automate it: daily new jobs

On Apify you can schedule the scraper (for example, every morning) and send the results to Google Sheets, Slack, email or a webhook. Combine that with the id field and you get a "new jobs today" feed with zero maintenance.

Pricing

You pay per job saved: $4 per 1,000 jobs. Duplicates found by more than one search variation are saved and charged only once. Apify's free plan includes monthly platform credit, so you can try it without paying anything upfront.

Wrapping up

Google Jobs has some of the best job data on the web, but no API. With the Google Jobs Scraper you can get it as clean JSON or CSV in a couple of minutes, with no code, or plug it into your own pipeline with a few lines of Python or JavaScript.

Questions or a field you'd like added? Leave a comment. I read them all.

Top comments (0)