# Indeed Job Search via OpenWeb Ninja

> Indeed Job Search via 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).

Search Indeed job postings by keyword, location, salary, employment type, and other filters, returning detailed job objects.

## Facts

- Endpoint: GET https://agents.openwebninja.com/realtime-indeed-data/search?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-indeed-job-search-via-openweb-ninja-e6a05511
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_wGpWtHWRQyZjbTC3fQQh-

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-indeed-job-search-via-openweb-ninja-e6a05511
```

Example prompt: Search Indeed for full-time software engineer jobs in Austin, TX posted in the last 3 days with a minimum salary of $120,000 — show me the first 2 pages of results.

## When to prefer this

Choose this endpoint when you need real-time job listings sourced directly from Indeed, especially when you need rich metadata like salary ranges, employer reviews, Indeed-specific attributes (urgency, hybrid, experience levels), or need to search non-US markets. Prefer this over LinkedIn or Glassdoor endpoints when Indeed's coverage or job-detail schema is what you need. It mirrors the JSearch /search envelope, making it a drop-in for workflows already using that format.

## Known failure modes

- Missing required 'query' parameter returns 400 error
- Multiple values for 'query' parameter returns 400 error
- Providing 'radius' without 'location' returns 400 error
- Unknown field name in 'fields' projection returns 400 error
- Page number or num_pages out of range is clamped rather than errored
- Response exceeding 6 MB is truncated and 'parameters.response_truncated' is set
- Invalid country code may return empty results or an error
- Payment not authorized returns 402

## How this service works

Search Indeed for jobs. Returns a flat array of job objects - the same envelope
JSearch `/search` uses.


## Output

A flat array of detailed job objects, each containing job ID, title, employer name, employer logo, website, apply link, full description, HTML description, location details (city, state, country, lat/lng, postal code), salary info (min, max, period, string), employment type, remote/hybrid flags, posting timestamps, job highlights, Indeed-specific metadata (industry, experience levels, urgency, high-volume hiring), employer reviews, and an ONet SOC code. Also includes pagination metadata and a flag if the response was truncated.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "query"
 ],
 "properties": {
  "page": {
   "type": "integer",
   "default": 1,
   "maximum": 50,
   "minimum": 1,
   "description": "1-based page number. 10 jobs per page. Values above 50 are clamped to 50."
  },
  "query": {
   "type": "string",
   "description": "Free-text search query, e.g. `software engineer`. Exactly one query per request;\na multi-valued `query` returns a 400 error.\n"
  },
  "fields": {
   "type": "string",
   "description": "Comma-delimited projection. Any key of the job object is valid; `job_id` and\n`job_title` are always included. An unknown field is a 400.\nAlso the mechanism for pulling a deep result set in one call - see `num_pages`.\n"
  },
  "radius": {
   "type": "number",
   "maximum": 10000,
   "minimum": 0,
   "description": "Search radius around `location`, in **kilometres**. Passed through to Indeed\nexactly, so 2 returns jobs within 2 km. Values above 10000 are clamped.\n**Requires `location`** - Indeed applies a radius only around a location, so\nsending it alone returns a 400 error.\n"
  },
  "country": {
   "type": "string",
   "default": "us",
   "description": "ISO 3166-1 alpha-2 market code. Sent to Indeed as a header, so any market is\nreachable regardless of the proxy exit country (verified US, GB, DE, CA, IN, AU).\n"
  },
  "language": {
   "type": "string",
   "description": "ISO 639-1 language. Defaults to the primary language of `country`."
  },
  "location": {
   "type": "string",
   "description": "Where to search, in Indeed's own format, e.g. `New York, NY`, `London`,\n`Berlin`. Omit to search the whole market.\n"
  },
  "num_pages": {
   "type": "integer",
   "default": 1,
   "maximum": 50,
   "minimum": 1,
   "description": "How many pages to return in one response. A full job runs about 12 KB,\nso beyond roughly 450 jobs the response is trimmed to fit the 6 MB limit and\n`parameters.response_truncated` is set. You are billed only for pages returned. Pass\n`fields` to keep a deep window intact.\n"
  },
  "max_salary": {
   "type": "number",
   "minimum": 0,
   "description": "Maximum **annual** salary. Same semantics as `min_salary`."
  },
  "min_salary": {
   "type": "number",
   "minimum": 0,
   "description": "Minimum **annual** salary. Applied to the salary the employer actually stated,\nannualised from `job_salary_period`. Jobs with no stated salary are excluded,\nbecause they cannot be asserted to qualify.\n"
  },
  "date_posted": {
   "enum": [
    "all",
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "status",
  "request_id",
  "parameters",
  "data"
 ],
 "properties": {
  "data": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "job_id",
     "job_title",
     "employer_name",
     "employer_logo",
     "employer_website",
     "job_publisher",
     "job_employment_type",
     "job_employment_types",
     "job_apply_link",
     "job_apply_is_direct",
     "apply_options",
     "job_description",
     "job_is_remote",
     "job_posted_at",
     "job_posted_at_timestamp",
     "job_posted_at_datetime_utc",
     "job_location",
     "job_city",
     "job_state",
     "job_country",
     "job_latitude",
     "job_longitude",
     "job_benefits",
     "job_benefits_strings",
     "job_google_link",
     "job_salary",
     "job_salary_string",
     "job_min_salary",
     "job_max_salary",
     "job_salary_period",
     "job_highlights",
     "job_onet_soc",
     "job_onet_job_zone",
     "employer_reviews",
     "job_uid",
     "job_indeed_ref_num",
     "job_indeed_normalized_title",
     "job_indeed_source_employer_name",
     "job_indeed_employer_key",
     "job_indeed_company_page_url",
     "job_indeed_employer_header_image",
     "job_indeed_employer_industry",
     "job_indeed_occupations",
     "job_indeed_attributes",
     "job_indeed_experience_levels",
     "job_indeed_is_hybrid",
     "job_indeed_is_urgent_hire",
     "job_indeed_is_high_volume_hiring",
     "job_indeed_expired",
     "job_indeed_language",
     "job_indeed_postal_code",
     "job_indeed_street_address",
     "job_published_at_timestamp",
     "job_published_at_datetime_utc",
     "job_description_html",
     "job_position"
    ],
    "properties": {
     "job_id": {
      "type": "string",
      "example": "aW5kZWVkOjNkNjM4ZGI0MjBiZmM4MmY",
      "nullable": true,
      "description": "Stable, opaque job identifier: base64url(\"indeed:\" + the Indeed job key). Pass this to /job-details. Always present."
     },
     "job_uid": {
      "type": "string",
      "example": "3d638db420bfc82f",
      "nullable": true,
      "description": "The raw 16-hex Indeed job key that job_id encodes. Stable and valid indefinitely."
     },
     "job_city": {
      "type": "string",
      "example": "New York",
      "nullable": true,
      "description": "City. 100% coverage."
     },
     "job_state": {
      "type": "string",
      "example": "NY",
      "nullable": true,
      "description": "State / province / admin-1 cod
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/agents-openwebninja-com-indeed-job-search-via-openweb-ninja-e6a05511/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)
