{
  "openapi": "3.0.1",
  "info": {
    "title": "isolved Jobs API | Live Postings, Tenants & New Jobs",
    "description": "isolved and ApplicantPro job data without keys: live postings from any isolvedhire.com career site, tenant discovery across every hiring employer, and new-or-changed-posting detection. Titles, locations, employment type, timestamps, and Markdown/HTML/text descriptions. Pay per delivered row.",
    "version": "0.0",
    "x-build-id": "5Zt0CRVK71ux8DNmb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/johnvc~isolved-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-johnvc-isolved-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/johnvc~isolved-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-johnvc-isolved-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/johnvc~isolved-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-johnvc-isolved-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": {
          "tenants": {
            "title": "Tenants (slugs or URLs)",
            "type": "array",
            "description": "isolved tenant slugs or URLs, mixed freely: a bare slug (davidsonoil), a tenant URL (https://davidsonoil.isolvedhire.com), or a single job URL (https://davidsonoil.isolvedhire.com/jobs/1778327.html). A tenant slug is the subdomain before .isolvedhire.com. Leave empty together with startUrls to sweep tenants from the bundled directory instead.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Alternative to the tenants field for URL-shaped input; both lists are merged. Accepts the same tenant and single-job URL forms.",
            "items": {
              "type": "object"
            }
          },
          "outputMode": {
            "title": "What to return",
            "enum": [
              "jobs",
              "urlsOnly",
              "tenantsOnly"
            ],
            "type": "string",
            "description": "jobs returns full job records. urlsOnly returns the job index with change timestamps but no descriptions, the cheapest way to list everything. tenantsOnly returns one row per tenant from the discovery directory with a live job count.",
            "default": "jobs"
          },
          "discoveryQuery": {
            "title": "Discovery query",
            "type": "string",
            "description": "Case-insensitive text matched against tenant slugs and names in the bundled directory. Scopes tenantsOnly runs and empty-input sweeps. Leave empty to take the largest tenants first.",
            "default": ""
          },
          "verifyTenants": {
            "title": "Verify tenants live",
            "type": "boolean",
            "description": "tenantsOnly mode: fetch each candidate tenant's live sitemap before returning it, adding a current job count. Dead tenants are skipped and never billed. Turn off to list the directory snapshot without network checks.",
            "default": true
          },
          "titleKeywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Keep only jobs whose title contains any of these words, for example nurse, driver, manager. Filters run before billing, so filtered jobs cost nothing. Ignored in urlsOnly mode, which has no titles.",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location contains",
            "type": "array",
            "description": "Keep only jobs whose location contains any of these values, for example Remote, Charlotte, Texas.",
            "items": {
              "type": "string"
            }
          },
          "employmentType": {
            "title": "Employment type",
            "type": "array",
            "description": "Keep only jobs matching any of these employment types. Values are matched against schema.org codes: FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, OTHER. Plain wording like 'full time' is accepted too.",
            "items": {
              "type": "string"
            }
          },
          "hasSalary": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Keep only jobs whose posting carries a structured salary. Most isolved employers leave salary blank, so this filter is strict by design.",
            "default": false
          },
          "updatedAfter": {
            "title": "Updated after (change detection)",
            "type": "string",
            "description": "Keep only jobs changed on or after this cutoff. Accepts a relative window (24h, 7d, 2w) or an ISO date or datetime (2026-08-01 or 2026-08-01T12:00:00Z). Uses each job's own sitemap lastmod, applied before any job page is fetched, so a daily schedule with 25h pays only for what changed. No state to manage. Note: lastmod is date-granular.",
            "default": ""
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Keep only jobs first posted on or after this cutoff. Same formats as updatedAfter. Uses the posting's datePosted, so it applies in jobs mode. Use this for genuinely-new-roles feeds.",
            "default": ""
          },
          "includeDescriptionMarkdown": {
            "title": "Description as Markdown (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionMarkdown to each job row: the posting converted to clean Markdown, compact and ready for AI agents and LLM pipelines. Billed per job row that carries it. Uncheck for cheaper metadata-only rows.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Description as HTML (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionHtml to each job row: the original posting markup, entity-decoded. Billed per job row that carries it.",
            "default": false
          },
          "includeDescriptionText": {
            "title": "Description as plain text (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionText to each job row: the posting flattened to plain prose. Billed per job row that carries it.",
            "default": false
          },
          "report": {
            "title": "Whole-run report (paid add-on)",
            "enum": [
              "none",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "Also write a human-readable digest of every scraped job, grouped by employer, to the key-value store under the REPORT key. One flat charge per report. Capped at 5000 rows.",
            "default": "none"
          },
          "maxTenants": {
            "title": "Max tenants",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Cap on tenants processed in a directory sweep or tenantsOnly run. Keeps empty-input runs small and predictable.",
            "default": 25
          },
          "maxJobsPerTenant": {
            "title": "Max jobs per tenant",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on job rows per tenant after filtering. 0 means no per-tenant cap.",
            "default": 0
          },
          "maxJobs": {
            "title": "Max jobs for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on rows across the entire run, all tenants combined. The main cost control. 0 means unlimited.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel per-job page requests within a tenant. Lower it to be gentler on a tenant, raise it for speed.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. isolved career sites answer direct connections, so leave this off unless your network requires a proxy.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}