# Google Jobs Scraper: All Boards, Apply Links & Salary (`s_actors/google-jobs-scraper`) Actor

Jobs from every board Google aggregates (LinkedIn, Indeed, Glassdoor, ZipRecruiter, career sites) in one search: every apply link as a real URL, full description, salary per year, posted date. Past Google's 10-job limit. Only-new job alerts.

- **URL**: https://apify.com/s_actors/google-jobs-scraper.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** Jobs, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.89 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Google Jobs Scraper & API: Every Board, Every Apply Link, Past the 10-Job Limit

Scrape **Google Jobs** (the "Jobs" tab of Google Search) to Excel, CSV or JSON: one search returns jobs from **LinkedIn, Indeed, Glassdoor, ZipRecruiter, Monster, Dice, Built In and thousands of company career sites** at once. Every job comes with **every board it is posted on as a real apply URL**, the **full description**, Google's **Job highlights**, the **salary parsed and converted to a yearly figure**, and the posted date. Google shows 10 jobs per search; this Actor keeps going with Google's own filters and returns **100-150 unique jobs per search** (more with several searches or locations). Schedule it with **Only new jobs** for daily job alerts.

```json
{ "queries": ["software engineer"], "location": "Austin, TX", "maxJobsPerQuery": 50 }
```

#### Why this Google Jobs scraper

| | This Actor | Typical Google Jobs scrapers |
|---|---|---|
| Jobs per search | ✅ **100-150 unique** (Google's own filters: date, job type, remote, no degree, seniority) | ⚠️ 10, the first page |
| Apply links | ✅ **Every board (5 on average), real URLs** (LinkedIn, Indeed, the employer's site...), Google's tracking removed | ⚠️ One link, or Google redirect links |
| Description | ✅ **Full text** (median 3,600 characters) + Job highlights | ⚠️ Often a paid add-on |
| Salary | ✅ Min, max, currency, period **and per year** (`35–37 an hour` → 72,800-76,960 USD) | ⚠️ Text as shown |
| Workplace | ✅ remote / hybrid / on-site with the evidence | ❌ |
| Job alerts | ✅ Only new jobs, seen ones are free | ⚠️ Rare |
| Duplicates | ✅ Removed (same job from several searches is one row, charged once) | ⚠️ Charged twice |
| Same columns as our LinkedIn, Glassdoor, Dice... scrapers | ✅ One mapping for every board | ❌ |

#### What you get

Real example, "software engineer" and "registered nurse" in Austin, TX, October 2026 (200 jobs in 62 seconds):

| Title | Company | Salary | Per year | Posted | Apply on |
|---|---|---|---|---|---|
| Senior Software Development Engineer (Austin) | Jiffy.com | 195K–265K a year | 195,000-265,000 USD | 2 days ago | LinkedIn, Hackajob, Indeed, Built In, BeBee, ZipRecruiter, Teal, SimplyHired |
| Principal Consultant - Software Engineer | Torq | 140K–170K a year | 140,000-170,000 USD | 3 days ago | Indeed, ZipRecruiter, HiringCafe, SimplyHired, Jobilize |
| Software Engineer: Linux Driver and Kernel Developer | Apple | 135K–160K a year | 135,000-160,000 USD | 19 hours ago | Ladders, ZipRecruiter, Teal, Adzuna, Jobright, Career.io, JobServe, Vacario |
| Sr Quality Software Engineer | Spectraforce | 35–37 an hour | 72,800-76,960 USD | 4 days ago | Spectraforce, LinkedIn, Glassdoor, Lancesoft, BeBee, Monster, Jobright, Lensa |
| Registered Nurse – Postpartum | AMN Corporate | 1,689–1,775 a week | 87,828-92,300 USD | 21 hours ago | AMN Healthcare, Indeed, Glassdoor, Monster, CareerBuilder, BeBee, LifeworQ |
| Clinic RN - Full Time | The Annex | 40–46 an hour | 83,200-95,680 USD | | Indeed, ZipRecruiter, Jobilize |

`applyLinks` of the first job: `{"board": "LinkedIn", "url": "https://www.linkedin.com/jobs/view/senior-software-development-engineer-austin-at-jiffy-com-4474516833"}`, `{"board": "Hackajob", "url": "https://hackajob.com/job/78f59ae3-…", "direct": true}`, `{"board": "Indeed", "url": "https://www.indeed.com/viewjob?jk=68a96aefdc270e6c"}`… In that run every job had at least one apply URL, 198 of 200 a full description and 66 of 200 a salary (Google shows pay when the employer publishes it).

| Field | Description |
|---|---|
| `jobId` | Google's job id (stable across runs: used by job alerts) |
| `title`, `companyName`, `location`, `companyLogo` | As in Google Jobs; `otherLocationsCount` when Google lists "+2 others" |
| `salaryText`, `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | Pay as shown and parsed (hour, day, week, month, year); currency of the market when Google shows none |
| `salaryYearlyMin`, `salaryYearlyMax` | Pay converted to a year (2,080 hours, 52 weeks), to compare jobs |
| `postedDate`, `postedAgo` | Date (ISO) and Google's "3 days ago" |
| `employmentType`, `workplaceType`, `workplaceTypeSource`, `workplaceTypeEvidence` | Full-time, Contractor…; remote / hybrid / on-site and where it was found (Google's "Work from home" tag, the location "Anywhere", title or description) |
| `jobUrl` | The posting on its source board (`via`), real URL |
| `applyLinks`, `applyBoards`, `boardsCount`, `directApplyUrl` | Every board with its real URL (`direct` = Google's "Apply directly on") |
| `description`, `descriptionIsPreview` | Full job description; in EU countries Google shows only a short preview (`true`) |
| `jobHighlights` | Google's Qualifications, Benefits and Responsibilities bullet lists |
| `benefitTags`, `noDegreeMentioned`, `workFromHome` | Google's tags on the job card (Health insurance, Paid time off…) |
| `googleJobUrl` | The job in Google Jobs |
| `searchKeyword`, `searchLocation`, `googleLocation`, `searchUrl`, `foundBy` | Which search found it, the place Google searched in, and which filter page (`main`, `since yesterday`, `remote`…) |
| `isNew`, `scrapedAt` | Job alerts mark; time of the run |

Field names are the same as in our other job scrapers (`jobId`, `title`, `companyName`, `salaryYearlyMin`, `workplaceType`, `postedDate`…), so Google Jobs, LinkedIn, Glassdoor and Dice results go into one table. Four table views: **Jobs**, **Salaries**, **Apply links** and **Details**.

#### Input

| Field | Example | Notes |
|---|---|---|
| Job searches | `software engineer`, `registered nurse`, `data analyst jobs in austin tx`, a Google Jobs URL | One per line, as a candidate types it |
| Location | `Austin, TX`, `London`, `Remote` | Added to every search; empty = whole country |
| Max jobs per search | `50` | Up to 200; Google's filters give 100-150 unique jobs for a broad search, narrow searches end sooner |
| Date posted | `Since yesterday` | Google's own filter: since yesterday, 3 days, week, month |
| Job type | `Full time` | Full time, part time, contract, internship |
| Remote only | ✅ | Google's "Remote" filter |
| Only jobs with a salary | ✅ | Jobs without pay are skipped and free |
| Country, language | `us`, `gb`, `de`, `in`… / `en`, `de` | 32 Google markets |
| Only new jobs, Alert name | ✅, `nurses-austin` | Job alerts: see below |

#### Google job alerts: only new jobs

Turn on **Only new jobs**, set **Date posted** to **Since yesterday** and schedule the Actor daily (or hourly). Each run returns only jobs that earlier runs with the same **Alert name** did not return; jobs seen before are skipped and **not charged**. A run with nothing new costs only the run start. Connect the dataset to email, Slack, Google Sheets or a webhook through Apify integrations.

#### How it works

| Step | What happens |
|---|---|
| 1. Search | Your search is opened in Google Jobs (`udm=8`) through Apify's Google SERP proxy, in the country you choose |
| 2. Past 10 jobs | Google shows 10 jobs per search. The Actor runs the same search with Google's own filters (since yesterday, last 3 days, full time, part time, contract, internship, remote, no degree, senior, junior, entry level…) and keeps only jobs it has not seen yet, until your limit or until Google stops returning new ones |
| 3. Full job | Each job card already holds the full description, Job highlights and every apply link, so no extra page is needed per job |
| 4. Clean data | Apply links become real URLs without Google's tracking, salary is parsed and converted to a year, the posted date becomes a date, duplicates are removed |

#### Pricing

Pay per event, no subscription needed. Apify Scale and Business plans pay less:

| Event | Free plan | Starter plan | Scale plan | Business plan |
|---|---|---|---|---|
| Run start | $0.005 | $0.005 | $0.005 | $0.005 |
| Job (every field included) | $0.00539 | $0.00539 | $0.00479 | $0.00389 |

**1,000 jobs = $5.39** on Starter ($4.79 on Scale, $3.89 on Business). Description, Job highlights, every apply link and the salary are included, no add-ons. Duplicates, jobs filtered out (Only jobs with a salary) and jobs already sent by a job alert are free. A daily alert for one search costs $0.15 a month plus $0.00539 per new job. Set a maximum cost per run in the run options: the Actor stops there.

#### Ready-made tasks

| Task | What it does |
|---|---|
| [Google Job Alerts: New Postings Since Yesterday](https://apify.com/s_actors/google-jobs-scraper/examples/google-job-alerts) | New jobs for a search every day, only the ones you have not seen |

#### FAQ

**How many jobs can I get per search?** Google Jobs itself shows 10 and has no "next page" for automated access. The Actor adds Google's own filters to reach more: in our tests 100 unique jobs per search in Austin took 13-16 Google pages, and a broad search gives 100-150 in total. For more, split the search: several job titles, nearby cities, or one search per job type. A narrow search ("kernel developer in Boise") runs out sooner: the Actor stops when Google returns nothing new.

**Is the description complete?** In the US, UK, Canada, India and most other markets, yes. In EU countries (Germany, France…) Google shows only a ~400-character preview of each job; `descriptionIsPreview` is then `true` and the apply links lead to the full posting.

**Why do some jobs list boards like BeBee or Jobilize?** Google Jobs lists every site carrying the posting, including job aggregators. `jobUrl` is the source Google names first (`via`), usually the original board or the employer.

**Why is the salary empty for some jobs?** Google shows pay only when the employer published it. Use **Only jobs with a salary** to keep only jobs with pay (the others are free).

**Do I need a Google account, API key or proxy?** No. Everything is included.

**Is this the Google Jobs API?** It returns what the Google Jobs search shows, as structured JSON through the Apify API. Google's Cloud Talent Solution is a different product, for searching your own job listings.

#### Use with the API and AI agents

Run it from the Apify API, the JavaScript or Python client, **n8n**, Make or Zapier, or from AI agents through the [Apify MCP server](https://mcp.apify.com) (Claude, ChatGPT, Cursor). One call: `POST https://api.apify.com/v2/acts/s_actors~google-jobs-scraper/run-sync-get-dataset-items` with the input above returns the jobs as JSON.

#### Other job and Google tools

| Actor | What it does |
|---|---|
| [LinkedIn Jobs Scraper](https://apify.com/s_actors/linkedin-jobs-scraper) | LinkedIn jobs without login: a remote filter that works, salaries from descriptions, job alerts |
| [Glassdoor Jobs Scraper](https://apify.com/s_actors/glassdoor-jobs-scraper) | Glassdoor jobs with salary ranges and all company ratings, filter by work-life balance, job alerts |
| [Wellfound Jobs Scraper](https://apify.com/s_actors/wellfound-jobs-scraper) | Startup jobs from Wellfound (AngelList): salary and equity as numbers, stage, YC, visa sponsorship, job alerts |
| [Dice Jobs Scraper](https://apify.com/s_actors/dice-jobs-scraper) | Dice.com tech jobs with W2, C2C and 1099 contract types, recruiter apply emails, visa sponsorship and reposts |
| [StepStone Jobs Scraper](https://apify.com/s_actors/stepstone-jobs-scraper) | StepStone.de and .at jobs with salary estimates for most jobs, exact matches only, English jobs in Germany |
| [XING Jobs Scraper](https://apify.com/s_actors/xing-jobs-scraper) | XING jobs in Germany, Austria and Switzerland: salaries per year, English-only jobs, more than 1,000 jobs per search |
| [Instahyre Jobs Scraper](https://apify.com/s_actors/instahyre-jobs-scraper) | Instahyre jobs in India with posting dates (newest first), company Glassdoor ratings, jobs for freshers and remote jobs |
| [Hirist Jobs Scraper](https://apify.com/s_actors/hirist-jobs-scraper) | Hirist tech jobs in India with recruiter activity (applications, recruiter actions, last active), every job of a skill, AmbitionBox ratings |
| [Internshala Scraper](https://apify.com/s_actors/internshala-scraper) | Internshala internships and fresher jobs in India with the guaranteed stipend split from incentives, red flags of fake listings and applicants per opening |
| [Foundit Jobs Scraper](https://apify.com/s_actors/foundit-jobs-scraper) | Foundit (Monster India) jobs in India, the Gulf and SEA: posted on Foundit or reposted from LinkedIn, original link, salary, red flags |
| [Cutshort Jobs Scraper](https://apify.com/s_actors/cutshort-jobs-scraper) | Cutshort tech and startup jobs in India, live: recruiter's last activity with ghost jobs hidden, company or agency, salary in lakhs, red flags |
| [Shine Jobs Scraper](https://apify.com/s_actors/shine-jobs-scraper) | Shine.com jobs in India with a real-or-fake verdict: imported feed jobs, hidden employers and jobs abroad flagged, company or agency, salary in lakhs, applicants |
| [iimjobs Scraper](https://apify.com/s_actors/iimjobs-scraper) | iimjobs management, finance and MBA jobs in India with recruiter actions and applicants (what iimjobs Pro sells), exact keyword matches, AmbitionBox ratings |
| [Google Search Results Scraper](https://apify.com/s_actors/google-search-scraper) | Real Google results with AI Overview, People also ask, rank tracker |
| [Google AI Overview Scraper & Tracker](https://apify.com/s_actors/google-ai-overview-scraper) | Full Google AI Overview answers with real source URLs; is your brand mentioned or cited |
| [Google Maps Scraper](https://apify.com/s_actors/google-maps-scraper) | Places with phone, website, rating, reviews and hours, beyond the 120 limit |
| [Google Maps Email Extractor](https://apify.com/s_actors/google-maps-email-extractor) | Emails and social profiles of local businesses |
| [Google Ads Transparency Center Scraper](https://apify.com/s_actors/google-ads-transparency-scraper) | Every ad of an advertiser with the ad copy and videos |
| [Google Shopping Price Tracker](https://apify.com/s_actors/google-shopping-price-tracker) | Google Shopping prices and sellers, price changes |
| [Google Hotels Scraper](https://apify.com/s_actors/google-hotels-scraper) | Hotel prices from every booking site |
| [Google Flights Scraper](https://apify.com/s_actors/google-flights-scraper) | Flight prices, cheapest dates, price alerts |
| [Google Play Scraper](https://apify.com/s_actors/google-play-scraper) | Apps, ratings, reviews, keyword rankings |
| [Bulk Image Downloader](https://apify.com/s_actors/bulk-image-downloader) | Google Images and image links to a ZIP file |

#### Is it legal?

The Actor reads public Google Jobs search pages, the same pages anyone can open without logging in. Use the data according to the laws that apply to you and Google's terms. This Actor is not affiliated with Google.

# Actor input Schema

## `queries` (type: `array`):

What a candidate would type into Google Jobs, one per line: "software engineer", "registered nurse", "warehouse associate night shift", "data analyst jobs in austin tx". You can also paste a Google Jobs URL (https://www.google.com/search?q=...\&udm=8): its query, country and language are used.

## `location` (type: `string`):

City, state or country added to every search: "Austin, TX", "London", "Remote". Google Jobs then shows jobs there (and remote jobs open to it). Empty = the whole country. Skipped for a search that already names the place.

## `maxJobsPerQuery` (type: `integer`):

Google Jobs shows 10 jobs per search and stops. The Actor goes further with Google's own filters (date posted, job type, remote, no degree, seniority) and keeps only jobs it has not seen yet: typically 100-150 unique jobs for a broad search, fewer for narrow ones; for more, add searches (titles, nearby cities). You pay only for unique jobs.

## `datePosted` (type: `string`):

Google Jobs' own "Date posted" filter. For daily alerts use "Since yesterday" with "Only new jobs".

## `employmentType` (type: `string`):

Google Jobs' own "Job type" filter.

## `remoteOnly` (type: `boolean`):

Google Jobs' own "Remote" / "Work from home" filter.

## `onlyWithSalary` (type: `boolean`):

Keep only jobs where Google shows a pay range. Jobs without one are skipped and not charged.

## `country` (type: `string`):

Google of this country. In EU countries Google shows only a short preview of the description (descriptionIsPreview = true); every apply link is still complete.

## `language` (type: `string`):

Google interface language code (hl): en, de, fr, es... Empty = the country's main language.

## `onlyNewJobs` (type: `boolean`):

Return only jobs not returned by earlier runs with the same alert name. Jobs already seen are skipped and not charged. Combine with Date posted = "Since yesterday".

## `monitorName` (type: `string`):

Seen jobs are remembered per alert name: use one name per alert ("nurses-chicago", "client-a") so they never mix.

## `maxConcurrency` (type: `integer`):

Searches run at once (each fetches up to 3 Google pages at a time).

## `debugLog` (type: `boolean`):

Log every retry and save the HTML of every Google page to the run key-value store.

## Actor input object example

```json
{
  "queries": [
    "software engineer"
  ],
  "location": "Austin, TX",
  "maxJobsPerQuery": 50,
  "datePosted": "anytime",
  "employmentType": "any",
  "remoteOnly": false,
  "onlyWithSalary": false,
  "country": "us",
  "onlyNewJobs": false,
  "monitorName": "default",
  "maxConcurrency": 5,
  "debugLog": false
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per job: title, company, location, salary, posted date, boards it is posted on.

## `salary` (type: `string`):

Jobs with pay: the range as shown and normalised to a year.

## `applyLinks` (type: `string`):

Every board each job is posted on, with the real apply URL.

## `details` (type: `string`):

Full description and Google's Job highlights (qualifications, benefits, responsibilities).

## `all` (type: `string`):

Every field of every job.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "software engineer"
    ],
    "location": "Austin, TX"
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/google-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["software engineer"],
    "location": "Austin, TX",
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/google-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "software engineer"
  ],
  "location": "Austin, TX"
}' |
apify call s_actors/google-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,s_actors/google-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/er0DSMfSA9QusTS9p/builds/uWBW0Adlq3Pr4phVQ/openapi.json
