# Reed Jobs Scraper: UK Job Listings & Salaries (`buy-it/reed-jobs-scraper`) Actor

Scrape UK job listings from Reed.co.uk by keyword, location and date. Extract job title, company, salary range, location, working option, posting date and optional full descriptions. Export JSON, CSV or Excel, use the API, or schedule runs.

- **URL**: https://apify.com/buy-it/reed-jobs-scraper.md
- **Developed by:** [Ioannis Kokkinis](https://apify.com/buy-it) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 job listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Reed Jobs Scraper: UK job listings and salaries from Reed.co.uk

**Reed Jobs Scraper** extracts public job listings from [Reed.co.uk](https://www.reed.co.uk), the UK job board. Search by keyword, city and date posted, and get clean structured data with **title, company, salary range, location, working option (remote, hybrid, office), posting date and sector**. Add the full job description with one switch. Export to **JSON, CSV or Excel**, call it through the **Apify API**, or run it on a schedule.

Try it on the free plan: the default run returns 100 jobs.

### What data does Reed Jobs Scraper return?

| Field | Example |
|---|---|
| `title` | Software Engineer |
| `company` | Moorepay |
| `location`, `county` | Manchester, Lancashire |
| `salaryFrom`, `salaryTo` | 60000, 60000 (GBP, when shown) |
| `salaryPeriod` | year (also `hour` or `day` for hourly and day rates) |
| `employmentType` | full-time |
| `workingOption` | hybrid |
| `postedAt`, `updatedAt`, `expiresAt` | 2026-04-15T08:24:47.34 |
| `sector`, `subSector` | Engineer, Software Engineer |
| `snippet` | Short description from the listing |
| `url`, `jobId` | Link and Reed job id |
| `description`, `descriptionText` | Full description as HTML and plain text (optional) |
| `contractType`, `sectorGroup`, `postedByType` | Permanent, IT & Telecoms, employer or agency (with the full description option) |

### How to scrape Reed.co.uk jobs

1. Click **Try for free** and open the Input tab.
2. Add one or more **search keywords**, for example `data analyst` or `nurse`.
3. Optionally set a **location** (for example `London`), a **radius** and **date posted**.
4. Set **Maximum jobs** and press **Start**.
5. Download the dataset as JSON, CSV or Excel, or read it through the API.

### How much does it cost to scrape Reed jobs?

The Actor uses pay-per-result pricing, so you pay only for jobs returned, and you can cap spending with the maximum charge setting on the run. Turning on **Include full job description** opens one extra page per job, which is slower but returns the full text. Pricing is shown on the Actor page.

### Input example

```json
{
  "searchQueries": ["data analyst", "python developer"],
  "location": "London",
  "radiusMiles": 10,
  "datePosted": "lastWeek",
  "maxItems": 200,
  "includeDescription": false
}
```

### Output example

```json
{
  "jobId": 56785467,
  "url": "https://www.reed.co.uk/jobs/software-engineer/56785467",
  "title": "Software Engineer",
  "company": "Moorepay",
  "location": "Manchester",
  "county": "Lancashire",
  "postedAt": "2026-04-15T08:24:47.34",
  "salaryFrom": 60000,
  "salaryTo": 60000,
  "salaryCurrency": "GBP",
  "salaryPeriod": "year",
  "employmentType": "full-time",
  "workingOption": "hybrid",
  "sector": "Engineer",
  "subSector": "Software Engineer",
  "searchQuery": "software engineer"
}
```

### Filters

Narrow a search without opening Reed:

- **Salary** minimum and maximum (GBP per year)
- **Job type**: permanent, contract, temporary (combine several)
- **Working hours**: full-time or part-time
- **Remote or on-site**: on-site, hybrid or remote
- **Posted by**: recruitment agency or direct employer
- **Only jobs that show a salary**
- **Date posted**: today, last 3 days, last week, last 2 weeks
- **Location and radius**

You can also paste any **Reed search URL** (set the filters on reed.co.uk, copy the address) into *Reed search URLs*.

### Get only new jobs every day

1. Turn on **Only jobs not returned before**.
2. Set **Date posted** to *Today* (or *Last 3 days* for safety).
3. Schedule the Actor daily and send the results to Google Sheets, Slack or a webhook.

The Actor remembers which jobs your account already received (for 90 days) and returns only the new ones, so you pay only for new listings.

### Use cases

- **Job market research:** track demand, salaries and remote or hybrid share by role and city.
- **Recruitment and talent intelligence:** watch which companies are hiring and for what.
- **Job aggregators and alerts:** feed a job board, newsletter or Slack alert with fresh UK listings.
- **Salary benchmarking:** compare advertised pay ranges by title, sector and region.

### FAQ

#### Is it legal to scrape Reed.co.uk?

The Actor reads only publicly visible job listings, the same pages a visitor sees without logging in, and it collects no personal data about candidates. Reed's robots.txt allows crawling of job search pages. You are responsible for using the data in line with Reed's terms and applicable law such as GDPR.

#### Why are some salaries empty?

Many employers do not publish a salary. In that case `salaryFrom` and `salaryTo` are `null`.

#### Does it scrape every page of results?

Yes. Reed shows 25 jobs per page and the Actor keeps paging until it reaches **Maximum jobs** or the end of the results, including searches with tens of thousands of jobs. Duplicates across keywords are removed.

#### Why did I get fewer jobs than expected?

Promoted (sponsored) placements are skipped so they do not appear twice. Reed also changes its listings while a run is in progress, so the total can move by a few jobs.

#### Does it need a login or cookies?

No.

#### Can I schedule it or connect it to other tools?

Yes. Use Apify schedules, webhooks, the API, or integrations such as Zapier, Make and Google Sheets.

#### Something looks broken. What should I do?

Open an issue from the Actor page with the run link. Reed can change its site, and problems are fixed quickly.

### Related actors

More scrapers from the same publisher:

- [LinkedIn Jobs Scraper](https://apify.com/buy-it/linkedin-jobs-scraper) — Public job search results

# Actor input Schema

## `searchQueries` (type: `array`):

Job titles or keywords to search for, one per line, for example "software engineer" or "nurse".

## `startUrls` (type: `array`):

Paste any Reed search results page, for example after setting filters on reed.co.uk. Used together with the keywords above.

## `location` (type: `string`):

Optional UK town, city or region, for example "London". Leave empty to search all of the UK.

## `radiusMiles` (type: `integer`):

Distance around the location. Only used when a location is set.

## `datePosted` (type: `string`):

Only return jobs posted within this period.

## `salaryFrom` (type: `integer`):

Only jobs paying at least this much per year.

## `salaryTo` (type: `integer`):

Only jobs paying up to this much per year.

## `jobTypes` (type: `array`):

Leave empty for all types. Choose several to combine them.

## `workingHours` (type: `string`):

Only full-time or only part-time jobs. Leave on Any for both.

## `workingOption` (type: `string`):

Filter by where the work is done: on-site, hybrid or fully remote.

## `postedBy` (type: `string`):

Only jobs posted by a recruitment agency, or only by the hiring employer directly.

## `onlyWithSalary` (type: `boolean`):

Hide jobs without a displayed salary.

## `onlyNewJobs` (type: `boolean`):

Skips jobs this account already received in earlier runs, so scheduled runs return only new listings. Best combined with a Date posted filter.

## `maxItems` (type: `integer`):

Stop after this many jobs in total across all keywords and URLs.

## `includeDescription` (type: `boolean`):

Opens each job page to add the full description, contract type, sector group and whether an agency or employer posted it (slower and uses more compute).

## `proxyConfiguration` (type: `object`):

Proxy used for requests.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer"
  ],
  "startUrls": [],
  "radiusMiles": 10,
  "datePosted": "anytime",
  "workingHours": "any",
  "workingOption": "any",
  "postedBy": "any",
  "onlyWithSalary": false,
  "onlyNewJobs": false,
  "maxItems": 100,
  "includeDescription": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

Scraped job listings as a table. Download as JSON, CSV or Excel.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "software engineer"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("buy-it/reed-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["software engineer"],
    "startUrls": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("buy-it/reed-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "software engineer"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call buy-it/reed-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,buy-it/reed-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GK1pqYKjgls4BfZdj/builds/OpylchO7lwgS48FSX/openapi.json
