{
  "openapi": "3.0.1",
  "info": {
    "title": "NHS Jobs Scraper (Cheap)",
    "description": "NHS Jobs Scraper that pulls vacancy listings from jobs.nhs.uk by keyword, location, and filter, so recruiters and analysts get clean structured job data without manual searching.",
    "version": "0.0",
    "x-build-id": "6fvVIT9l8VCoBdoz2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data_api~nhs-jobs-scraper-cheap/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data_api-nhs-jobs-scraper-cheap",
        "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/data_api~nhs-jobs-scraper-cheap/runs": {
      "post": {
        "operationId": "runs-sync-data_api-nhs-jobs-scraper-cheap",
        "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/data_api~nhs-jobs-scraper-cheap/run-sync": {
      "post": {
        "operationId": "run-sync-data_api-nhs-jobs-scraper-cheap",
        "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",
        "required": [
          "searchTerms"
        ],
        "properties": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "List your job searches one per line. The term on each line is matched against the area on the same line in Search areas, so line 1 here goes with line 1 there (e.g. nurse + London).",
            "items": {
              "type": "string"
            }
          },
          "searchAreas": {
            "title": "Search areas",
            "type": "array",
            "description": "One town, city, or postcode per line, lined up with the search term on the matching row. Leave it empty to cover the whole UK for every term.",
            "items": {
              "type": "string"
            }
          },
          "searchRadius": {
            "title": "Radius in miles",
            "minimum": 5,
            "maximum": 100,
            "type": "integer",
            "description": "How far out from each area to look, in miles. Pick one of 5, 10, 20, 30, 50, or 100. The same radius is used for every term and area row.",
            "default": 20
          },
          "employerFilter": {
            "title": "Employer name",
            "type": "string",
            "description": "Restrict the results to one employer or NHS Trust by name.",
            "default": ""
          },
          "contractKindFilter": {
            "title": "Contract",
            "enum": [
              "",
              "Permanent",
              "Fixed-Term",
              "Apprenticeship",
              "Voluntary",
              "Locum",
              "Training",
              "Secondment",
              "Honorary",
              "Bank"
            ],
            "type": "string",
            "description": "Keep only roles on a given contract. Leave it on All to include every contract.",
            "default": ""
          },
          "workScheduleFilter": {
            "title": "Work schedule",
            "enum": [
              "",
              "full-time",
              "part-time",
              "job-share",
              "flexible-working",
              "remote-working",
              "compressed-hours",
              "term-time-hours",
              "annualised-hours"
            ],
            "type": "string",
            "description": "Keep only roles with a given schedule. Leave it on All to include every schedule.",
            "default": ""
          },
          "minSalary": {
            "title": "Salary floor",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest annual salary to include. Set it to 0 to drop the lower bound.",
            "default": 0
          },
          "maxSalary": {
            "title": "Salary ceiling",
            "minimum": 0,
            "type": "integer",
            "description": "Highest annual salary to include. Set it to 0 to drop the upper bound.",
            "default": 0
          },
          "firstPage": {
            "title": "First page",
            "minimum": 1,
            "type": "integer",
            "description": "Which results page to start on. Applied to every search term and area row. Handy for picking up where an earlier run stopped.",
            "default": 1
          },
          "resultsLimit": {
            "title": "Results per search term",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many jobs to pull for each search term and area row. With 3 terms and a value of 50, the run gathers up to 150 jobs in total.",
            "default": 10
          },
          "timeoutSeconds": {
            "title": "Request timeout in seconds",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait on each request before giving up.",
            "default": 45
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}