# Google Jobs

Search Google Jobs to retrieve job listings in JSON format.

> **Note:** Currently only supports jobs in North America.

> **Known issue (2026-08-16):** This endpoint currently returns an empty `jobs` array with `"error": "Could not get job_list_div"` for every query. Google Jobs now requires JavaScript to render its results, which the no-JS proxy fleet cannot execute. Tracked as an open issue pending a JS-capable rendering path.

## Endpoint

```
GET /v1/job/search/{query}
```

## Description

The Google Jobs Search endpoint allows you to search for job listings on Google. The query parameter should be a URL-encoded query string containing the position title and optionally the location.

For reference on Google search parameters, check out our [Google Search Operators guide](/docs/guides/search-operators).

## Authentication

All requests require authentication using the `X-Api-Key` header. See the [Authentication guide](/docs/guides/authentication) for more details.

## Path Parameters

### `query` (required)

**Type:** `string`

Position Title and Location (optional). The query should be URL-encoded.

**Examples:**
- `q=nurse+practitioner`
- `q=data+analyst+work+from+home`

## Request Example

### Using cURL

```bash
curl --request GET \
  --url 'https://api.serply.io/v1/job/search/q=nurse+practitioner' \
  --header 'X-Api-Key: YOUR_API_KEY'
```

### Using JavaScript/Node.js

```javascript
const response = await fetch('https://api.serply.io/v1/job/search/q=nurse+practitioner', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY'
  }
});
const data = await response.json();
console.log(data);
```

### Using Python

```python
import requests

headers = {
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.get(
    'https://api.serply.io/v1/job/search/q=nurse+practitioner',
    headers=headers
)
data = response.json()
print(data)
```

## Response

The API returns a JSON object containing an array of job listings.

### Response Structure

```json
{
  "jobs": [
    {
      "highlights": "Job highlights...",
      "link": "https://example.com/job/123",
      "position": "Software Engineer",
      "description": {
        "employer": "Company Name",
        "perks": ["Health Insurance", "401k"],
        "is_remote": false,
        "is_hybrid": true
      },
      "logo": {
        "location": "https://example.com/logo.png",
        "source": "company"
      },
      "metadata": {
        "data_is_nearby_query": true,
        "data_query_location": "San Francisco, CA",
        "data_num_results_in_fetch": 10
      }
    }
  ],
  "ts": 1234567890,
  "device_region": "US",
  "device_type": "desktop"
}
```

### Response Fields

- **`jobs`** (array): An array of job listing objects
  - **`highlights`** (string): Key highlights or summary of the job
  - **`link`** (string): The URL to apply for the job
  - **`position`** (string): The job title/position name
  - **`description`** (object): Detailed job description
    - **`employer`** (string): The name of the employer/company
    - **`perks`** (array[string]): List of job perks/benefits
    - **`is_remote`** (boolean): Whether the job is fully remote
    - **`is_hybrid`** (boolean): Whether the job is hybrid (remote + on-site)
  - **`logo`** (object): Company logo information
    - **`location`** (string): URL to the company logo
    - **`source`** (string): Source of the logo
  - **`metadata`** (object): Additional metadata about the search
    - **`data_is_nearby_query`** (boolean): Whether the query was location-based
    - **`data_query_location`** (string): The location used in the query
    - **`data_num_results_in_fetch`** (integer): Number of results in this fetch
- **`ts`** (integer): Timestamp of the search
- **`device_region`** (string): The device region used for the search
- **`device_type`** (string): The device type used for the search

### Example Response

```json
{
  "jobs": [
    {
      "highlights": "Full-time · Mid level · $80,000 - $120,000 a year",
      "link": "https://www.example.com/jobs/12345",
      "position": "Nurse Practitioner",
      "description": {
        "employer": "Healthcare System",
        "perks": ["Health Insurance", "401k", "Paid Time Off"],
        "is_remote": false,
        "is_hybrid": false
      },
      "logo": {
        "location": "https://example.com/logos/healthcare.png",
        "source": "company"
      },
      "metadata": {
        "data_is_nearby_query": true,
        "data_query_location": "New York, NY",
        "data_num_results_in_fetch": 25
      }
    }
  ],
  "ts": 1234567890,
  "device_region": "US",
  "device_type": "desktop"
}
```

## Status Codes

- **200 OK** - Successful response
- **404 Not Found** - The requested resource was not found
- **422 Unprocessable Entity** - The request was well-formed but contains semantic errors
- **429 Too Many Requests** - Rate limit exceeded

## Error Responses

See the [Errors guide](/docs/guides/errors) for information on error response formats.
