# Google Jobs Fresh: Job Listings Scraper (`vhsgreed/google-jobs-fresh`) Actor

Scrape job listings from Google's Jobs vertical for US-market queries. Returns job title, company, location, posted date, salary snippet, employment type and apply links.

- **URL**: https://apify.com/vhsgreed/google-jobs-fresh.md
- **Developed by:** [Karl Sundström](https://apify.com/vhsgreed) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.52 / 1,000 job scrapeds

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 Fresh — Job Listings Scraper

> Independent tool, not affiliated with Google.

Scrape **job listings straight from Google's Jobs search results** — aggregated postings from thousands of company career sites and job boards. Returns title, company, location, posted date, salary snippet, description and apply URLs. Headful Playwright run on Apify infrastructure, with proxy configuration support. ⚠️ The Jobs vertical is currently US-market — use `country: us` and US locations.

### Why Google Jobs Fresh?

- 🌐 **One query, every board** — Google aggregates postings from company sites and job boards, so you cover them all in one run.
- 🏷️ **Rich snippets** — salary snippets and posted dates where Google shows them.
- 🔗 **Apply URLs included** — route candidates straight to the source posting.
- 🕰️ **Fresh by design** — Google's Jobs vertical surfaces recent postings first.

### Use cases

US job market monitoring · salary benchmarking from snippet data · candidate sourcing pipelines · competitor hiring tracking

### What data you get?

| 🏷️ Field | Description |
| --- | --- |
| 💼 title | Job title |
| 🏢 company | Hiring company |
| 📍 location | Job location |
| 📅 postedDate | Posted date (where shown) |
| 💰 salarySnippet | Salary snippet (where shown) |
| 📄 description | Job description text |
| 🔗 applyUrl | Apply/source URL |

### How to use

1. Add the actor to your Apify account and click **Run**.
2. Enter `q` (e.g. `registered nurse`) and a US `location` (e.g. `Houston, TX`).
3. Raise `pages` for more listings (each page ≈ 10 listings, max 5).
4. Add `proxyConfiguration` — Google serves CAPTCHA to most datacenter IPs, so residential or UNBLOCKER proxy is strongly recommended.
5. Export results as JSON, CSV or Excel.

### Input

```json
{
  "q": "registered nurse",
  "location": "Houston, TX",
  "language": "en",
  "country": "us",
  "pages": 2
}
```

| Field | Type | Description | Default |
| --- | --- | --- | --- |
| `q` | string | Job search query | — |
| `location` | string | Appended to the query (e.g. `Houston, TX`). Jobs vertical is US-market | — |
| `language` | string | Interface language code (`en`, `sv`, `de`, …) | en |
| `country` | string | Country code for results | us |
| `pages` | integer | Batches of ~10 listings to load | 1 (max 5) |
| `proxyConfiguration` | object | Residential/UNBLOCKER proxy strongly recommended | — |

### Output

```json
{
  "title": "Registered Nurse — ICU",
  "company": "Example Health",
  "location": "Houston, TX",
  "postedDate": "3 days ago",
  "salarySnippet": "$75,000–$95,000 a year",
  "description": "Example Health is seeking…",
  "applyUrl": "https://careers.example.com/job/123"
}
```

Salary and posted dates appear only where Google displays them; run the actor once on a sample query to confirm the latest output shape.

### Support

Questions or missing fields? Open an issue on the actor page or contact the developer via Apify.

# Actor input Schema

## `q` (type: `string`):

Job search query, e.g. "registered nurse" or "software engineer".

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

Appended to the query, e.g. "Houston, TX". IMPORTANT: Google's Jobs vertical is currently US-market only; non-US cities return no results.

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

Interface language code, e.g. en, sv, de. Default: en.

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

Country code for results, e.g. us. Default and recommended: us (the Jobs vertical is US-only).

## `pages` (type: `integer`):

How many batches of ~10 listings to load (1 = ~10 listings). Max 5.

## `proxyConfiguration` (type: `object`):

Residential or UNBLOCKER proxy is strongly recommended: Google serves CAPTCHA (/sorry/) to most datacenter IPs. Apify RESIDENTIAL costs roughly $8/GB; one page render plus detail clicks is ~2–5 MB, i.e. ~$0.00002–0.00004 per page — negligible against the $0.005/listing price.

## Actor input object example

```json
{
  "q": "registered nurse",
  "location": "Houston, TX",
  "language": "en",
  "country": "us",
  "pages": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset of job listings. Fields: title, company, location, postedAt, postedAtIso, salarySnippet, employment, via, jobUrl, applyUrl, applySource, applyOptions, descriptionSnippet, sourceQuery.

## `runStats` (type: `string`):

Key-value store entry OUTPUT_STATS: query, counts, status (ok | noMatches | noUi | botChallenge) and proxy usage.

## `runView` (type: `string`):

Inspect this run, its logs and storages in Apify Console.

# 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 = {
    "q": "registered nurse",
    "location": "Houston, TX",
    "country": "us",
    "pages": 1,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vhsgreed/google-jobs-fresh").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 = {
    "q": "registered nurse",
    "location": "Houston, TX",
    "country": "us",
    "pages": 1,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vhsgreed/google-jobs-fresh").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 '{
  "q": "registered nurse",
  "location": "Houston, TX",
  "country": "us",
  "pages": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vhsgreed/google-jobs-fresh --silent --output-dataset

```

## MCP server setup

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

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/NXlrICRPQp45HZ1JU/builds/gsvx5fmyRTgcX1aac/openapi.json
