{
  "openapi": "3.0.1",
  "info": {
    "title": "S1jobs.com Scraper",
    "description": "[💰 $2.5 / 1K] Extract every job on s1jobs.com, Scotland's largest job board. Search by keyword, town, sector, contract and salary, or paste ready-made links. Get title, salary, location, coordinates, employer, skills, full description and recruiter apply emails.",
    "version": "1.0",
    "x-build-id": "cEL3ezheAySTrUe3a"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~s1jobs-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-s1jobs-com-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/solidcode~s1jobs-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-s1jobs-com-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/solidcode~s1jobs-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-s1jobs-com-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",
        "properties": {
          "searchKeyword": {
            "title": "Search Keyword",
            "type": "string",
            "description": "Word or phrase to look for in job titles, employer names and descriptions (e.g. 'nurse', 'HGV driver', 'software engineer'). Leave blank to collect every vacancy matching the filters below."
          },
          "location": {
            "title": "Town or City",
            "type": "string",
            "description": "Scottish town or city to search in, e.g. 'Glasgow', 'Edinburgh', 'Aberdeen', 'Inverness'. Leave blank to search all of Scotland."
          },
          "distanceMiles": {
            "title": "Search Radius",
            "enum": [
              "",
              "0",
              "5",
              "10",
              "15",
              "20",
              "25",
              "30",
              "35",
              "40",
              "45",
              "50"
            ],
            "type": "string",
            "description": "How far around the town or city above to search. Only has an effect when a town or city is set — s1jobs measures the radius from that place."
          },
          "startUrls": {
            "title": "Start URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Paste s1jobs.com links — either search/browse pages (e.g. https://www.s1jobs.com/jobs/glasgow/) or single job pages (e.g. https://www.s1jobs.com/job/field-officer-127131934). You can mix both in one list. When you use this, the keyword, place and filters are ignored, because each link already carries its own filters. Results from several links are merged and de-duplicated. Search and browse links return the full set of fields; a single job page carries a slightly smaller set, because s1jobs publishes a few fields (expiry date, council area, working arrangement, duration note and the video flags) only on its search pages.",
            "items": {
              "type": "string"
            }
          },
          "sectors": {
            "title": "Sectors",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include jobs in these sectors. Picking several returns jobs from any of them. Leave empty to include every sector.",
            "items": {
              "type": "string",
              "enum": [
                "Accountancy",
                "Admin / Secretarial / Pa",
                "Agriculture / Fishing / Forestry",
                "Architecture",
                "Automotive",
                "Biotechnology / Life Sciences",
                "Call / Contact Centres",
                "Charity / Voluntary",
                "Childcare",
                "Cleaning / Domestic / Caretaking",
                "Construction / Trades",
                "Customer Services",
                "Driving",
                "Education / Teaching",
                "Emergency Services / Military / Security",
                "Energy / Renewables",
                "Engineering / Technical",
                "Executive / Management / Consulting",
                "Financial Services / Investment",
                "Hairdressing / Beauty / Wellness",
                "Healthcare / Pharmaceuticals",
                "Heritage / Culture / Library",
                "Hospitality / Catering / Tourism",
                "Hr / Training / Recruitment",
                "Insurance",
                "Legal",
                "Leisure / Sport / Fitness",
                "Logistics / Distribution",
                "Marketing / Advertising / Events",
                "Media / Design / Creative Industries / Art",
                "Procurement",
                "Product Management",
                "Production / Manufacturing",
                "Project Management",
                "Property / Estates / Facilities",
                "Retail",
                "Sales",
                "Scientific",
                "Social Care / Social Services / Housing",
                "Tech / Digital / IT"
              ],
              "enumTitles": [
                "Accountancy",
                "Admin / Secretarial / PA",
                "Agriculture / Fishing / Forestry",
                "Architecture",
                "Automotive",
                "Biotechnology / Life Sciences",
                "Call / Contact Centres",
                "Charity / Voluntary",
                "Childcare",
                "Cleaning / Domestic / Caretaking",
                "Construction / Trades",
                "Customer Services",
                "Driving",
                "Education / Teaching",
                "Emergency Services / Military / Security",
                "Energy / Renewables",
                "Engineering / Technical",
                "Executive / Management / Consulting",
                "Financial Services / Investment",
                "Hairdressing / Beauty / Wellness",
                "Healthcare / Pharmaceuticals",
                "Heritage / Culture / Library",
                "Hospitality / Catering / Tourism",
                "HR / Training / Recruitment",
                "Insurance",
                "Legal",
                "Leisure / Sport / Fitness",
                "Logistics / Distribution",
                "Marketing / Advertising / Events",
                "Media / Design / Creative / Art",
                "Procurement",
                "Product Management",
                "Production / Manufacturing",
                "Project Management",
                "Property / Estates / Facilities",
                "Retail",
                "Sales",
                "Scientific",
                "Social Care / Social Services / Housing",
                "Tech / Digital / IT"
              ]
            }
          },
          "jobTypes": {
            "title": "Full or Part Time",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include full-time or part-time roles. Leave empty to include both.",
            "items": {
              "type": "string",
              "enum": [
                "Full",
                "Part"
              ],
              "enumTitles": [
                "Full time",
                "Part time"
              ]
            }
          },
          "contractTypes": {
            "title": "Contract Type",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include jobs offering these contract types. Leave empty to include all.",
            "items": {
              "type": "string",
              "enum": [
                "Permanent",
                "Temporary",
                "Contract"
              ],
              "enumTitles": [
                "Permanent",
                "Temporary",
                "Contract"
              ]
            }
          },
          "workingLocations": {
            "title": "Working Arrangement",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include jobs with these working arrangements. Picking several returns jobs matching any of them. Many employers do not state an arrangement at all, and those jobs are excluded when you pick a value here. Leave empty to include all.",
            "items": {
              "type": "string",
              "enum": [
                "Onsite working",
                "Hybrid working",
                "Remote working",
                "Home working"
              ],
              "enumTitles": [
                "On-site",
                "Hybrid",
                "Remote",
                "Home working"
              ]
            }
          },
          "advertiserType": {
            "title": "Advertised By",
            "enum": [
              "",
              "Employer",
              "Agency"
            ],
            "type": "string",
            "description": "Only include jobs posted directly by the employer, or only those posted by a recruitment agency."
          },
          "companyName": {
            "title": "Employer Name",
            "type": "string",
            "description": "Only include jobs from this employer, e.g. 'Aviva' or 'Aberdeen City Council'. Use the employer name exactly as it appears on s1jobs."
          },
          "minSalary": {
            "title": "Minimum Salary (GBP per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include jobs advertising a yearly salary of at least this amount, e.g. 30000. Enter a whole number of pounds with no comma, currency symbol or minus sign — anything else is rejected before the run starts. Many jobs do not publish a salary, and those are excluded when you set this. Leave blank for any salary."
          },
          "maxSalary": {
            "title": "Maximum Salary (GBP per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include jobs advertising a yearly salary up to this amount, e.g. 50000. Enter a whole number of pounds with no comma, currency symbol or minus sign — anything else is rejected before the run starts. Keep it above the minimum salary, or no job can match both. Many jobs do not publish a salary, and those are excluded when you set this. Leave blank for any salary."
          },
          "roleFlags": {
            "title": "Role Highlights",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include jobs marked with these highlights on s1jobs. Picking several means a job must match all of them, so combining many will return very few results. Leave empty to include everything.",
            "items": {
              "type": "string",
              "enum": [
                "apprenticeship",
                "graduate",
                "immediate_start",
                "is_public_sector",
                "has_accreditation",
                "has_video"
              ],
              "enumTitles": [
                "Apprenticeships",
                "Graduate-suitable roles",
                "Immediate start",
                "Public sector roles",
                "Accredited employers only",
                "Listings with a video"
              ]
            }
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "newest",
              "best",
              "salary",
              "_salary",
              "closest"
            ],
            "type": "string",
            "description": "The order s1jobs returns results in. 'Newest first' is the best way to collect only recent postings — pair it with a small result limit for scheduled runs that pick up just the latest jobs. 'Closest first' needs a town or city to measure from; if you pick it without one, the run automatically uses 'Newest first' instead and tells you in the log."
          },
          "includeJobDetails": {
            "title": "Include Full Job Details",
            "type": "boolean",
            "description": "Open each job's own page to add the UK postcode, the apply route (a recruiter apply email or the employer's own application link — every job has one or the other), the employer's job reference, the employer description, and accreditations. This makes one extra request per job, so runs take longer — but it does not change what you are charged, because you are still billed per job. If s1jobs is unusually slow, a job that hasn't answered within two and a half minutes keeps its standard information and the run carries on — you never lose the job itself. Turn off for the fastest possible run."
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on how many jobs to collect in total. Default 100 — increase for bigger runs, or set to 0 to collect everything that matches. It must be a whole number of 0 or more; a negative value is rejected before the run starts. The run stops asking for new pages once the cap is reached but keeps the whole final page, so you may receive slightly more than requested — never fewer because of trimming. A 'collect everything' (0) run is capped at 20,000 jobs for the whole run as a safety limit, far above the size of the board."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}