DEV Community

Scrapify
Scrapify

Posted on

Scrape UK jobs from Reed.co.uk with salary filters (Python and JavaScript)

Disclosure: I built this. I built the Apify Actor used in this post. It is pay-per-use and the prices are listed below, along with what rivals charge, so you can compare before you try anything.

Reed.co.uk is one of the biggest UK job boards, and it is a good source if you want to track salaries, build a "new jobs" feed or collect hiring-company lists. Reed does offer a free official API (key required, with its own terms and limits); this post covers a no-key route that also returns per-year salary estimates and works on a schedule. This post shows how to pull jobs with salary filters into a dataset using a few lines of code.

What you get

Each job comes back as one row with the title, employer, location, salary range, contract type, working pattern and posting date. Hourly, daily, weekly and monthly pay also gets a per-year estimate (salaryFromPerYearEst, est.: 40 h x 50 weeks, 250 days) so you can sort a mixed list.

Real rows from a run (trimmed, taken from the Actor's sample-output.json):

Title Company Location Salary from Salary to Period Contract Posted
Senior Python Software Engineer - Security Cleared Searchability NS&D London 65000 100000 per annum Permanent 2026-10-23
Python Software Engineer - SC Cleared Searchability NS&D London 40000 50000 per annum Permanent 2026-10-23
Technical Lead Python Engineer Spectrum IT Recruitment London 90000 100000 per annum Permanent 2026-10-20
Senior Full-Stack Engineer - Python / React Bond Williams London 70000 90000 per annum Permanent 2026-10-22

Run it from Python

Install the client with pip install apify-client and put your Apify API token in the APIFY_TOKEN environment variable.

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

run_input = {
    "keywords": ["python developer"],
    "locations": ["London"],
    "minSalary": 50000,          # GBP per year
    "hideJobsWithoutSalary": True,
    "permanent": True,
    "maxAgeDays": 7,             # exact posting-date cut-off
    "maxItems": 50,              # hard cap on cost
}

run = client.actor("scrapefy/reed-jobs-scraper-uk").call(run_input=run_input)

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], "|", job["company"], "|", job["salaryFrom"], "-", job["salaryTo"], job["salaryPeriod"])
Enter fullscreen mode Exit fullscreen mode

Run it from JavaScript

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('scrapefy/reed-jobs-scraper-uk').call({
    keywords: ['python developer'],
    locations: ['London'],
    minSalary: 50000,
    hideJobsWithoutSalary: true,
    permanent: true,
    maxAgeDays: 7,
    maxItems: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const job of items) {
    console.log(job.title, '|', job.company, '|', job.salaryFrom, '-', job.salaryTo, job.salaryPeriod);
}
Enter fullscreen mode Exit fullscreen mode

You can also paste any Reed search URL into startUrls instead of using keywords and places, which is handy if you have already set up the filters in your browser.

The filters that matter

  • Salary: minSalary, maxSalary and hideJobsWithoutSalary. Reed applies the salary filter itself, so a 40-50k job can show up for a 50k minimum because the ranges overlap. If you need a strict cut, filter again on salaryFromPerYearEst in your own code.
  • Contract: permanent, contract, temp, fullTime, partTime.
  • Working pattern: workingOption is remote, hybrid or office.
  • Who posts it: directEmployersOnly or agencyOnly.
  • Freshness: maxAgeDays is checked against each job's own posting date, not only Reed's date bucket.
  • Descriptions: includeDetails fetches the full description, sector, skills and reference for each job. It costs an extra event per job.

A daily new-jobs feed

Set onlyNew to true and schedule the Actor once a day in Apify. It remembers the job IDs it has already returned and skips them, and skipped jobs are not charged. Point a webhook at your own endpoint, or an integration such as Google Sheets, n8n or Make, and you have an alert for new matching jobs.

What it costs, and what rivals charge

Current Actor pricing checked via the Apify API on 29 Oct 2026. Pay per event: $0.0006 per job, $0.002 per detail page if you switch details on, and $0.00005 per run start. 1,000 jobs is $0.60 (about $2.60 with descriptions). You are not charged for duplicates, jobs filtered out by age or only-new mode, or anything past maxItems. If Reed blocks a run and nothing comes back, the run fails instead of finishing "successfully" with zero rows.

Other Reed scrapers on the Apify Store, from our own benchmark (Store API data pulled 2026-10-22; prices as listed then, so check the pages for current ones; we did not run the rivals):

Actor Users (30 days) Charges (free tier)
scrapersdelight/reed-jobs-scraper 141 $0.0005 per job, plus monitor/alert events
santamaria-automations/reed-uk-scraper 31 start $0.001 + $0.003 per result + $0.005 per detail
shahidirfan/Reed-Job-Scraper 28 start $0.005 + $0.001 per result
memo23/reed-jobs-scraper 25 start $0.007 + $0.001 per result + extras
fetch_cat/reed-co-uk-jobs-scraper 24 start $0.005 + $0.0000575 per item
scrapefy/reed-jobs-scraper-uk (ours) new $0.0006 per job, $0.00005 start

The most-used rival is cheaper per job than we are. Ours is a small-run and filters story: the per-run start fee is nearly zero and the salary, date and only-new filters are applied before you are charged. If you are pulling hundreds of thousands of jobs and only price matters, compare the numbers above.

Limits and legal notes

  • Only publicly visible job-ad data is collected: no logins, no applying, and recruiter contact details are not collected.
  • Posting times are Reed's UK local time, so a date check can be off by up to an hour in summer.
  • Use the data in line with Reed's terms and UK/EU data-protection law. Job ads are mostly company data, but check before you build anything that stores personal details.

Try it

The Actor page, with the full input list and a free-tier run: https://apify.com/scrapefy/reed-jobs-scraper-uk

A runnable copy of the code above, with sample output, is in the example repo for this post: https://github.com/scrapifyhq/reed-uk-jobs-example. If something breaks or a field is missing, open an issue on the Actor's Issues tab with the run link and I will look at it.

Top comments (0)