{
  "openapi": "3.0.1",
  "info": {
    "title": "NHS UK $0.8💰 URL | Keyword |  Deep Search Scraper",
    "description": "From $0.8/1k. Scrape nhs.uk Jobs listings into a flat dataset. Extract 50+ fields, including pay band, salary, full description, essential and desirable criteria, PDFs, sponsorship, DBS, employer details, contacts, and apply URL. Search by filters or use any URL.",
    "version": "1.6",
    "x-build-id": "ZF3SVI2IZUBA8irip"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~jobs-nhs-uk-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-jobs-nhs-uk-scraper",
        "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/abotapi~jobs-nhs-uk-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-jobs-nhs-uk-scraper",
        "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/abotapi~jobs-nhs-uk-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-jobs-nhs-uk-scraper",
        "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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "1. Search mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode = pick keyword + location + filters below. URL mode = paste any jobs.nhs.uk URL refined in a browser (recommended for filter combinations not exposed below).",
            "default": "search"
          },
          "keywords": {
            "title": "Keywords (optional)",
            "type": "array",
            "description": "Free-text job-title or skill keywords (e.g. \"doctor\", \"nurse\", \"radiographer\"). One scrape per keyword. Leave empty to browse all jobs filtered only by location + facets.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location (optional)",
            "type": "string",
            "description": "Town, city, county, or postcode (e.g. \"London\", \"SW1A 1AA\", \"Manchester\"). Leave empty to search nationwide."
          },
          "distance": {
            "title": "Distance (miles)",
            "enum": [
              "",
              "5",
              "10",
              "20",
              "30",
              "50",
              "100"
            ],
            "type": "string",
            "description": "Search radius around the location in miles. Empty = all of UK.",
            "default": "10"
          },
          "payBands": {
            "title": "Pay bands (Agenda for Change + Doctor grades)",
            "type": "array",
            "description": "Filter by pay band. Multi-select. BAND_2 to BAND_9 are Agenda for Change bands; SPECIALTY_DOCTOR / FOUNDATION_DOCTOR / CONSULTANT / SPECIALTY_REGISTRAR / DOCTOR_OTHER / SPECIALIST / VERY_SENIOR_MANAGER are medical-and-dental grades.",
            "items": {
              "type": "string",
              "enum": [
                "BAND_2",
                "BAND_3",
                "BAND_4",
                "BAND_5",
                "BAND_6",
                "BAND_7",
                "BAND_8A",
                "BAND_8B",
                "BAND_8C",
                "BAND_8D",
                "BAND_9",
                "SPECIALTY_DOCTOR",
                "FOUNDATION_DOCTOR",
                "CONSULTANT",
                "SPECIALTY_REGISTRAR",
                "DOCTOR_OTHER",
                "SPECIALIST",
                "VERY_SENIOR_MANAGER"
              ],
              "enumTitles": [
                "Band 2",
                "Band 3",
                "Band 4",
                "Band 5",
                "Band 6",
                "Band 7",
                "Band 8a",
                "Band 8b",
                "Band 8c",
                "Band 8d",
                "Band 9",
                "Specialty Doctor",
                "Foundation Doctor",
                "Consultant",
                "Specialty Registrar",
                "Doctor (other)",
                "Specialist",
                "Very Senior Manager"
              ]
            }
          },
          "staffGroups": {
            "title": "Staff group",
            "type": "array",
            "description": "Filter by NHS staff group. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "MEDICAL_AND_DENTAL",
                "NURSING_AND_MIDWIFERY_REGD",
                "ALLIED_HEALTH_PROF",
                "HEALTHCARE_SCIENTISTS",
                "ADMINISTRATIVE_AND_CLERICAL",
                "ESTATES_AND_ANCILLARY",
                "CLINICAL_SERVICES",
                "PROF_SCIENTIFIC_AND_TECHNICAL",
                "STUDENTS"
              ],
              "enumTitles": [
                "Medical and Dental",
                "Nursing and Midwifery (registered)",
                "Allied Health Professionals",
                "Healthcare Scientists",
                "Administrative and Clerical",
                "Estates and Ancillary",
                "Additional Clinical Services",
                "Professional, Scientific and Technical",
                "Students"
              ]
            }
          },
          "contractTypes": {
            "title": "Contract type",
            "type": "array",
            "description": "Filter by contract type. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "Permanent",
                "Fixed-Term",
                "Apprenticeship",
                "Voluntary",
                "Locum",
                "Training",
                "Secondment",
                "Honorary",
                "Bank",
                "NHS Reservist"
              ],
              "enumTitles": [
                "Permanent",
                "Fixed-term",
                "Apprenticeship",
                "Voluntary",
                "Locum",
                "Training",
                "Secondment",
                "Honorary",
                "Bank",
                "NHS Reservist"
              ]
            }
          },
          "workingPatterns": {
            "title": "Working pattern",
            "type": "array",
            "description": "Filter by working pattern. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "job-share",
                "flexible-working",
                "remote-working",
                "compressed-hours",
                "term-time-hours",
                "annualised-hours"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Job share",
                "Flexible working",
                "Remote working",
                "Compressed hours",
                "Term-time hours",
                "Annualised hours"
              ]
            }
          },
          "payRanges": {
            "title": "Pay range (k GBP per year)",
            "type": "array",
            "description": "Filter by salary range in thousands of GBP. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "0-10",
                "10-20",
                "20-30",
                "30-40",
                "40-50",
                "50-60",
                "60-70",
                "70-80",
                "80-90",
                "90-100",
                "100"
              ],
              "enumTitles": [
                "Up to £10k",
                "£10k - £20k",
                "£20k - £30k",
                "£30k - £40k",
                "£40k - £50k",
                "£50k - £60k",
                "£60k - £70k",
                "£70k - £80k",
                "£80k - £90k",
                "£90k - £100k",
                "£100k+"
              ]
            }
          },
          "employerName": {
            "title": "Employer name (optional)",
            "type": "string",
            "description": "Filter by NHS Trust or employer name (e.g. \"Royal Marsden\", \"Guy's and St Thomas\"). Partial match."
          },
          "covidJobsOnly": {
            "title": "COVID-related roles only",
            "type": "boolean",
            "description": "Limit to roles tagged as COVID-related.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "",
              "publicationDateDesc",
              "closingDate",
              "salaryDesc",
              "salaryAsc"
            ],
            "type": "string",
            "description": "How jobs.nhs.uk orders the SERP.",
            "default": ""
          },
          "urls": {
            "title": "Search URLs (URL mode)",
            "type": "array",
            "description": "One or more jobs.nhs.uk URLs. Examples: https://www.jobs.nhs.uk/candidate/search/results?keyword=nurse&location=Manchester&distance=10 or https://www.jobs.nhs.uk/candidate/jobadvert/C9282-25-0864 (single advert). Multi-URL supported; each pages forward independently. Filter fields above are ignored in URL mode.",
            "items": {
              "type": "string"
            }
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Hard cap on how many SERP pages to walk per keyword × location combination (or per pasted URL). Each page returns up to 50 listings.",
            "default": 2
          },
          "maxListings": {
            "title": "Max listings (total)",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many listings across all searches. 0 = no cap.",
            "default": 0
          },
          "fetchDetails": {
            "title": "Fetch detail pages (richer data)",
            "type": "boolean",
            "description": "When ON, also fetch each advert's detail page for full job summary, main duties, about us, job description (HTML + text), person specification (essential + desirable criteria split out), employer address + website, contact email/phone, supporting PDF download IDs, sponsorship + UK registration + DBS flags, and apply URL. SERP cards already carry id, title, employer, location, salary, dates so simple feeds work fine with this OFF. Default ON.",
            "default": true
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "jobs.nhs.uk needs UK residential routing. Datacenter IPs are rejected by the upstream edge filter. Default groups: [\"RESIDENTIAL\"], country: \"GB\". Free-tier Apify accounts do not include residential, paste your own UK proxy URLs in the proxyUrls field if you are on Free."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}