# Job Search via Google for Jobs (OpenWeb Ninja)

> Job Search via Google for Jobs (OpenWeb Ninja) is a paid API for AI agents from agents.openwebninja.com, paid per call via MPP, price unknown, status unknown (last checked 2026-10-14).

Searches for job postings across all major public job sites aggregated by Google for Jobs, returning structured listings with filtering support and cursor-based pagination.

## Facts

- Endpoint: GET https://agents.openwebninja.com/jsearch/search-v2?utm_source=zero.xyz
- Price: price unknown
- Payment: MPP
- Status: unknown
- Last checked: 2026-10-14
- Activations on Zero: 0
- Provider: agents.openwebninja.com
- Website: https://agents.openwebninja.com
- Canonical page: https://www.zero.xyz/c/agents-openwebninja-com-job-search-via-google-for-jobs-openweb-ninja-b6196355
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_GNpX92G_u6DHKbNUlaQ6V

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability agents-openwebninja-com-job-search-via-google-for-jobs-openweb-ninja-b6196355
```

Example prompt: Can you search Google for Jobs for senior backend engineer roles in Austin, Texas — show me results from the US, filter to full-time positions, and include salary info where available?

## When to prefer this

Choose this endpoint when you need broad, real-time job search across all major job boards (LinkedIn, Indeed, Glassdoor, ZipRecruiter, Monster, etc.) aggregated in one call via Google for Jobs. Prefer it over single-board scrapers when coverage breadth matters, or when you need extensive filtering (employment type, date posted, radius, country, language) with cursor-based pagination for large result sets.

## Known failure modes

- Missing required 'query' parameter returns a 400 error
- Unsupported country code may return no results
- Language not supported by specified country returns empty results
- Cursor from a previous session may be expired or invalid
- Overly restrictive filters (date posted + employment type + radius) may yield zero results
- Rate limiting or credit exhaustion returns a 402 or 429 response

## How this service works

Search for jobs posted on any public job site across the web on the largest job aggregate in the world (Google for Jobs).  
  Extensive filtering support and most options available on Google for Jobs.  
  
  Use cursor-based pagination: pass `data.cursor` from the previous response as the `cursor` query parameter on the next request.

## Output

Returns a structured JSON object containing an array of job postings, each with job ID, title, employer name, publisher, apply link(s), location (city, state, country, lat/lon), salary description, benefits list, job description, employment type, date posted, O*NET SOC code, and employer logo URL. Also includes a cursor value for fetching the next page of results.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "query"
 ],
 "properties": {
  "query": {
   "type": "string",
   "example": "developer jobs in chicago",
   "description": "Free-form jobs search query.  \n  It is highly recommended to include job title and location as part of the query, see query examples below.  \n  \n  **Examples:**  \n  `web development jobs in chicago`  \n  `marketing manager in new york via linkedin`  "
  },
  "cursor": {
   "type": "string",
   "description": "Cursor for paginating results.  \n  Pass the value of `data.cursor` returned by the previous response to fetch the next page.  \n  Leave empty (or omit) to start from the first page."
  },
  "fields": {
   "type": "string",
   "description": "A comma separated list of job fields to include in the response (field projection).  \n  By default all fields are returned."
  },
  "radius": {
   "type": "number",
   "description": "Return jobs within a certain distance from location as specified as part of the query (in km).  \n  This internally sent as the Google \"lrad\" parameter and although it might affect the results, it is not strictly followed by Google for Jobs."
  },
  "country": {
   "type": "string",
   "default": "us",
   "description": "Country code of the country from which to return job postings.  \n  Please note that this parameter must be set in order to get jobs in a specific country, for example, to query for software developer jobs in Berlin, \none should add *country=de* to the request - *e.g. query=software+developers+in +berlin&country=de*.  \n  For the list of supported values see *https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2"
  },
  "language": {
   "type": "string",
   "description": "Language code in which to return job postings. Leave empty to use the primary language in the specified country (country parameter).\n  In case a language not supported by the specified country is used, it is likely that no results will be returned.  \n  For the list of supported values see https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes"
  },
  "num_pages": {
   "type": "integer",
   "default": 1,
   "description": "Number of pages to return, starting from page.  \n\n  **Allowed values:** `1-20`  \n  \n   **Note**: Each page (containing up to 10 results) returned by the API consumes one request credit."
  },
  "date_posted": {
   "enum": [
    "all",
    "today",
    "3days",
    "week",
    "month"
   ],
   "type": "string",
   "default": "all",
   "description": "Find 
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "status",
  "request_id",
  "parameters",
  "data"
 ],
 "properties": {
  "data": {
   "type": "object",
   "required": [
    "jobs"
   ],
   "properties": {
    "jobs": {
     "type": "array",
     "items": {
      "type": "object",
      "required": [
       "job_id",
       "job_title",
       "employer_name",
       "job_publisher",
       "job_apply_link"
      ],
      "properties": {
       "job_id": {
        "type": "string",
        "description": "Unique identifier of the job posting. Use as input to /job-details."
       },
       "job_city": {
        "type": "string",
        "nullable": true,
        "description": "City where the job is located."
       },
       "job_state": {
        "type": "string",
        "nullable": true,
        "description": "State or province where the job is located."
       },
       "job_title": {
        "type": "string",
        "description": "Title of the job posting."
       },
       "job_salary": {
        "type": "string",
        "nullable": true,
        "description": "Salary description as published by the source (free-form)."
       },
       "job_country": {
        "type": "string",
        "nullable": true,
        "description": "ISO 3166-1 alpha-2 country code of the job location."
       },
       "job_benefits": {
        "type": "array",
        "items": {
         "type": "string"
        },
        "nullable": true,
        "description": "Normalized benefit codes detected in the listing (e.g. health_insurance, dental_coverage, paid_time_off, retirement_savings)."
       },
       "job_latitude": {
        "type": "number",
        "nullable": true,
        "description": "Latitude of the job location."
       },
       "job_location": {
        "type": "string",
        "nullable": true,
        "description": "Full location string (e.g. 'Chicago, IL')."
       },
       "job_onet_soc": {
        "type": "string",
        "nullable": true,
        "description": "O*NET SOC occupation code for the job."
       },
       "apply_options": {
        "type": "array",
        "items": {
         "type": "object",
         "required": [
          "apply_link",
          "publisher"
         ],
         "properties": {
          "is_direct": {
           "type": "boolean",
           "description": "True if the apply link goes directly to the employer's careers site."
          },
          "publisher": {
           "type": "string",
           "description
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/agents-openwebninja-com-job-search-via-google-for-jobs-openweb-ninja-b6196355/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from agents.openwebninja.com](https://www.zero.xyz/host/agents.openwebninja.com/llms.txt)
