{
  "data": {
    "id": "aIDxbsncwKwDBt3AW",
    "actId": "oa2Q6nW8vIp072JMx",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-19T20:52:14.289Z",
    "finishedAt": "2026-10-19T20:52:29.797Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 15432,
      "runTimeSecs": 15.432,
      "computeUnits": 0.017146666666666668,
      "imageSizeBytes": 355367424
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Totaljobs UK Vacancy Finder Input\",\n  \"description\": \"Find live UK vacancies on Totaljobs by keyword and area, browse a whole area, or scrape specific Totaljobs URLs. Optional filters: date posted, work from home, job type, sort order and salary band.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"Choose what to scrape. The last three values are aliases kept for tasks saved before the revamp.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"browseLocation\",\n        \"byUrls\",\n        \"searchJobs\",\n        \"searchByLocation\",\n        \"searchBySalary\"\n      ],\n      \"enumTitles\": [\n        \"Search jobs by keyword and area\",\n        \"Browse every job in an area\",\n        \"Scrape specific Totaljobs URLs\",\n        \"Search jobs by keyword (legacy alias)\",\n        \"Browse every job in an area (legacy alias)\",\n        \"Search with a salary band (legacy alias)\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"keywords\": {\n      \"title\": \"Keywords\",\n      \"type\": \"array\",\n      \"description\": \"Job titles or search terms, e.g. `software developer` or `registered nurse`. Each keyword is searched separately. (mode=search)\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": [\n        \"software developer\"\n      ]\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"UK town, city, county or postcode, e.g. `London`, `Manchester`, `Edinburgh`, `SW1A`. Leave empty to search the whole UK by keyword.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"London\"\n    },\n    \"postedWithin\": {\n      \"title\": \"Date posted\",\n      \"type\": \"string\",\n      \"description\": \"Only include jobs posted within this window. Leave empty for any date.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"1\",\n        \"3\",\n        \"7\",\n        \"14\"\n      ],\n      \"enumTitles\": [\n        \"Last 24 hours\",\n        \"Last 3 days\",\n        \"Last 7 days\",\n        \"Last 14 days\"\n      ]\n    },\n    \"workFromHome\": {\n      \"title\": \"Work from home\",\n      \"type\": \"string\",\n      \"description\": \"Include only home-working roles, or exclude them. Leave empty for both.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"only\",\n        \"exclude\"\n      ],\n      \"enumTitles\": [\n        \"Only work-from-home jobs\",\n        \"Exclude work-from-home jobs\"\n      ]\n    },\n    \"jobType\": {\n      \"title\": \"Job type\",\n      \"type\": \"string\",\n      \"description\": \"Employment type as classified by Totaljobs. Leave empty for all types.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"permanent\",\n        \"contract\",\n        \"temporary\",\n        \"part-time\",\n        \"work-from-home\",\n        \"full-time\",\n        \"internship\",\n        \"apprenticeship\"\n      ],\n      \"enumTitles\": [\n        \"Permanent\",\n        \"Contract\",\n        \"Temporary\",\n        \"Part-time\",\n        \"Work from home\",\n        \"Full-time (legacy — no longer a Totaljobs filter, ignored)\",\n        \"Internship (legacy — no longer a Totaljobs filter, ignored)\",\n        \"Apprenticeship (legacy — no longer a Totaljobs filter, ignored)\"\n      ]\n    },\n    \"salaryMin\": {\n      \"title\": \"Minimum salary (£/year)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep jobs whose advertised pay reaches this annual amount. Hourly and daily rates are converted to a yearly figure. Jobs without a published salary are skipped when a salary filter is set.\",\n      \"minimum\": 0,\n      \"maximum\": 500000\n    },\n    \"salaryMax\": {\n      \"title\": \"Maximum salary (£/year)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep jobs whose advertised pay starts at or below this annual amount. Hourly and daily rates are converted to a yearly figure.\",\n      \"minimum\": 0,\n      \"maximum\": 500000\n    },\n    \"includeDetails\": {\n      \"title\": \"Open each job page\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch full descriptions, exact posting and expiry dates, parsed salary bands, company details, map coordinates and apply links. Turn off for a faster, lighter listing-only run.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"onlyNewJobs\": {\n      \"title\": \"Only new jobs\",\n      \"type\": \"boolean\",\n      \"description\": \"Return only jobs that were not present in the previous run of this same search. The first run returns everything and seeds the baseline.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max jobs\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of jobs to save. Totaljobs returns at most 100 jobs per search query; above that the actor automatically splits the search by area and filters to reach more.\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 100,\n      \"prefill\": 3\n    },\n    \"urls\": {\n      \"title\": \"Totaljobs URLs\",\n      \"type\": \"array\",\n      \"description\": \"Search pages, company job pages or individual job pages. You can mix them. (mode=byUrls)\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Totaljobs UK Vacancy Finder by Keyword, Area & Pay\n\nTotaljobs carries tens of thousands of live UK vacancies, from warehouse shifts in Leeds to NHS roles in Manchester and contract work in London. This actor turns those public listing pages into structured records you can filter, chart or load into a spreadsheet: full descriptions, salary bands split into numbers and pay periods, exact posting and expiry dates, employer details, remote flags and apply links.\n\n## What this actor does\n\n- **Three ways in:** search a keyword and area, browse every vacancy in an area, or paste Totaljobs search/company/job URLs.\n- **Filters that the site honours:** date posted, work-from-home only or excluded, five employment types, and newest-first or relevance ordering.\n- **Salary band filtering:** enter a yearly range and the actor keeps only postings whose advertised pay overlaps it, converting hourly and daily rates to a yearly figure.\n- **Rich per-job detail:** the actor can open each vacancy to collect the complete description, exact ISO dates, structured salary, employer profile and map coordinates.\n- **No duplicates:** recurring jobs, cross-posted listings and overlapping search slices are de-duplicated by Totaljobs job ID.\n- **Empty fields are omitted**, never returned as `null` or a blank string.\n\n## Output per job\n\n- `jobId` — Totaljobs' numeric listing ID\n- `title` — job title as posted\n- `company` — employer name\n- `companyId`, `companyUrl`, `companyLogoUrl`, `companyJobsCount`, `companySectors[]` — employer profile data when published\n- `companyIndustries[]`, `companyEmployees`, `companyFounded`, `companyAddress`, `companyHeroImageUrl` — extras from the employer's company profile when it has one\n- `location` — location text as shown (often includes the postcode area)\n- `locationPostcode`, `locationCountry` — parsed from the listing\n- `locations[]` — one entry per location for multi-site vacancies (`locality`, `region`, `country`, `postalCode`, `latitude`, `longitude`)\n- `locationLatitude`, `locationLongitude` — coordinates for the primary location when the employer supplies them\n- `salary` — salary exactly as advertised (e.g. `£45,000 - £55,000 per annum`)\n- `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` — parsed pay band (`year`, `month`, `week`, `day` or `hour`)\n- `salaryAnnualMin`, `salaryAnnualMax` — annualised equivalent used by the salary filter\n- `description` — full plain-text description when job pages are opened\n- `descriptionHtml` — the employer's original formatting\n- `postedDate` — ISO 8601 posting date when job pages are opened; the relative label (`3 days ago`) otherwise\n- `postedDateText` — the relative label shown on the search results\n- `validThrough` — ISO 8601 expiry date\n- `employmentType` — e.g. `FULL_TIME`, `CONTRACTOR`, `REMOTE_WORKING` (multiple values joined with commas)\n- `contractType` — the site's own label, e.g. `Permanent Contract; On-site`\n- `workType` — `On-site`, `Hybrid` or `Remote` when the site states it\n- `isRemote` — `true` for telecommute/home-working vacancies\n- `applicantLocationRequirements` — country the employer accepts applicants from, for remote roles\n- `industry` — Totaljobs industry classification\n- `directApply` — whether the employer accepts applications on Totaljobs\n- `applyType` — `internal` or `external`\n- `applyUrl`, `applicationUrl` — link to start the application for this vacancy\n- `jobUrl` — the vacancy page on Totaljobs\n- `relatedJobs[]` — up to 10 similar vacancies (`jobId`, `title`, `url`)\n- `labels[]` — badges shown on the results page (e.g. `FEATURED`, `PREMIUM`)\n- `searchUrl`, `sourceKeyword`, `sourceLocation` — which search produced the row\n- `firstSeenAt` — ISO timestamp when `onlyNewJobs` first returned this vacancy\n- `recordType` — always `job` · `scrapedAt` — ISO timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` (keyword + area), `browseLocation` (whole area), `byUrls` (paste URLs) |\n| `keywords` | array | – | One or more job titles or search terms (mode=search) |\n| `location` | string | – | UK town, city, county or postcode; empty = UK-wide |\n| `postedWithin` | string | – | `1`, `3`, `7` or `14` days (site filter) |\n| `workFromHome` | string | – | `only` or `exclude` (site filter) |\n| `jobType` | string | – | `permanent`, `contract`, `temporary`, `part-time`, `work-from-home` |\n| `salaryMin` | integer | – | Minimum annual pay in GBP (converted for hourly/daily rates) |\n| `salaryMax` | integer | – | Maximum annual pay in GBP |\n| `includeDetails` | boolean | `true` | Open each job page for full descriptions, exact dates, salary bands and apply links |\n| `onlyNewJobs` | boolean | `false` | Return only jobs not seen in the previous run of the same search (the first run seeds the baseline) |\n| `maxItems` | integer | `100` | Maximum jobs to save (1–5,000) |\n| `urls` | array | – | Totaljobs search, company or job URLs (mode=byUrls) |\n\nTasks saved before this revamp keep working: the old `mode` values `searchJobs` / `searchByLocation` / `searchBySalary` and the old job types `full-time` / `internship` / `apprenticeship` are accepted. The last three types are ignored because Totaljobs no longer offers them as filters.\n\n### Example: nursing jobs across Manchester, newest first\n\n```json\n{\n  \"mode\": \"search\",\n  \"keywords\": [\"registered nurse\"],\n  \"location\": \"Manchester\",\n  \"postedWithin\": \"7\",\n  \"maxItems\": 200\n}\n```\n\n### Example: every permanent vacancy in Leeds within the last day\n\n```json\n{\n  \"mode\": \"browseLocation\",\n  \"location\": \"Leeds\",\n  \"postedWithin\": \"1\",\n  \"jobType\": \"permanent\",\n  \"maxItems\": 100\n}\n```\n\n### Example: remote data roles paying at least £55,000\n\n```json\n{\n  \"mode\": \"search\",\n  \"keywords\": [\"data analyst\"],\n  \"workFromHome\": \"only\",\n  \"salaryMin\": 55000,\n  \"includeDetails\": true,\n  \"maxItems\": 150\n}\n```\n\n### Example: paste a mixed set of Totaljobs URLs\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"urls\": [\n    \"https://www.totaljobs.com/jobs/software-developer/in-edinburgh\",\n    \"https://www.totaljobs.com/jobs/it-online-learning?cmpId=811550&cmp=1\",\n    \"https://www.totaljobs.com/job/software-developer/sanderson-government-and-defence-job107993953\"\n  ],\n  \"includeDetails\": true\n}\n```\n\n## Use cases\n\n- **Job seekers** — collect every matching vacancy in one list with full descriptions and pay bands, without browsing page by page.\n- **Salary benchmarking** — compare advertised ranges for a role across London, Manchester, Edinburgh and other UK regions.\n- **Recruitment agencies** — monitor which employers are hiring, in which sectors, and how recently each vacancy was posted.\n- **Labour-market research** — measure remote-work share, contract vs permanent mix, and posting volume by area.\n- **Sales and lead generation** — identify companies actively hiring in a target industry and load their profile links into a CRM.\n\n## FAQ\n\n**How many jobs can one run return?**\nSet `maxItems` up to 5,000. Totaljobs serves at most 100 vacancies per individual search query, so for larger runs the actor automatically splits the search across the site's own location, work-from-home, job-type and skill facets, de-duplicating as it goes. In practice a broad query reaches roughly **1,000–1,400** distinct vacancies depending on the facets and related roles Totaljobs serves for that request (for \"software developer\" in London the site listed 2,692; runs reached 1,022, 1,200 and 1,391 unique). The actor splits by region, sub-area, work-from-home, job type, skills and related job titles; beyond the reachable set the slices repeat, so narrow the filters or split the query by area for deeper coverage.\n\n**Why are some jobs missing salary numbers?**\nMany UK employers advertise \"Competitive\" or omit pay entirely. The actor never invents a figure: the `salary` text is kept exactly as published, and numeric fields appear only when a real amount is shown.\n\n**Are date filters exact?**\nYes. When you choose a date window, every returned job is checked against its posting date, so results stay inside the window even on pages where Totaljobs' own date control is unavailable.\n\n**How does the salary filter treat hourly and daily rates?**\nHourly pay is annualised over 2,080 hours and daily rates over 220 working days. A job is kept when its annualised range overlaps your `salaryMin`/`salaryMax` window. Jobs with no published pay cannot be verified, so they are skipped while a salary filter is active.\n\n**What is the difference between `applyUrl` and `jobUrl`?**\n`jobUrl` is the public vacancy page. `applyUrl` is the application entry point for that vacancy — for jobs with external application systems, Totaljobs asks you to sign in before forwarding you to the employer's site.\n\n**How do I get only the jobs posted since my last run?**\nSet `onlyNewJobs` to `true` and keep the rest of the search identical. The actor remembers the job IDs it returned for that search, so the next run returns only unseen vacancies. The first run returns everything and becomes the baseline.\n\n**Can I sort by relevance?**\nNo. Totaljobs only serves its newest-first order to anonymous requests; the relevance option depends on a signed-in session and cannot be combined with the filters. The actor always returns newest-first results.\n\n**Why do some records lack coordinates or a company logo?**\nOnly what the employer and Totaljobs publish is returned. Listings without a mapped address or logo simply omit those fields.\n\n**Does the actor need cookies, logins or a proxy setup?**\nNo. It uses only public pages and chooses a working UK connection automatically. Just fill in the input and run.\n\n**Is this affiliated with Totaljobs?**\nNo. This is an independent tool that reads publicly available Totaljobs pages. It is not affiliated with, endorsed by, or sponsored by Totaljobs or StepStone.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "totaljobs-uk-vacancy-finder-by-keyword-area",
      "title": "Totaljobs UK Vacancy Finder by Keyword, Area & Pay",
      "description": "Scrape live UK vacancies from Totaljobs by keyword and area. Get full descriptions, parsed salary bands, exact posting dates, remote flags, company details and apply links. Browse a whole area or paste any search, company or job URL.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Totaljobs UK Vacancy Finder by Keyword, Area & Pay\n\nTotaljobs carries tens of thousands of live UK vacancies, from warehouse shifts in Leeds to NHS roles in Manchester and contract work in London. This actor turns those public listing pages into structured records you can filter, chart or load into a spreadsheet: full descriptions, salary bands split into numbers and pay periods, exact posting and expiry dates, employer details, remote flags and apply links.\n\n## What this actor does\n\n- **Three ways in:** search a keyword and area, browse every vacancy in an area, or paste Totaljobs search/company/job URLs.\n- **Filters that the site honours:** date posted, work-from-home only or excluded, five employment types, and newest-first or relevance ordering.\n- **Salary band filtering:** enter a yearly range and the actor keeps only postings whose advertised pay overlaps it, converting hourly and daily rates to a yearly figure.\n- **Rich per-job detail:** the actor can open each vacancy to collect the complete description, exact ISO dates, structured salary, employer profile and map coordinates.\n- **No duplicates:** recurring jobs, cross-posted listings and overlapping search slices are de-duplicated by Totaljobs job ID.\n- **Empty fields are omitted**, never returned as `null` or a blank string.\n\n## Output per job\n\n- `jobId` — Totaljobs' numeric listing ID\n- `title` — job title as posted\n- `company` — employer name\n- `companyId`, `companyUrl`, `companyLogoUrl`, `companyJobsCount`, `companySectors[]` — employer profile data when published\n- `companyIndustries[]`, `companyEmployees`, `companyFounded`, `companyAddress`, `companyHeroImageUrl` — extras from the employer's company profile when it has one\n- `location` — location text as shown (often includes the postcode area)\n- `locationPostcode`, `locationCountry` — parsed from the listing\n- `locations[]` — one entry per location for multi-site vacancies (`locality`, `region`, `country`, `postalCode`, `latitude`, `longitude`)\n- `locationLatitude`, `locationLongitude` — coordinates for the primary location when the employer supplies them\n- `salary` — salary exactly as advertised (e.g. `£45,000 - £55,000 per annum`)\n- `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` — parsed pay band (`year`, `month`, `week`, `day` or `hour`)\n- `salaryAnnualMin`, `salaryAnnualMax` — annualised equivalent used by the salary filter\n- `description` — full plain-text description when job pages are opened\n- `descriptionHtml` — the employer's original formatting\n- `postedDate` — ISO 8601 posting date when job pages are opened; the relative label (`3 days ago`) otherwise\n- `postedDateText` — the relative label shown on the search results\n- `validThrough` — ISO 8601 expiry date\n- `employmentType` — e.g. `FULL_TIME`, `CONTRACTOR`, `REMOTE_WORKING` (multiple values joined with commas)\n- `contractType` — the site's own label, e.g. `Permanent Contract; On-site`\n- `workType` — `On-site`, `Hybrid` or `Remote` when the site states it\n- `isRemote` — `true` for telecommute/home-working vacancies\n- `applicantLocationRequirements` — country the employer accepts applicants from, for remote roles\n- `industry` — Totaljobs industry classification\n- `directApply` — whether the employer accepts applications on Totaljobs\n- `applyType` — `internal` or `external`\n- `applyUrl`, `applicationUrl` — link to start the application for this vacancy\n- `jobUrl` — the vacancy page on Totaljobs\n- `relatedJobs[]` — up to 10 similar vacancies (`jobId`, `title`, `url`)\n- `labels[]` — badges shown on the results page (e.g. `FEATURED`, `PREMIUM`)\n- `searchUrl`, `sourceKeyword`, `sourceLocation` — which search produced the row\n- `firstSeenAt` — ISO timestamp when `onlyNewJobs` first returned this vacancy\n- `recordType` — always `job` · `scrapedAt` — ISO timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` (keyword + area), `browseLocation` (whole area), `byUrls` (paste URLs) |\n| `keywords` | array | – | One or more job titles or search terms (mode=search) |\n| `location` | string | – | UK town, city, county or postcode; empty = UK-wide |\n| `postedWithin` | string | – | `1`, `3`, `7` or `14` days (site filter) |\n| `workFromHome` | string | – | `only` or `exclude` (site filter) |\n| `jobType` | string | – | `permanent`, `contract`, `temporary`, `part-time`, `work-from-home` |\n| `salaryMin` | integer | – | Minimum annual pay in GBP (converted for hourly/daily rates) |\n| `salaryMax` | integer | – | Maximum annual pay in GBP |\n| `includeDetails` | boolean | `true` | Open each job page for full descriptions, exact dates, salary bands and apply links |\n| `onlyNewJobs` | boolean | `false` | Return only jobs not seen in the previous run of the same search (the first run seeds the baseline) |\n| `maxItems` | integer | `100` | Maximum jobs to save (1–5,000) |\n| `urls` | array | – | Totaljobs search, company or job URLs (mode=byUrls) |\n\nTasks saved before this revamp keep working: the old `mode` values `searchJobs` / `searchByLocation` / `searchBySalary` and the old job types `full-time` / `internship` / `apprenticeship` are accepted. The last three types are ignored because Totaljobs no longer offers them as filters.\n\n### Example: nursing jobs across Manchester, newest first\n\n```json\n{\n  \"mode\": \"search\",\n  \"keywords\": [\"registered nurse\"],\n  \"location\": \"Manchester\",\n  \"postedWithin\": \"7\",\n  \"maxItems\": 200\n}\n```\n\n### Example: every permanent vacancy in Leeds within the last day\n\n```json\n{\n  \"mode\": \"browseLocation\",\n  \"location\": \"Leeds\",\n  \"postedWithin\": \"1\",\n  \"jobType\": \"permanent\",\n  \"maxItems\": 100\n}\n```\n\n### Example: remote data roles paying at least £55,000\n\n```json\n{\n  \"mode\": \"search\",\n  \"keywords\": [\"data analyst\"],\n  \"workFromHome\": \"only\",\n  \"salaryMin\": 55000,\n  \"includeDetails\": true,\n  \"maxItems\": 150\n}\n```\n\n### Example: paste a mixed set of Totaljobs URLs\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"urls\": [\n    \"https://www.totaljobs.com/jobs/software-developer/in-edinburgh\",\n    \"https://www.totaljobs.com/jobs/it-online-learning?cmpId=811550&cmp=1\",\n    \"https://www.totaljobs.com/job/software-developer/sanderson-government-and-defence-job107993953\"\n  ],\n  \"includeDetails\": true\n}\n```\n\n## Use cases\n\n- **Job seekers** — collect every matching vacancy in one list with full descriptions and pay bands, without browsing page by page.\n- **Salary benchmarking** — compare advertised ranges for a role across London, Manchester, Edinburgh and other UK regions.\n- **Recruitment agencies** — monitor which employers are hiring, in which sectors, and how recently each vacancy was posted.\n- **Labour-market research** — measure remote-work share, contract vs permanent mix, and posting volume by area.\n- **Sales and lead generation** — identify companies actively hiring in a target industry and load their profile links into a CRM.\n\n## FAQ\n\n**How many jobs can one run return?**\nSet `maxItems` up to 5,000. Totaljobs serves at most 100 vacancies per individual search query, so for larger runs the actor automatically splits the search across the site's own location, work-from-home, job-type and skill facets, de-duplicating as it goes. In practice a broad query reaches roughly **1,000–1,400** distinct vacancies depending on the facets and related roles Totaljobs serves for that request (for \"software developer\" in London the site listed 2,692; runs reached 1,022, 1,200 and 1,391 unique). The actor splits by region, sub-area, work-from-home, job type, skills and related job titles; beyond the reachable set the slices repeat, so narrow the filters or split the query by area for deeper coverage.\n\n**Why are some jobs missing salary numbers?**\nMany UK employers advertise \"Competitive\" or omit pay entirely. The actor never invents a figure: the `salary` text is kept exactly as published, and numeric fields appear only when a real amount is shown.\n\n**Are date filters exact?**\nYes. When you choose a date window, every returned job is checked against its posting date, so results stay inside the window even on pages where Totaljobs' own date control is unavailable.\n\n**How does the salary filter treat hourly and daily rates?**\nHourly pay is annualised over 2,080 hours and daily rates over 220 working days. A job is kept when its annualised range overlaps your `salaryMin`/`salaryMax` window. Jobs with no published pay cannot be verified, so they are skipped while a salary filter is active.\n\n**What is the difference between `applyUrl` and `jobUrl`?**\n`jobUrl` is the public vacancy page. `applyUrl` is the application entry point for that vacancy — for jobs with external application systems, Totaljobs asks you to sign in before forwarding you to the employer's site.\n\n**How do I get only the jobs posted since my last run?**\nSet `onlyNewJobs` to `true` and keep the rest of the search identical. The actor remembers the job IDs it returned for that search, so the next run returns only unseen vacancies. The first run returns everything and becomes the baseline.\n\n**Can I sort by relevance?**\nNo. Totaljobs only serves its newest-first order to anonymous requests; the relevance option depends on a signed-in session and cannot be combined with the filters. The actor always returns newest-first results.\n\n**Why do some records lack coordinates or a company logo?**\nOnly what the employer and Totaljobs publish is returned. Listings without a mapped address or logo simply omit those fields.\n\n**Does the actor need cookies, logins or a proxy setup?**\nNo. It uses only public pages and chooses a working UK connection automatically. Just fill in the input and run.\n\n**Is this affiliated with Totaljobs?**\nNo. This is an independent tool that reads publicly available Totaljobs pages. It is not affiliated with, endorsed by, or sponsored by Totaljobs or StepStone.\n",
      "input": {
        "title": "Totaljobs UK Vacancy Finder Input",
        "description": "Find live UK vacancies on Totaljobs by keyword and area, browse a whole area, or scrape specific Totaljobs URLs. Optional filters: date posted, work from home, job type, sort order and salary band.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "Choose what to scrape. The last three values are aliases kept for tasks saved before the revamp.",
            "editor": "select",
            "enum": [
              "search",
              "browseLocation",
              "byUrls",
              "searchJobs",
              "searchByLocation",
              "searchBySalary"
            ],
            "enumTitles": [
              "Search jobs by keyword and area",
              "Browse every job in an area",
              "Scrape specific Totaljobs URLs",
              "Search jobs by keyword (legacy alias)",
              "Browse every job in an area (legacy alias)",
              "Search with a salary band (legacy alias)"
            ],
            "default": "search",
            "prefill": "search"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Job titles or search terms, e.g. `software developer` or `registered nurse`. Each keyword is searched separately. (mode=search)",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "prefill": [
              "software developer"
            ]
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "UK town, city, county or postcode, e.g. `London`, `Manchester`, `Edinburgh`, `SW1A`. Leave empty to search the whole UK by keyword.",
            "editor": "textfield",
            "prefill": "London"
          },
          "postedWithin": {
            "title": "Date posted",
            "type": "string",
            "description": "Only include jobs posted within this window. Leave empty for any date.",
            "editor": "select",
            "enum": [
              "1",
              "3",
              "7",
              "14"
            ],
            "enumTitles": [
              "Last 24 hours",
              "Last 3 days",
              "Last 7 days",
              "Last 14 days"
            ]
          },
          "workFromHome": {
            "title": "Work from home",
            "type": "string",
            "description": "Include only home-working roles, or exclude them. Leave empty for both.",
            "editor": "select",
            "enum": [
              "only",
              "exclude"
            ],
            "enumTitles": [
              "Only work-from-home jobs",
              "Exclude work-from-home jobs"
            ]
          },
          "jobType": {
            "title": "Job type",
            "type": "string",
            "description": "Employment type as classified by Totaljobs. Leave empty for all types.",
            "editor": "select",
            "enum": [
              "permanent",
              "contract",
              "temporary",
              "part-time",
              "work-from-home",
              "full-time",
              "internship",
              "apprenticeship"
            ],
            "enumTitles": [
              "Permanent",
              "Contract",
              "Temporary",
              "Part-time",
              "Work from home",
              "Full-time (legacy — no longer a Totaljobs filter, ignored)",
              "Internship (legacy — no longer a Totaljobs filter, ignored)",
              "Apprenticeship (legacy — no longer a Totaljobs filter, ignored)"
            ]
          },
          "salaryMin": {
            "title": "Minimum salary (£/year)",
            "type": "integer",
            "description": "Only keep jobs whose advertised pay reaches this annual amount. Hourly and daily rates are converted to a yearly figure. Jobs without a published salary are skipped when a salary filter is set.",
            "minimum": 0,
            "maximum": 500000
          },
          "salaryMax": {
            "title": "Maximum salary (£/year)",
            "type": "integer",
            "description": "Only keep jobs whose advertised pay starts at or below this annual amount. Hourly and daily rates are converted to a yearly figure.",
            "minimum": 0,
            "maximum": 500000
          },
          "includeDetails": {
            "title": "Open each job page",
            "type": "boolean",
            "description": "Fetch full descriptions, exact posting and expiry dates, parsed salary bands, company details, map coordinates and apply links. Turn off for a faster, lighter listing-only run.",
            "default": true,
            "prefill": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Return only jobs that were not present in the previous run of this same search. The first run returns everything and seeds the baseline.",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Max jobs",
            "type": "integer",
            "description": "Maximum number of jobs to save. Totaljobs returns at most 100 jobs per search query; above that the actor automatically splits the search by area and filters to reach more.",
            "minimum": 1,
            "maximum": 5000,
            "default": 100,
            "prefill": 3
          },
          "urls": {
            "title": "Totaljobs URLs",
            "type": "array",
            "description": "Search pages, company job pages or individual job pages. You can mix them. (mode=byUrls)",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Totaljobs UK Vacancy Finder Output",
        "description": "UK vacancies from Totaljobs — job title, employer, location and map coordinates, posted and expiry dates, salary text and parsed salary band, full description, remote flag, company profile and apply links.",
        "properties": {
          "jobs": {
            "type": "string",
            "title": "Totaljobs vacancies",
            "description": "Dataset containing all scraped Totaljobs UK job listings.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Jobs",
              "transformation": {
                "fields": [
                  "title",
                  "company",
                  "location",
                  "salary",
                  "salaryMin",
                  "salaryMax",
                  "jobType",
                  "workType",
                  "isRemote",
                  "postedDate",
                  "jobUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.0.2",
    "imageDigest": "8fa78b401722dd8d5859c095d640c22ae70d890ccfaa7dd8831fa8ca5826de6b",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.017146666666666668
    }
  }
}