# Google Jobs Scraper: Salaries, Apply Links, Full Descriptions (`scrapemint/google-jobs-scraper`) Actor

Scrape Google Jobs by role and location: title, company, salary range, employment type, posted date, full description, qualifications and every apply link (LinkedIn, Indeed, ZipRecruiter, company site). Expands queries automatically to reach more jobs.

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

## Pricing

$2.00 / 1,000 job listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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: Salaries, Apply Links, Full Descriptions

**Every job Google Jobs shows for a role and place, as clean rows.** Google Jobs pulls listings from LinkedIn, Indeed, ZipRecruiter, Glassdoor, Monster, company career sites and hundreds of smaller boards. Search by **role** and **location** and get one row per job:

- **The job:** title, company, location, the board it came from, **posted date**
- **Pay and type:** **salary range** parsed into min / max / period, employment type (full-time, part-time, contractor, internship)
- **Highlights:** qualifications, benefits and responsibilities as Google extracted them
- **The whole posting:** full description text
- **Where to apply:** **every apply link** (Indeed, LinkedIn, ZipRecruiter, the company site...), with Google's tracking parameters removed

Google shows only 10 jobs per search. With **Expand queries** on, the actor also runs variants (remote, senior, entry level, contract, hybrid...) and keeps going while they turn up new jobs, so one run can return hundreds of unique jobs for a role and city. Duplicates across variants are removed and never charged.

### What you get

`jobId`, `title`, `company`, `location`, `via`, `postedText`, `postedAt`, `employmentType`, `salary` (`min`, `max`, `period`, `currency`, `text`), `tags`, `highlights`, `description`, `applyLinks`, `applyUrl`, `googleJobsUrl`, `searchQuery`, `scrapedAt`

### Example input

Data analyst jobs in Austin:

```json
{
  "queries": ["data analyst"],
  "locations": ["Austin, TX"],
  "maxJobs": 100
}
```

Full-time nursing jobs posted in the last week, in three cities:

```json
{
  "queries": ["registered nurse"],
  "locations": ["Denver, CO", "Phoenix, AZ", "Dallas, TX"],
  "employmentTypes": ["FULLTIME"],
  "postedWithinDays": 7,
  "maxJobs": 300
}
```

UK roles:

```json
{
  "queries": ["react developer", "frontend engineer"],
  "locations": ["London"],
  "country": "gb"
}
```

### Example output

```json
{
  "jobId": "2e5DUKIYPxqc2lhyAAAAAA==",
  "title": "Registered Nurse (RN) Infection Preventionist LPN or RN",
  "company": "Hallmark Nursing Center",
  "location": "Denver, CO",
  "via": "Indeed",
  "postedText": "4 days ago",
  "postedAt": "2026-10-21T17:15:37.478Z",
  "employmentType": "Full-time",
  "salary": { "min": 31, "max": 46, "period": "hour", "currency": null, "text": "31–46 an hour" },
  "highlights": {
    "qualifications": ["Nursing diploma (associate's or bachelor's degree in nursing)", "Licensed/registered in applicable State"],
    "responsibilities": ["Collects, prepares, and analyzes HAI data"]
  },
  "description": "On Call Required.\n\nThe RN Infection Preventionist evaluates the quality of resident care...",
  "applyLinks": [
    { "source": "Indeed", "url": "https://www.indeed.com/viewjob?jk=1bd735bd47c61d36" },
    { "source": "LinkedIn", "url": "https://www.linkedin.com/jobs/view/registered-nurse-rn-infection-preventionist-lpn-or-rn-at-life-care-centers-of-america-4479455421" },
    { "source": "ZipRecruiter", "url": "https://www.ziprecruiter.com/c/hallmark-nursing-center/Job/Registered-Nurse-(RN)-Infection-Preventionist-LPN-or-RN/-in-Denver,CO?jid=5862f4d4abb9aa5b" }
  ],
  "applyUrl": "https://www.indeed.com/viewjob?jk=1bd735bd47c61d36",
  "searchQuery": "full time registered nurse jobs in Denver, CO"
}
```

### Uses

- **Job boards and aggregators:** fresh listings with salary and apply links from every source Google indexes
- **Recruiting and sales leads:** which companies are hiring for a role in a city right now, and through which boards
- **Salary research:** pay ranges by role and location, already parsed into numbers
- **Labour-market tracking:** schedule it daily and count new postings per role
- **Pair it with** [LinkedIn Jobs Scraper Pro](https://apify.com/scrapemint/linkedin-jobs-scraper-pro) or [ATS Jobs Search](https://apify.com/scrapemint/ats-jobs-search) for postings straight from company career sites

### Notes

- Filters (employment type, posted date) are applied to what Google returns. Jobs that do not match are dropped and not charged.
- `postedAt` is worked out from Google's "3 days ago" text, so it is accurate to the day.
- Some jobs have no salary or no posted date on Google; those fields are `null`.

### Pricing

- **$0.002** per unique job, full description and all apply links included
- No start fee. Duplicates and filtered-out jobs are free.

# Actor input Schema

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

Roles or keywords, one per line, e.g. data analyst, registered nurse, "react developer".

## `locations` (type: `array`):

Cities, states or countries, e.g. Austin, TX / London / Remote. Every query runs for every location. Leave empty to let Google pick from the query.

## `maxJobs` (type: `integer`):

Total unique jobs to return across all searches.

## `expandQueries` (type: `boolean`):

Google shows 10 jobs per search. With this on, the actor also searches variants (remote, senior, entry level, contract...) and keeps going while they add new jobs. Turn off to get just the top 10 per search.

## `employmentTypes` (type: `array`):

Keep only these types. Empty = any.

## `postedWithinDays` (type: `integer`):

Keep only jobs posted in the last N days. 0 = any date. Jobs with no posted date are dropped when this is set.

## `includeDescription` (type: `boolean`):

The full job description text. Turn off for smaller rows.

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

Two-letter country code for Google (gl), e.g. us, gb, ca, au, in, de.

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

Interface language (hl), e.g. en, de, fr, es.

## Actor input object example

```json
{
  "queries": [
    "data analyst"
  ],
  "locations": [
    "Austin, TX"
  ],
  "maxJobs": 30,
  "expandQueries": true,
  "employmentTypes": [],
  "postedWithinDays": 0,
  "includeDescription": true,
  "country": "us",
  "language": "en"
}
```

# Actor output Schema

## `jobs` (type: `string`):

Title, company, location, salary, employment type, posted date, highlights, description and apply links.

## `summary` (type: `string`):

Jobs written, Google pages read and searches used.

# 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": [
        "data analyst"
    ],
    "locations": [
        "Austin, TX"
    ],
    "maxJobs": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/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": ["data analyst"],
    "locations": ["Austin, TX"],
    "maxJobs": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/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": [
    "data analyst"
  ],
  "locations": [
    "Austin, TX"
  ],
  "maxJobs": 30
}' |
apify call scrapemint/google-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapemint/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/7mVSKgekeHeIDm9Pr/builds/JaUwYPATwEfQhDXHg/openapi.json
