# Google Jobs Scraper — Listings, Salaries & Apply Links (`vero-api/google-jobs-scraper`) Actor

Scrape Google Jobs listings by keyword and location. Get titles, companies, locations, salaries, posting dates, employment types, descriptions, and every apply link as clean JSON — no login or API key needed.

- **URL**: https://apify.com/vero-api/google-jobs-scraper.md
- **Developed by:** [VeroAPIs](https://apify.com/vero-api) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Stats:** 19 total users, 5 monthly users, 96.3% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $10.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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Jobs Scraper — Listings, Salaries & Apply Links

Google Jobs Scraper **extracts job listings from Google Jobs** — title, company, location, posting date, salary, employment type, description, and every apply link — and downloads them as **JSON, CSV, Excel, or XML**. It runs in the cloud, needs no coding, and **no login or API key**.

Try it right away: type the roles you're searching for and where, click **Start**, and watch the dataset fill up with structured job data.

### What data does it extract?

Each result is **one job listing**:

| Data | Details |
|---|---|
| 💼 **Job** | title, employment type, posting date and "time ago", and whether it's remote |
| 🏢 **Company** | nested `company` object: name and logo |
| 📍 **Location** | where the job is based, as shown by Google |
| 🔗 **Source** | the job board the listing was aggregated from (e.g. LinkedIn, Indeed) |
| 💰 **Salary** | pay or salary range, when one is shown |
| 📝 **Description** | the job description text shown on the card |
| 🚪 **Apply options** | every place you can apply — label and outbound URL |

### How do I scrape Google jobs?

1. **Say what you want** — add one or more *Search queries* (a job title or skill) and a *Location*.
2. **Narrow it down** *(optional)* — filter by employment type, date posted, and remote-only.
3. **Pick a country** — the country/region to search. Set it to match your Location.
4. **Set how many** — choose *Maximum jobs*, or use `0` for no limit.
5. **Click Start** — then download the results from the **Storage** tab in any format, or send them anywhere with integrations.

### Input example

```json
{
    "queries": ["software engineer", "data scientist"],
    "location": "New York, United States",
    "country": "us",
    "language": "en",
    "maxItems": 50,
    "jobType": "fulltime",
    "datePosted": "pastWeek",
    "remote": false
}
```

### Output example

```json
{
    "id": "go-rRRkq2ZVLnG404rgAAAAAA==",
    "query": "software engineer",
    "title": "Embedded Software Engineer",
    "company": {
        "name": "ALTEN",
        "logo": "https://encrypted-tbn0.gstatic.com/images?q=…"
    },
    "location": "New York, NY",
    "source": "Indeed",
    "postedAt": "4 days ago",
    "postedDate": "2026-06-11",
    "employmentType": "Full-time",
    "salary": null,
    "remote": false,
    "description": "Company Description ALTEN is a global engineering and technology consultancy…",
    "applyOptions": [
        { "title": "Apply directly on Indeed", "link": "https://www.indeed.com/viewjob?jk=…" }
    ]
}
```

### Input reference

| Field | Type | Description |
|---|---|---|
| `queries` | array | Job titles or skills to search for. Each is searched on its own. **Required.** |
| `location` | string | City, region, or country to search in. |
| `country` | string | Country/region to search (ISO-2). Set it to match your Location. Default `us`. |
| `language` | string | 2-letter language code for the results. Default `en`. |
| `maxItems` | integer | Total jobs to return across all queries. `0` = no limit. Default `50`. |
| `jobType` | string | One of `fulltime`, `parttime`, `internship`, `contract`. |
| `datePosted` | string | `any`, `past24h`, `past3Days`, `pastWeek`, or `pastMonth`. Default `any`. |
| `remote` | boolean | Return only remote / work-from-home jobs. Default `false`. |

### Why scrape Google jobs?

- **Job-market research** — track demand for roles, skills, and titles across regions.
- **Aggregation** — Google Jobs pools postings from many boards, so one search spans LinkedIn, Indeed, and more.
- **Recruiting & sourcing** — monitor who's hiring and where.
- **Salary benchmarking** — gather pay ranges where they're disclosed.

### Pricing

This Actor uses **pay-per-event** pricing: a small fee when a run starts, plus a fee per job delivered. You only pay for the listings you actually receive — set *Maximum jobs* to control your spend.

### Notes

- Runs through Apify Proxy automatically for reliable scraping — no proxy setup needed on your end.
- Uses **public** Google job results — the same data anyone can see. It does not log in or access private data.
- Job coverage depends on what Google shows for each search and region; some regions (e.g. the EU) don't surface job results.
- Make sure your use of the data complies with Google's terms and applicable laws.

# Actor input Schema

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

Job titles, skills, or roles to search for — exactly what you'd type into Google's job search box (e.g. <code>software engineer</code>, <code>registered nurse</code>, <code>product manager</code>). Each query is searched on its own.

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

City, region, or country to search in (e.g. <code>New York</code>, <code>London</code>, <code>Remote</code>). Appended to each query as "… near \<location>". Leave empty to let Google decide from the country.

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

Which country/region to search from. Set this to match your Location. <b>Note:</b> Google does not surface job results in some regions, including the EU.

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

2-letter language code for the results (e.g. <code>en</code>, <code>fr</code>, <code>es</code>).

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

How many job listings to return in total (across all queries). Use <code>0</code> for no limit.

## `jobType` (type: `string`):

Restrict results to a single employment type. Leave empty to include all types.

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

Only return jobs posted within this time window.

## `remote` (type: `boolean`):

Only return remote / work-from-home jobs.

## Actor input object example

```json
{
  "queries": [
    "software engineer"
  ],
  "location": "New York, United States",
  "country": "us",
  "language": "en",
  "maxItems": 25,
  "datePosted": "any",
  "remote": false
}
```

# Actor output Schema

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

One row per job listing.

# 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, United States",
    "country": "us"
};

// Run the Actor and wait for it to finish
const run = await client.actor("vero-api/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, United States",
    "country": "us",
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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, United States",
  "country": "us"
}' |
apify call vero-api/google-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=vero-api/google-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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