# Google Jobs Scraper (`piotrv1001/google-jobs-scraper`) Actor

The Google Jobs Scraper extracts job listings from Google Jobs for any title and location, capturing companies, salaries, job types, posting dates, highlights, descriptions and direct apply links across LinkedIn, Indeed and every other board — ideal for recruiting and salary research.

- **URL**: https://apify.com/piotrv1001/google-jobs-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 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

### 🚀 Google Jobs Scraper

Extract job listings from Google Jobs for any job title and location as clean, structured JSON. The **Google Jobs Scraper** turns a search like `software engineer` in `New York` into a list of unique jobs with **title, company, location, salary, job type, posting age, job highlights, the full description and direct apply links** to LinkedIn, Indeed, Workday, company career sites and every other board Google lists. Built for recruiting, salary benchmarking, labor-market research and job-board aggregation.

### ✨ Features

- 💼 **Every board in one search**: Google Jobs aggregates LinkedIn, Indeed, Glassdoor, ZipRecruiter, company career pages and hundreds of niche boards. Each row tells you which board it came from (`via`).
- 💰 **Salary and job type**: Salary ranges (`125K–175K a year`, `£36,943–£44,900 a year`) and job type (Full-time, Part-time, Contractor, Internship) whenever the employer publishes them.
- 📋 **Job highlights and description**: Qualifications, responsibilities and benefits as separate lists, plus the full job description with its line breaks.
- 🔗 **Direct apply links**: Every "Apply on …" option resolved to the real posting URL, so you can open or store the original listing.
- 📅 **Fresh jobs only**: Filter to jobs posted in the past 24 hours, 3 days or week.
- 🌍 **11 countries**: United States, United Kingdom, Canada, Germany, France, Spain, Mexico, Brazil, India, Singapore and South Africa.
- 🧹 **No duplicates**: The same job is never saved or charged twice, even when several of your searches find it.

### 🛠️ How It Works

1. **Enter job titles** – One per line in `queries`, as you would type them into Google: `software engineer`, `registered nurse`, `python`.
2. **Pick a location and country** – A city or region in `location` (or leave it empty for the whole country) and the matching `country`.
3. **Filter by date (optional)** – `datePosted`: past 24 hours, past 3 days or past week.
4. **Set the depth** – `maxItems` caps the unique jobs collected per job title (default 50). Broad titles in big cities usually reach about 60–140.
5. **Run it** – Jobs stream into the dataset; export as JSON, CSV or Excel, or read them through the API.

### 💰 Pricing

| Event         | Price  | What you get                                                                                                        |
| ------------- | ------ | ------------------------------------------------------------------------------------------------------------------- |
| `job-listing` | $0.003 | One unique job: title, company, location, board, salary, type, posting age, highlights, description and apply links |

Example: 3 job titles × 50 jobs = 150 jobs = **$0.45**. Jobs that several of your searches find are charged once. Set a maximum cost per run and the scraper stops cleanly when it is reached.

### ⚠️ Good to know

- Google decides how many jobs it shows for a search. Niche titles or small towns can return fewer jobs than `maxItems`; the run's status message tells you how many were available.
- In EU countries (Germany, France, Spain) Google shows a short **job preview** instead of the full description and job highlights. The apply links lead to the complete posting.
- `salary`, `jobType`, `postedAt` and the highlights are filled only when Google shows them for that job.
- `postedAt` is Google's relative age (`10 hours ago`, `3 days ago`), measured at `scrapedAt`.
- Google lists one job on several boards; `applyOptions` contains all of them, and very similar postings can be grouped together by Google.
- Other countries (for example Australia or Japan) do not show Google Jobs results and are not supported.

### 📊 Sample Output Data

```json
[
    {
        "jobId": "fplVD6NzqcGb_8UAAAAAAA==",
        "title": "Software / Data Engineer (First Technology Hire - NYC Private Equity)",
        "companyName": "Averity",
        "location": "New York, NY",
        "via": "LinkedIn",
        "postedAt": "10 hours ago",
        "salary": "125K–175K a year",
        "jobType": "Full-time",
        "extensions": [],
        "qualifications": [
            "1-4 years of professional experience as a Software Engineer, Data Engineer, Analytics Engineer, Data Analyst, Business Intelligence Developer or Business Systems Analyst",
            "Strong SQL, plus Python (or similar) for automation and data work"
        ],
        "responsibilities": [
            "Building the data foundation our investment, asset management and finance teams run on - pipelines, integrations, and one source of truth for portfolio and property data"
        ],
        "benefits": ["$125,000 - $175,000 base salary", "Annual bonus, targeted at 15-30% in year one"],
        "description": "How would you like to be the first technology hire at a NYC private equity firm - handed a blank sheet of paper to build their entire tech stack and data strategy from the ground up?\n\nWhat's The Job?\nAs our first technology…",
        "applyOptions": [
            {
                "source": "LinkedIn",
                "url": "https://www.linkedin.com/jobs/view/software-data-engineer-first-technology-hire-nyc-private-equity-at-averity-4473191168"
            }
        ],
        "googleJobsUrl": "https://www.google.com/search?ibp=htl;jobs&q=software+engineer+New+York&htidocid=fplVD6NzqcGb_8UAAAAAAA%3D%3D…",
        "query": "software engineer",
        "searchLocation": "New York",
        "country": "us",
        "searchVariant": "base",
        "scrapedAt": "2026-10-03T07:06:29.876Z"
    }
]
```

Find, track and benchmark jobs across every board with the **Google Jobs Scraper**! 🚀

# Actor input Schema

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

One search per line, as you would type it into Google: a job title, skill or keyword (e.g. `software engineer`, `registered nurse`, `python`).

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

City or region to search in (e.g. `New York`, `London`, `Berlin`). Leave empty to search the whole country.

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

Country whose Google Jobs results to use. Pick the country of the location above.

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

Only jobs posted within this period.

## `maxItems` (type: `integer`):

Maximum number of unique jobs to collect for each job title. Broad titles in big cities usually reach about 100.

## Actor input object example

```json
{
  "queries": [
    "software engineer"
  ],
  "location": "New York",
  "country": "us",
  "datePosted": "any",
  "maxItems": 50
}
```

# 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": [
        "software engineer"
    ],
    "location": "New York"
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/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": "New York",
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/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": "New York"
}' |
apify call piotrv1001/google-jobs-scraper --silent --output-dataset

```

## MCP server setup

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