Use Totaljobs UK Vacancy Finder by Keyword, Area & Pay with Python
Finds live UK vacancies on Totaljobs by job title and city, by browsing a whole region, or by salary band, returning title, company, salary, location and application link.
1. Choose the data you need
Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.
2. Prepare a source-based input
This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.
{
"includeDetails": false,
"keywords": [
"software developer"
],
"location": "London",
"maxItems": 3,
"mode": "search",
"onlyNewJobs": false
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | Choose what to scrape. The last three values are aliases kept for tasks saved before the revamp. |
keywords | array | optional | Job titles or search terms, e.g. `software developer` or `registered nurse`. Each keyword is searched separately. (mode=search) |
location | string | optional | UK town, city, county or postcode, e.g. `London`, `Manchester`, `Edinburgh`, `SW1A`. Leave empty to search the whole UK by keyword. |
postedWithin | string | optional | Only include jobs posted within this window. Leave empty for any date. |
workFromHome | string | optional | Include only home-working roles, or exclude them. Leave empty for both. |
jobType | string | optional | Employment type as classified by Totaljobs. Leave empty for all types. |
salaryMin | integer | optional | 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. |
salaryMax | integer | optional | Only keep jobs whose advertised pay starts at or below this annual amount. Hourly and daily rates are converted to a yearly figure. |
includeDetails | boolean | optional | 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. |
onlyNewJobs | boolean | optional | Return only jobs that were not present in the previous run of this same search. The first run returns everything and seeds the baseline. |
maxItems | integer | optional | 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. |
urls | array | optional | Search pages, company job pages or individual job pages. You can mix them. (mode=byUrls) |
3. Start an Actor run
Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.
Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.
import json
import os
import urllib.request
# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
actor_input = json.load(stream)
token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
"https://api.apify.com/v2/acts/oa2Q6nW8vIp072JMx/runs?timeout=120&maxTotalChargeUsd=0.50",
data=json.dumps(actor_input).encode("utf-8"),
headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.
4. Inspect the actual results
Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.
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.
Questions before you run
Which inputs are required?
The published required fields are mode
What does this guide verify?
The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.
What if the run request times out?
Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.
Generated from source build aIDxbsncwKwDBt3AW and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.