Use Reed.co.uk UK Job Listings & Pay Extractor with Python
Search live Reed.co.uk vacancies by keyword and location and get structured job records with parsed pay ranges, job type, remote status and job descriptions.
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.
{
"contract": false,
"easyApplyOnly": false,
"fetchDetails": true,
"fullTime": false,
"graduateOnly": false,
"hideNoSalary": false,
"hideSurveyJobs": false,
"hideTrainingJobs": false,
"keywords": "software engineer",
"maxItems": 3,
"mode": "search",
"partTime": false,
"permanent": false,
"postedBy": "any",
"postedWithin": "anytime",
"proximity": "10",
"remoteOption": "any",
"sector": "any",
"temporary": false,
"visaSponsorship": false
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | Search Reed's job listings, or scrape specific Reed search/job URLs. |
keywords | string | optional | Job title, skill or phrase to search for (mode=search). |
searchQueries | array | optional | Run several keyword searches in one run (mode=search). When set, this replaces Keywords. |
location | string | optional | UK town, city, region or postcode (mode=search). Leave blank for UK-wide. |
sector | string | optional | Limit results to one of Reed's parent sectors (mode=search). |
proximity | string | optional | Radius around the location (mode=search). |
salaryFrom | integer | optional | Annual salary floor in pounds (mode=search). Reed matches jobs whose salary range overlaps this floor. |
salaryTo | integer | optional | Annual salary ceiling in pounds (mode=search). Reed matches jobs whose salary range overlaps this ceiling. |
postedWithin | string | optional | Only return jobs posted in this window (mode=search). |
postedBy | string | optional | Filter by who advertised the job (mode=search). |
remoteOption | string | optional | Filter by remote, hybrid or on-site work (mode=search). |
permanent | boolean | optional | Only permanent contracts (mode=search). |
contract | boolean | optional | Only contract roles (mode=search). |
temporary | boolean | optional | Only temporary roles (mode=search). |
fullTime | boolean | optional | Only full-time roles (mode=search). |
partTime | boolean | optional | Only part-time roles (mode=search). |
graduateOnly | boolean | optional | Only graduate roles (mode=search). |
easyApplyOnly | boolean | optional | Only jobs with Reed Easy Apply (mode=search). |
visaSponsorship | boolean | optional | Only jobs Reed marks as offering visa sponsorship (mode=search). |
hideNoSalary | boolean | optional | Exclude listings where no salary is displayed (mode=search). |
hideTrainingJobs | boolean | optional | Exclude training-course adverts (mode=search). |
hideSurveyJobs | boolean | optional | Exclude survey-job adverts (mode=search). |
searchUrls | array | optional | One or more Reed search URLs (mode=byUrl). Their filters are preserved; other filters here are added when absent. |
jobUrls | array | optional | One or more Reed job URLs or numeric job IDs (mode=byUrl). |
fetchDetails | boolean | optional | Open each job page for the full description, display salary, per-annum pay and location details. Turn off for a faster listing-only run. |
maxItems | integer | optional | Maximum number of job records to return (1-10,000). Reed exposes at most 10,000 results per search. |
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/oH5FuQqgUuRsixihL/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.
Reed.co.uk job listings with full descriptions, parsed pay ranges, employer and location metadata, sector, skills and direct job URLs.
Questions before you run
Which inputs are required?
No top-level fields are marked required in the published schema. Conditional requirements can still apply; check the README.
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 PXJc0ImTfiwpuWFBr and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.