# Google Jobs Search: Bulk Job Listings by Query & Place (`ensorcelling_melilot/google-jobs`) Actor

Search Google Jobs for many job titles and places in one run. Each job has title, company, location, salary when listed, contract type, source site, apply link and posting time. Filter by recency, salary and contract type; filtered jobs are free. $1 per 1,000 jobs, charged per job saved.

- **URL**: https://apify.com/ensorcelling_melilot/google-jobs.md
- **Developed by:** [ensorcelling \_melilot](https://apify.com/ensorcelling_melilot) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.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 Search: Bulk Job Listings by Query & Place

Search Google Jobs for many job titles and places in one run, and get clean rows you can sort, filter and export. No scraping on your side, no blocked runs, no proxies to pay for.

- **What:** job title, company, location, salary or hourly rate when listed, contract type, which site lists it, the apply link and when it was posted
- **Where:** any country or city that Google Jobs covers; every search runs in every location you add
- **Filters:** posted within N days, only jobs with a salary, contract type. Rows that fail a filter are never saved or charged
- **Scale:** up to 50 search-and-place combinations per run, up to 100 jobs for each, up to 5,000 jobs in total

Use it for job boards and newsletters, salary and hiring-trend research, recruiter lead lists (find who is hiring), and market tracking. Pair it with *Website Contact Extractor* to turn company names into outreach lists, or with *Career Site Jobs* to read jobs straight from company career pages.

### Input

| Field | What to put |
|---|---|
| **Job searches** | One per line, as you would type it into Google Jobs: `python developer`, `registered nurse`, `remote data analyst` |
| **Locations** | One per line: `United States`, `Germany`, or `Austin,Texas,United States`. Empty means United States |
| **Jobs per search** | 10 to 100, in steps of 10 |
| **Maximum jobs** | Your cap, and your spending limit |
| **Posted within (days)** | Only recent jobs. 0 keeps everything |
| **Only jobs with a listed salary** | Skips jobs without pay information |
| **Contract type contains** | `Full-time`, `Part-time`, `Contractor`, `Internship` |

### Output

One row per job:

| title | company | location | salary | contractType | source | postedAgo |
|---|---|---|---|---|---|---|
| Senior Full Stack Engineer – Python / React / AWS | The Planet Group | United States | 85–95 an hour | Contractor | LinkedIn | 10 hours ago |

Every row also has `applyUrl`, `companyUrl`, `postedAt` (ISO date), `query`, `searchLocation` and a `jobId`. Download as CSV, Excel or JSON, or send it to Google Sheets with the *Google Sheets Import & Export (Reliable)* Actor as an integration.

### Pricing

Pay per job saved. Set *Maximum jobs* or the run's *Maximum cost per run* and the run stops there. Jobs found by two searches are saved once. Searches that fail or do not finish are not charged.

### Good to know

- **Results are the listing, not the full job description.** You get the apply link to the site that lists the job. Descriptions and requirements are not included.
- **Runs take from seconds to a few minutes.** The jobs database runs searches in a queue. A run waits up to 12 minutes; searches that are still waiting then are skipped and not charged, so run them again.
- **Salary is only there when the listing shows it.**
- **Google decides the order and the mix of sources.** Results are what a person searching Google Jobs in that place would see, from LinkedIn, Indeed, company sites and others.
- **A location the database does not know is reported, not guessed.** Use English names; if a place is rejected, try the country or `City,Region,Country`.

# Actor input Schema

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

What to search for, one per line, exactly as you would type it into Google Jobs: python developer, registered nurse, warehouse supervisor, remote data analyst. Add words like remote or full time to the search itself.

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

Where to search, one per line, in English. A country (United States, Germany), or a place written as City,Region,Country, for example Austin,Texas,United States. Every search is run in every location. Leave empty for the United States.

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

Two-letter language of the results, for example en, de, fr, es.

## `maxJobsPerSearch` (type: `integer`):

How many jobs to fetch for each search and location, in steps of 10, up to 100.

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

Stop after this many jobs saved in total. You are charged per job saved, so this is also your spending limit.

## `postedWithinDays` (type: `integer`):

Keep only jobs posted in the last N days. Jobs that are filtered out are not saved and not charged. 0 keeps everything.

## `onlyWithSalary` (type: `boolean`):

Keep only jobs that show a salary or hourly rate. Filtered jobs are not charged.

## `contractType` (type: `string`):

Optional. Keep only jobs whose contract type contains this word, for example Full-time, Part-time, Contractor or Internship. Filtered jobs are not charged.

## Actor input object example

```json
{
  "queries": [
    "python developer"
  ],
  "locations": [
    "United States"
  ],
  "languageCode": "en",
  "maxJobsPerSearch": 50,
  "maxResults": 100,
  "postedWithinDays": 0,
  "onlyWithSalary": false
}
```

# Actor output Schema

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

One row per job: title, company, location, salary, contract type, source, apply link and posting time.

## `summary` (type: `string`):

How many searches ran, jobs found and saved, searches that failed or did not finish, and whether the run stopped at your cost limit.

# 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": [
        "python developer"
    ],
    "locations": [
        "United States"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ensorcelling_melilot/google-jobs").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": ["python developer"],
    "locations": ["United States"],
}

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

```

## MCP server setup

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

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/7EAPocCZnhd5xUfzE/builds/TD6cIWhEHzeoACL6h/openapi.json
