# Google Jobs Scraper - Salary, Apply Links & Posting Dates (`tenfoldfleet/google-jobs-scraper`) Actor

Turn any Google Jobs search into a spreadsheet of openings in a country, US state or city. Each listing row has job title, employer, job location, pay text plus parsed min/max, job type, date posted, the board that posted it and its apply URL. $3 per 1,000 jobs; searches that find nothing are free.

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

## Pricing

from $3.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

### What does Google Jobs Scraper do?

**Google Jobs Scraper** turns the **Google Jobs** search panel (the job box Google shows for searches like "nurse jobs in Austin") into clean, structured rows. Type one or more job searches, pick countries, states or cities, and get every listing Google shows: **job title**, **company**, **job location**, **salary range** when the listing has one, **job type**, **posting date**, the **apply link** and the **job board it came from** (LinkedIn, Indeed, Workday, ZipRecruiter, company career sites and so on).

It works like a **Google Jobs API**: no browser, no Google account, no proxies to manage. Run it from Apify Console, the Apify API, MCP, Make, Zapier or n8n. **$3 per 1,000 jobs**; searches that find nothing are free.

Not affiliated with, endorsed by or sponsored by Google. Google is a trademark of Google LLC.

**What you get and what you don't:** this actor returns the **listing card data** Google Jobs shows in its results list. It does **not** return the full job description text. Use the `applyUrl` link to open the original posting, or feed career-site links into the [ATS Jobs Scraper](https://apify.com/tenfoldfleet/ats-jobs-scraper) to get full descriptions from Greenhouse, Lever, Ashby and other boards.

### Why use it?

- 📈 **Labour-market research**: count openings by title, city and job type, and track them week by week with the "Date posted" filter.
- 🎯 **Sales prospecting from hiring signals**: find companies hiring for roles that need your product (for example "SOC analyst" for a security tool) in a target region.
- 🧾 **Job board and newsletter feeds**: pull fresh listings for a niche ("remote python developer", "travel nurse Texas") with apply links and source names.
- 💵 **Salary snapshots**: Google shows a pay range on part of its listings; you get the raw text plus parsed minimum, maximum, currency and period.
- 🧑‍💼 **Recruiting**: see which agencies and boards repost a client's roles, and how fast new roles appear.
- 🤖 **AI agents**: one call returns JSON that an agent can filter, summarise or join with other data.

### What data can it extract?

| Field | Example |
|---|---|
| `query` | data analyst |
| `location` | Austin, Texas, United States (the location searched) |
| `position` | 3 (rank in Google Jobs) |
| `title` | Data Analyst IV |
| `companyName` | Health & Human Services Comm |
| `companyUrl` | company link when Google has one (often null) |
| `jobLocation` | Austin, TX |
| `salary` | 5,425.33–8,886.16 a month (raw text, null when the listing has none) |
| `salaryMin` / `salaryMax` | 5425.33 / 8886.16 |
| `salaryCurrency` / `salaryPeriod` | USD / month |
| `contractType` | Full-time |
| `postedAt` | 2026-10-16T05:38:57.000Z |
| `postedAgo` | 1 day ago |
| `sourceName` | LinkedIn |
| `applyUrl` | link to the posting on the source site |
| `jobId` | Google's job id |
| `scrapedAt` | when the row was collected |

### How to scrape Google Jobs

1. Open the actor and enter your **job searches**, one per line (job titles, skills or company names).
2. Add **locations**: a country ("United States", "GB"), a US state ("Texas") or a city with its state or country ("Austin, TX", "Manchester, United Kingdom").
3. Set **Max jobs per search** (up to 200) and, if you want, **Date posted** and **Employment type**.
4. Click **Start**. Searches run in parallel; most finish within a minute.
5. Download the results as **JSON, CSV, Excel** or HTML, or read them from the API.

Every search is run in every location, so 3 searches x 4 cities = 12 Google Jobs searches.

### How much does it cost?

- **$3 per 1,000 jobs** ($0.003 per job row), plus a tiny $0.00005 run-start fee.
- **Free**: searches with no listings, duplicates, jobs removed by your employment-type filter, invalid locations and errors.
- Example: 10 searches x 50 jobs = 500 jobs = about **$1.50**.
- **Free Apify plan**: up to **50 jobs per run**. Any paid Apify plan removes that limit.
- Set a maximum cost per run in Apify and the actor only searches for as many jobs as that budget covers.

### Input

```json
{
    "queries": ["data analyst", "registered nurse"],
    "locations": ["Austin, TX", "United Kingdom"],
    "maxJobsPerQuery": 50,
    "datePosted": "week",
    "employmentType": ["fulltime"]
}
```

- `datePosted`: `any`, `today`, `3days`, `week` or `month`.
- `employmentType`: any of `fulltime`, `parttime`, `contractor`, `intern`. Applied to Google's job type label after the search, so a search can return fewer jobs than the maximum.
- `languageCode`: optional, e.g. `de`; empty uses the country's main language.

### Output

```json
{
    "query": "data analyst",
    "location": "United States",
    "position": 7,
    "title": "HCM Data Analyst",
    "companyName": "Sentara Workforce Solutions, LLC",
    "companyUrl": null,
    "jobLocation": "Cheyenne, WY",
    "salary": "89,564.80–137,904.00 a year",
    "salaryMin": 89564.8,
    "salaryMax": 137904,
    "salaryCurrency": "USD",
    "salaryPeriod": "year",
    "contractType": "Full-time",
    "postedAt": "2026-10-15T05:38:57.000Z",
    "postedAgo": "2 days ago",
    "sourceName": "Indeed",
    "applyUrl": "<link to the posting on Indeed>",
    "jobId": "2gY6tFMfbor0AjfkAAAAAA==",
    "scrapedAt": "2026-10-17T05:39:10.000Z"
}
```

Searches that return nothing produce one free row with an `error` field that says why. Download the dataset as JSON, CSV, Excel, XML or HTML.

### Tips

- Be specific: "senior react developer" returns tighter results than "developer".
- Cities need context: write "Portland, OR" or "Portland, Maine, United States", not just "Portland".
- For remote jobs, put "remote" in the search ("remote data analyst") and use a country as the location.
- Run daily with **Date posted: Past 24 hours** to collect only new listings.
- The same job often appears on several boards; the actor keeps the first copy of each title + company + location and drops the rest free of charge.
- `salaryCurrency` comes from the currency symbol, or from the searched country when the listing shows a bare number.

### FAQ

#### Does it return full job descriptions?

No. Google Jobs result cards carry title, company, location, salary, job type, date and source, and that is what this actor returns. For full descriptions, use the apply link or one of the job-board actors below.

#### How many jobs can I get per search?

Up to 200 per search and location pair. Use more searches or more cities for broader coverage.

#### Why is salary often empty?

Google only shows a pay range when the original posting includes one, which is often fewer than half of the listings.

#### Which countries work?

Most countries Google Jobs serves, plus their states, regions and cities. Unknown locations come back as a free error row with a hint.

#### Can I call it from code or an AI agent?

Yes. Use the Apify API, the Apify MCP server, or integrations such as Make, Zapier and n8n; results are plain JSON.

### More job scrapers from Tenfold Fleet

| Actor | Use it for |
|---|---|
| [ATS Jobs Scraper - Greenhouse, Lever, Ashby & 5 More](https://apify.com/tenfoldfleet/ats-jobs-scraper) | every open role on a company's career board, with full descriptions |
| [Workday Jobs Scraper - myworkdayjobs.com API with Salary](https://apify.com/tenfoldfleet/workday-jobs-scraper) | jobs from Workday career sites |
| [SEEK Job Scraper - Australia, NZ, Jobstreet & JobsDB](https://apify.com/tenfoldfleet/seek-job-scraper) | job listings in Australia, New Zealand and South-East Asia |
| [Remote Jobs Aggregator - RemoteOK, WWR, Himalayas & 4 more](https://apify.com/tenfoldfleet/remote-jobs-aggregator) | remote jobs from several boards, deduplicated |

### Disclaimer

This actor collects publicly visible job listing data. Listings can include names of recruiters or companies; if you store or process personal data, make sure you have a lawful basis under GDPR and similar laws. Check the terms of the sites you link to before republishing their content.

# Actor input Schema

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

What you would type into Google Jobs, one per line: a job title, skill or company, e.g. "data analyst", "registered nurse", "python developer remote". Each search is run in every location below.

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

Where to search, one per line. A country ("United States", "GB", "Germany"), a US state ("Texas"), or a city with its state or country ("Austin, TX", "Manchester, United Kingdom", "Berlin, Germany"). Empty = United States.

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

Most jobs to return for each search and location pair (Google Jobs shows up to 200). Free Apify plan: at most 50 jobs per run in total.

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

Only jobs posted in this period.

## `employmentType` (type: `array`):

Keep only these job types (matched on Google's job type label). Empty = all types. Filtering happens after the search, so a search can return fewer jobs than the maximum; filtered-out jobs are not charged.

## `languageCode` (type: `string`):

Optional interface language code for Google, e.g. "en", "de", "fr". Empty = the main language of the location's country.

## Actor input object example

```json
{
  "queries": [
    "data analyst"
  ],
  "locations": [
    "United States"
  ],
  "maxJobsPerQuery": 20,
  "datePosted": "any"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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": [
        "United States"
    ],
    "maxJobsPerQuery": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/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": ["United States"],
    "maxJobsPerQuery": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/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": [
    "United States"
  ],
  "maxJobsPerQuery": 20
}' |
apify call tenfoldfleet/google-jobs-scraper --silent --output-dataset

```

## MCP server setup

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