# Google Jobs API - Scrape Google for Jobs Results (`nabeelbaghoor/google-jobs-api`) Actor

Search Google Jobs and export structured listings - job title, company, location, salary, schedule, posting date, description and direct apply links. Filter by keyword, location, country, radius and remote. Pay per result. Bring your own API key.

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

## Pricing

$10.00 / 1,000 job results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 API - scrape Google for Jobs results

**Google Jobs API** turns any Google Jobs search into a clean, structured dataset. Enter a query and location, and get back every listing Google surfaces - job title, company, location, salary, schedule type, posting date, full description and direct apply links - ready to export as JSON, CSV or Excel.

Bring your own API key (get one free from the underlying provider, SerpApi) and pay only for the results you keep.

### Why use this actor?

- **Real Google Jobs coverage** - the same aggregated listings Google shows searchers, pulled from LinkedIn, Indeed, company career pages and hundreds of other sources in one place.
- **Structured output** - title, company, location, via/source, salary, schedule type, work-from-home flag, posting date, full description and apply links, parsed into flat columns.
- **Precise filters** - keyword query, location, country, language, search radius and remote-only.
- **Pay per result** - you are charged only for the jobs actually returned, up to 1,000 per run.
- **No proxies, no blocks** - data comes through a stable API, so runs are fast and reliable.

### Use cases

- **Job boards and aggregators** - keep listings fresh with real Google Jobs results.
- **Recruiting and sourcing** - see who is hiring for which roles, where, and at what pay.
- **Market and salary research** - track demand and compensation by role, city or country.
- **Lead generation** - a company that is hiring is a company that is buying.
- **Job alert automations** - schedule daily runs and push new matches to Slack, email or your ATS.

### Input

Configure everything from the visual editor - every filter is a proper field, no code needed. Example JSON input:

```json
{
  "query": "software engineer",
  "location": "Austin, United States",
  "country": "us",
  "remoteOnly": false,
  "maxResults": 100,
  "apiKey": "YOUR_API_KEY"
}
````

### Output

One clean JSON object per job:

```json
{
  "job_title": "Senior Software Engineer",
  "company_name": "Acme Corp",
  "location": "Austin, TX",
  "via": "via LinkedIn",
  "posted_at": "2 days ago",
  "schedule_type": "Full-time",
  "work_from_home": true,
  "salary": "$150K-$210K a year",
  "apply_link": "https://www.linkedin.com/jobs/view/...",
  "share_link": "https://www.google.com/search?...",
  "description": "We are looking for a Senior Software Engineer...",
  "job_id": "eyJqb2JfdGl0bGUi..."
}
```

### Do I need an API key?

Yes. This actor calls the Google Jobs search API on your behalf, which requires your own API key. Create a free key at the provider (SerpApi), paste it into the **API key** field, and run. Your key is stored securely and never logged.

### Pay per result

You pay only for the job listings the actor actually returns - no subscriptions, no minimums. Set **Maximum results** to cap each run's spend exactly.

### FAQ

#### What is the Google Jobs API?

The Google Jobs API returns the job listings shown in Google's Jobs search experience as structured data. Instead of scraping the Google results page yourself, this actor queries a stable jobs search endpoint and hands you parsed fields - title, company, location, salary, schedule, posting date, description and apply links - for every listing that matches your query.

#### Where does the data come from?

From Google Jobs, which aggregates postings from LinkedIn, Indeed, ZipRecruiter, company career pages and hundreds of other job sites. You get the same results a person would see searching Google for that role and location, deduplicated into one feed.

#### What filters can I use?

Keyword query, location, country (gl), language (hl), a soft search radius in kilometers, and a remote / work-from-home toggle. An advanced field also accepts Google's raw filter token for date-posted and employment-type refinements.

#### How many results can I get per run?

Up to 1,000 jobs per run, collected roughly 10 per page. For larger pulls, split the search by location or role, or run on a schedule and collect new listings each day.

#### How much does it cost?

Pricing is pay-per-result: a small fixed amount for every job returned, plus standard Apify platform usage, plus your own API-provider usage (billed by that provider against your key). A run that returns nothing costs almost nothing.

#### Is salary always included?

No. Google exposes salary and posting date only when the source listing provides them, so those fields can be empty for some jobs. All available fields are passed through as-is.

#### Can I run this on a schedule?

Yes. Use Apify Schedules to run it hourly or daily and connect the dataset to Zapier, Make, n8n, webhooks or the API to pipe new jobs anywhere.

#### Is this legal?

The actor returns publicly available job listings shown in Google's Jobs search, retrieved through a licensed search API. No login-walled or personal data is collected.

### Keyword map

google jobs api, google jobs scraper, scrape google jobs, google for jobs api, job search api, job listings api, jobs data api, google jobs data, job postings scraper, recruiting data api, salary data api, remote jobs api.

### Support and feedback

Found an issue or missing a filter? Open an issue in the **Issues** tab - it is monitored daily.

# Actor input Schema

## `query` (type: `string`):

What to search for on Google Jobs, e.g. `software engineer`, `barista new york`, `remote data analyst`. Same syntax as the Google Jobs search box.

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

Geographic origin of the search, e.g. `New York, United States`, `London, United Kingdom`. Leave empty to search without a location anchor.

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

Two-letter country code for the Google front end used to run the search.

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

Two-letter language code for the results.

## `radiusKm` (type: `integer`):

Soft radius in kilometers around the location. Leave empty for the default spread.

## `remoteOnly` (type: `boolean`):

Return only jobs Google tags as remote / work-from-home.

## `maxResults` (type: `integer`):

Stop after this many jobs (1-1,000). Results are collected ~10 per page. You are charged per result returned.

## `udsFilter` (type: `string`):

Optional raw Google filter token to apply refinements (date posted, employment type, etc.). Obtain it from the `filters` block of a previous run's raw output. Leave empty if unsure.

## `googleDomain` (type: `string`):

Google domain to query, e.g. `google.com`, `google.co.uk`. Defaults to google.com.

## `apiKey` (type: `string`):

Your own API key for the Google Jobs search provider (SerpApi). Required - the actor calls the API on your behalf using this key. Get one free at serpapi.com. Stored securely and never logged.

## Actor input object example

```json
{
  "query": "software engineer",
  "country": "us",
  "language": "en",
  "remoteOnly": false,
  "maxResults": 100,
  "googleDomain": "google.com"
}
```

# 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 = {
    "query": "software engineer",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/google-jobs-api").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 = {
    "query": "software engineer",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/google-jobs-api").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 '{
  "query": "software engineer",
  "maxResults": 100
}' |
apify call nabeelbaghoor/google-jobs-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Jobs API - Scrape Google for Jobs Results",
        "description": "Search Google Jobs and export structured listings - job title, company, location, salary, schedule, posting date, description and direct apply links. Filter by keyword, location, country, radius and remote. Pay per result. Bring your own API key.",
        "version": "0.1",
        "x-build-id": "q9f5R4mD5qLCUbQ9D"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nabeelbaghoor~google-jobs-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nabeelbaghoor-google-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nabeelbaghoor~google-jobs-api/runs": {
            "post": {
                "operationId": "runs-sync-nabeelbaghoor-google-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nabeelbaghoor~google-jobs-api/run-sync": {
            "post": {
                "operationId": "run-sync-nabeelbaghoor-google-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Search query",
                        "type": "string",
                        "description": "What to search for on Google Jobs, e.g. `software engineer`, `barista new york`, `remote data analyst`. Same syntax as the Google Jobs search box."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Geographic origin of the search, e.g. `New York, United States`, `London, United Kingdom`. Leave empty to search without a location anchor."
                    },
                    "country": {
                        "title": "Country (gl)",
                        "enum": [
                            "us",
                            "gb",
                            "ca",
                            "au",
                            "in",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "nl",
                            "br",
                            "mx",
                            "sg",
                            "ae",
                            "za",
                            "jp"
                        ],
                        "type": "string",
                        "description": "Two-letter country code for the Google front end used to run the search.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language (hl)",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "it",
                            "nl",
                            "pt",
                            "ja"
                        ],
                        "type": "string",
                        "description": "Two-letter language code for the results.",
                        "default": "en"
                    },
                    "radiusKm": {
                        "title": "Search radius (km)",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Soft radius in kilometers around the location. Leave empty for the default spread."
                    },
                    "remoteOnly": {
                        "title": "Remote / work-from-home only",
                        "type": "boolean",
                        "description": "Return only jobs Google tags as remote / work-from-home.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Stop after this many jobs (1-1,000). Results are collected ~10 per page. You are charged per result returned."
                    },
                    "udsFilter": {
                        "title": "Advanced: Google filter token (uds)",
                        "type": "string",
                        "description": "Optional raw Google filter token to apply refinements (date posted, employment type, etc.). Obtain it from the `filters` block of a previous run's raw output. Leave empty if unsure."
                    },
                    "googleDomain": {
                        "title": "Google domain",
                        "type": "string",
                        "description": "Google domain to query, e.g. `google.com`, `google.co.uk`. Defaults to google.com.",
                        "default": "google.com"
                    },
                    "apiKey": {
                        "title": "API key",
                        "type": "string",
                        "description": "Your own API key for the Google Jobs search provider (SerpApi). Required - the actor calls the API on your behalf using this key. Get one free at serpapi.com. Stored securely and never logged."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
