# Reed Jobs Scraper: UK Jobs and Salaries from reed.co.uk (`themineworks/reed-jobs-scraper`) Actor

Scrape reed.co.uk UK jobs by keyword, location and distance: title, company, agency or employer, salary as numbers with its period, contract type, full or part time, on-site, hybrid or remote, dates, category, link and optional full description. No login.

- **URL**: https://apify.com/themineworks/reed-jobs-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Jobs and Salaries from reed.co.uk

[![356 reed.co.uk jobs from Manchester and Leeds in 52 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/reed-jobs-scraper-hero.png)](https://console.apify.com/actors/uk2cHZab8TjV61G4h/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **One of the UK's biggest job boards, with its own filters.** Search reed.co.uk by keyword, town or postcode, distance, salary, contract type, hours, on-site, hybrid or remote and date posted. Our final test run (nurses and accountants in Manchester and Leeds, up to 100 per search) returned 356 jobs in 52 seconds, and a deep test read 1,000 warehouse jobs from 53 pages.
- **Salary as numbers with its period, and no fake figures.** `salary_min`, `salary_max` and `salary_period` (`year`, `day` or `hour`) come from the site's own salary data: 85% of our test jobs had them. When an advertiser hides the pay behind "Competitive salary" or "Salary negotiable", the row says so and leaves the numbers out, because the site's numbers behind those words are placeholders.
- **No login, no cookies, nothing to set up, and you only pay for jobs you receive.** A refused page, a search with no results, a job repeated on a later page or found by another keyword in the same run and, with `onlyNewJobs`, a job an earlier run already gave you are never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/uk2cHZab8TjV61G4h/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Jobs and hiring family:** [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this into the input (JSON view) and press Start. It returns 25 software engineer jobs in London in a few seconds:

```json
{
  "keywords": ["software engineer"],
  "locations": ["London"],
  "maxJobs": 25
}
```

`keywords` takes job titles or skills, one per line, as you would type them on reed.co.uk (`nurse`, `accountant`, `HGV driver`). `locations` takes towns, cities, counties or postcodes (`Manchester`, `Kent`, `LS1`); each keyword is searched in each location within `distanceMiles`. Leave `locations` empty for the whole UK, or `keywords` empty for every job in a place.

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit

#### Copy to your AI assistant

```text
themineworks/reed-jobs-scraper on Apify. Scrapes UK job listings from reed.co.uk, one row per job with title, company, whether an agency or the employer posted it, location and county, salary text with minimum, maximum, currency and period, contract type, full or part time, on-site, hybrid or remote, category, posted, updated and closing dates and link, with an optional full description, sector, town, postcode and region. Call ApifyClient("TOKEN").actor("themineworks/reed-jobs-scraper").call(run_input={"keywords": ["nurse"], "locations": ["Manchester"], "maxJobs": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: none (default keywords ["software engineer"], whole UK). Optional: keywords (list; empty list = every job), locations (list of towns, counties or postcodes; empty = whole UK), distanceMiles (0, 1, 3, 5, 10, 15, 20, 30 or 50; default 10), salaryMin and salaryMax (GBP a year), contractTypes (list of "permanent", "contract", "temporary"), hours (list of "full_time", "part_time"), workingOption ("any", "on_site", "hybrid", "remote"), datePosted ("anytime", "today", "last_3_days", "last_week", "last_2_weeks"), postedBy ("anyone", "agency", "employer"), graduateOnly, easyApplyOnly, visaSponsorshipOnly, salaryShownOnly (default false), hideTrainingCourses (default true), maxJobs (default 100, 25 to 5000 per search), includeDescription (default false), onlyNewJobs (default false). Full spec: GET https://api.apify.com/v2/acts/themineworks~reed-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **35 fields per job, 15 more with descriptions**: job id, title, company with its reed.co.uk job list and logo, agency or employer, location and county, salary text with minimum, maximum, currency, period, hidden flag and extras (OTE, benefits, pro-rata, negotiable), contract type, hours, on-site, hybrid or remote, category and sub category, posted, updated and closing dates, short description, easy apply, right to work required, promoted and featured flags and the job link.
- **Full description on demand**: switch on `includeDescription` for the complete description as text and HTML, the salary exactly as the job page shows it, the sector, town, postcode district, region and country, the skills the advertiser listed and the graduate flag.
- **Every filter of the site**: distance from 0 to 50 miles, salary from and to, permanent, contract or temporary, full or part time, on-site, hybrid or remote, posted today to the last two weeks, agencies or direct employers, graduate jobs, easy apply, visa sponsorship, only jobs that show a salary, and training course listings hidden by default.
- **From 25 to 5,000 jobs per search**, 25 per page, every page reachable. Each keyword in each location is its own search; three run at a time.
- **No double charging**: the site repeats promoted jobs on every page of a search (312 repeats over 53 pages in our deep test); each job is delivered and charged once.
- **Only new jobs on a schedule**: with `onlyNewJobs`, a daily run returns and charges only jobs it has not delivered before.

### How to use it

#### Basic: one keyword in one city

```json
{
  "keywords": ["accountant"],
  "locations": ["Leeds"],
  "maxJobs": 100
}
```

#### Several keywords in several cities

Each keyword runs in each location: this input is 4 searches of up to 100 jobs (our final test run: 356 jobs in 52 seconds, as the two nurse searches had 85 and 71 jobs):

```json
{
  "keywords": ["nurse", "accountant"],
  "locations": ["Manchester", "Leeds"],
  "maxJobs": 100
}
```

#### Job: daily new job alerts

Jobs posted today, only those not delivered before. Save it as a task and add a daily schedule (Console > Schedules); each run returns and charges only new jobs. In our test, a second run of a plumber search in Bristol found the same jobs as the first, delivered none and charged no job.

```json
{
  "keywords": ["care assistant"],
  "locations": ["Bristol"],
  "datePosted": "today",
  "onlyNewJobs": true,
  "maxJobs": 200
}
```

#### Job: contractor day rates for a rate card

Contract roles only, with the day or hourly rate in `salary_min`, `salary_max` and `salary_period`:

```json
{
  "keywords": ["data engineer", "business analyst"],
  "contractTypes": ["contract"],
  "salaryShownOnly": true,
  "maxJobs": 300
}
```

#### Job: direct employers only, with full descriptions

Leave out recruitment agencies and read each job page for the description, sector, town and postcode:

```json
{
  "keywords": ["data analyst", "electrician"],
  "locations": ["Birmingham"],
  "postedBy": "employer",
  "includeDescription": true,
  "maxJobs": 100
}
```

#### Job: remote and hybrid jobs above a salary

```json
{
  "keywords": ["product manager"],
  "workingOption": "remote",
  "salaryMin": 60000,
  "datePosted": "last_2_weeks",
  "maxJobs": 200
}
```

#### Job: graduate roles for a careers service

The site marked 662 engineering jobs as graduate jobs on 6 October 2026. `visaSponsorshipOnly` works the same way, but few advertisers tick it (3 engineering jobs that day), so use it on its own rather than with other narrow filters:

```json
{
  "keywords": ["engineer"],
  "graduateOnly": true,
  "maxJobs": 200
}
```

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `keywords` | array of strings | `["software engineer"]` | Job titles or skills, one per line. Each is its own search in every location. An empty list returns every job that matches the other filters. |
| `locations` | array of strings | empty | Towns, cities, counties or postcodes, one per line. Each is its own search within `distanceMiles`. Empty means the whole UK. |
| `distanceMiles` | integer | `10` | 0, 1, 3, 5, 10, 15, 20, 30 or 50 miles (the site's own choices; other numbers go to the nearest). |
| `salaryMin` | integer | none | Salary from, in GBP a year, as on the site's filter. |
| `salaryMax` | integer | none | Salary up to, in GBP a year. |
| `contractTypes` | array | any | Any of `permanent`, `contract`, `temporary`. |
| `hours` | array | any | Any of `full_time`, `part_time`. |
| `workingOption` | string | `any` | `on_site`, `hybrid` or `remote`. |
| `datePosted` | string | `anytime` | `today`, `last_3_days`, `last_week` or `last_2_weeks`. |
| `postedBy` | string | `anyone` | `agency` (recruitment agencies) or `employer` (direct employers). |
| `graduateOnly` | boolean | `false` | Only graduate jobs. |
| `easyApplyOnly` | boolean | `false` | Only jobs with the site's easy apply. |
| `visaSponsorshipOnly` | boolean | `false` | Only jobs offering visa sponsorship. |
| `salaryShownOnly` | boolean | `false` | Leave out jobs that do not show a salary. |
| `hideTrainingCourses` | boolean | `true` | Leave out the paid training course listings the site mixes into results. |
| `maxJobs` | integer | `100` | Upper limit per search (one keyword in one location), 25 to 5,000. |
| `includeDescription` | boolean | `false` | Adds the full description and the job page fields. One extra page per job. |
| `onlyNewJobs` | boolean | `false` | Skips jobs an earlier run of this actor in your account already delivered. For schedules. |

### What data do you get?

One row per job. A job found by two keywords, in two locations or repeated on a later page is delivered once.

**The job**: `job_id`, `title`, `contract_type`, `hours`, `working_option`, `category`, `subcategory`, `description_short`, `easy_apply`, `uk_work_right_required`, `is_promoted`, `is_featured`, `external_url`, `job_url`.

**The advertiser**: `company`, `company_id`, `company_jobs_url`, `company_logo_url`, `posted_by` (`agency` or `employer`).

**Where**: `location`, `county`.

**Pay**: `salary_text`, `salary_min`, `salary_max`, `salary_currency`, `salary_period` (`year`, `day` or `hour`), `salary_hidden`, `salary_extras`.

**Dates**: `posted_at`, `updated_at`, `expires_at` (UK time, as the site gives them).

**With `includeDescription`**: `description` (plain text), `description_html`, `salary_shown` (exactly as the job page shows it), `sector`, `sector_parent`, `town`, `postcode`, `region`, `country`, `country_code`, `is_remote`, `graduate`, `skills`, `job_live`, `reed_job`, and `description_error` on the rare row whose page could not be read.

**The search**: `search_keyword`, `search_location`, `search_rank`, `scraped_at`.

How full the fields were in our final test runs (356 jobs in Manchester and Leeds; 100 jobs with descriptions in Birmingham):

| Field | Filled | Why not always |
|---|---|---|
| `job_id`, `title`, `company`, `posted_by`, `location`, `contract_type`, `hours`, `posted_at`, `expires_at`, `description_short`, `job_url` | 100% | |
| `salary_text`, `salary_hidden` | 100% (99% in the deep test) | `salary_text` holds the words when the figures are hidden; a job with no pay at all has neither. |
| `category` | 97% | A few jobs have no category. |
| `working_option`, `county` | 95% | A few jobs give neither. |
| `company_logo_url` | 91% | Not every advertiser uploads a logo. |
| `salary_min`, `salary_max`, `salary_period` | 85% | The rest hide their pay (14%) or give none. |
| `subcategory` | 85% | |
| `salary_extras` | 8% | Only OTE, benefits, pro-rata or negotiable pay. |
| `external_url` | 0% | Only for the rare job that redirects off reed.co.uk. |
| `description`, `salary_shown`, `sector`, `town`, `region`, `country` | 100% of 100 | With `includeDescription` on. |
| `skills` | 46% of 100 | Only when the advertiser listed skills. |
| `postcode` | 34% of 100 | Only when the job gives a postcode district. |

#### Stable fields for automations

These fields were present in every row of our test runs and their names will not change:

| Field | Meaning |
|---|---|
| `job_id` | reed.co.uk job id |
| `title` | Job title |
| `company` | Advertiser: the employer or the recruitment agency |
| `posted_by` | `agency` or `employer` |
| `location` | Location as shown |
| `contract_type` | `permanent`, `contract` or `temporary` |
| `hours` | `full_time`, `part_time` or both |
| `posted_at` | When the job was posted, UK time |
| `expires_at` | Closing date, UK time |
| `description_short` | Short description from the search results |
| `job_url` | Job page on reed.co.uk |
| `search_rank` | Position of the job in its search |
| `scraped_at` | When the job was read, ISO 8601 UTC |

#### Output examples

Real rows from our test runs on 6 October 2026; long texts are trimmed.

**A finance manager job from a direct employer with a yearly salary**:

```json
{
  "job_id": "57355315",
  "title": "Finance Manager",
  "company": "GXO Logistics",
  "company_id": "388090",
  "company_jobs_url": "https://www.reed.co.uk/jobs/xpo-logistics/p4259",
  "company_logo_url": "https://resources.reed.co.uk/profileimages/logos/thumbs/Logo_4259.png",
  "posted_by": "employer",
  "location": "Wigan",
  "county": "Lancashire",
  "salary_text": "£66,000 per annum",
  "salary_min": 66000,
  "salary_max": 66000,
  "salary_currency": "GBP",
  "salary_period": "year",
  "salary_hidden": false,
  "contract_type": "permanent",
  "hours": "full_time, part_time",
  "working_option": "hybrid",
  "category": "Manager",
  "subcategory": "Finance Manager",
  "posted_at": "2026-09-16T18:04:17.287",
  "updated_at": "2026-09-26T18:17:17.07",
  "expires_at": "2026-10-28T18:04:17.463",
  "description_short": "Do you enjoy owning the numbers and being the trusted finance voice for operations? ...",
  "easy_apply": false,
  "uk_work_right_required": true,
  "is_promoted": true,
  "is_featured": true,
  "job_url": "https://www.reed.co.uk/jobs/finance-manager/57355315",
  "search_keyword": "accountant",
  "search_location": "Manchester",
  "search_rank": 34,
  "scraped_at": "2026-10-05T22:15:34.525Z"
}
```

**A temporary accountant job from an agency, paid by the day**:

```json
{
  "job_id": "57280679",
  "title": "Management Accountant",
  "company": "Robert Half",
  "posted_by": "agency",
  "location": "Manchester",
  "county": "Lancashire",
  "salary_text": "£350 to £400 per day",
  "salary_min": 350,
  "salary_max": 400,
  "salary_currency": "GBP",
  "salary_period": "day",
  "salary_hidden": false,
  "contract_type": "temporary",
  "hours": "full_time",
  "working_option": "on_site",
  "category": "Accountant",
  "subcategory": "Management Accountant",
  "posted_at": "2026-08-26T16:17:49.617",
  "expires_at": "2026-10-07T23:55:00",
  "description_short": "We are recruiting for a Management Accountant to join a growing international business on a 12 month fixed-term contract. ...",
  "easy_apply": true,
  "job_url": "https://www.reed.co.uk/jobs/management-accountant/57280679",
  "search_keyword": "accountant",
  "search_location": "Manchester",
  "search_rank": 11
}
```

**A research analyst job in Birmingham with `includeDescription` on and the salary hidden by the employer** (the description is trimmed here; the row holds all of it):

```json
{
  "job_id": "57400156",
  "title": "Research Analyst/Writer",
  "company": "Chambers and Partners",
  "posted_by": "employer",
  "location": "Birmingham",
  "county": "West Midlands (County)",
  "salary_text": "Competitive salary",
  "salary_hidden": true,
  "contract_type": "permanent",
  "hours": "full_time",
  "working_option": "hybrid",
  "category": "Analyst",
  "subcategory": "Research Analyst",
  "posted_at": "2026-09-28T18:13:28",
  "expires_at": "2026-11-09T23:55:00",
  "job_url": "https://www.reed.co.uk/jobs/research-analyst-writer/57400156",
  "description": "Overview Join our Insight team at Chambers and Partners as a Research Analyst/Writer. This is a hybrid position, working 2 days per week in either our London or Birmingham office.\n\nAs a Research Analyst, you will play a pivotal role in transforming commentary compiled by our research teams into ...",
  "description_html": "Overview Join our Insight team at Chambers and Partners as a Research Analyst/Writer. ... <br /><br />As a Research Analyst, ...",
  "salary_shown": "Competitive salary",
  "sector": "Other Strategy & Consultancy",
  "sector_parent": "Strategy & Consultancy",
  "town": "Birmingham",
  "region": "West Midlands (Region)",
  "country": "United Kingdom",
  "country_code": "GB",
  "is_remote": false,
  "graduate": false,
  "job_live": true,
  "reed_job": false
}
```

### Pricing

Pay per event: you pay for the job rows you receive, plus a flat $0.005 per run, whatever memory you choose.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `job-scraped` | Once per job row stored in your dataset | $0.40 per 1,000 | $0.40 per 1,000 | $0.40 per 1,000 | $0.40 per 1,000 |
| `run-start` | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |

The price per single job is the price per 1,000 divided by 1,000. A job with the full description costs the same as one without.

Free plan runs return up to 10 results each; paid plans have no cap.

Never charged:

- pages the site refused, and searches the run could not read;
- searches with no results;
- a job already delivered earlier in the same run (repeated on a later page, or found by another keyword or in another location);
- with `onlyNewJobs`, a job an earlier run already delivered to you;
- the info row at the end of a run;
- anything past your "Max cost per run": the actor stops delivering when your limit is reached instead of sending rows for free.

### FAQ

#### What exactly does this actor read?

reed.co.uk, the UK job site, as a visitor who is not signed in: its own search pages and, with `includeDescription`, its job pages. Both are rendered on the server with the job data inside them, so no browser is needed. Nothing is read behind a login, and the site's developer API (which needs a registered key) is not used.

#### How many jobs can I get?

Up to 5,000 per search (one keyword in one location), 25 per page; every page of a search is reachable. The site repeats its promoted jobs on each page of a search, so a deep search delivers fewer jobs than pages times 25: our deep test read 53 pages for 1,000 different warehouse jobs. For more, add keywords or locations; each is its own search.

#### What do I get on the free plan?

Every run on Apify's free plan returns the first 10 results, so you can check the data and the fields before you pay. A paid Apify plan returns every result, up to the limit you set.

#### How long does a run take?

Without descriptions, a page of 25 jobs takes about 2 to 6 seconds: 356 jobs from 4 searches took 52 seconds, and 1,000 jobs from one search took 5 minutes. With descriptions each job needs its own page, ten at a time: 100 jobs took 48 seconds.

#### How is the salary read?

From the site's own salary data on each job, not from the text: `salary_min`, `salary_max`, `salary_period` (`year`, `day` or `hour`) and `salary_currency`. `salary_text` puts them in words the way the site does ("£350 to £400 per day", "£66,000 per annum"), and `salary_extras` lists OTE, benefits, pro-rata or negotiable. When an advertiser shows only "Competitive salary", "Salary negotiable" or "Salary plus commission", `salary_hidden` is `true`, `salary_text` holds those words and no numbers are given: the numbers the site keeps behind those words are placeholders (10,000 to 100,000 is common), not pay.

#### How fresh is the data?

Every run reads the site live. `posted_at` is when the job was posted, `updated_at` its last update and `expires_at` its closing date, all in UK time as the site gives them. Use `datePosted` for recent jobs and `onlyNewJobs` with a schedule for alerts.

#### Do I need an account, cookies or a proxy?

No account, no cookies and nothing to set up. The actor reads the site over Apify's datacenter proxy. About half of those IP addresses are on reed.co.uk's block list; the actor drops a refused IP at once, keeps the ones the site lets through and reuses them. In our final test runs 36 of 212 requests (17%) met a refused IP and were sent again on another, and every search page and every job page was read in the end. Refused requests are never charged.

#### Agency or employer?

`posted_by` says whether a recruitment agency (`agency`) or the employer itself (`employer`) placed the job, and `postedBy` filters on it. In our Manchester and Leeds test, 77% of jobs came from agencies.

#### What if a job is taken down while the run reads it?

The row is still delivered with everything from the search, and `description_error` says the job page could not be read. In our description test all 100 of 100 pages were read.

#### Can I monitor new jobs over time?

Yes. Turn on `onlyNewJobs`, set `datePosted` to `today`, save the input as a task and add a daily schedule. Each run delivers and charges only jobs no earlier run of this actor in your account has delivered.

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and an HTML table, from the run's dataset in Console or through the API.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

- Connector URL: https://mcp.apify.com/?tools=themineworks/reed-jobs-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http reed-jobs-scraper "https://mcp.apify.com/?tools=themineworks/reed-jobs-scraper"`

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

The actor reads only job listings the site shows publicly to visitors who are not signed in. Job descriptions can name a recruiter or give contact details; you are responsible for how you use the data, for the site's terms and for data protection law such as the UK GDPR and the CCPA. If in doubt, ask a lawyer about your use case.

### Integrations

- **Google Sheets**: send each run's rows to a sheet with Apify's Google Sheets integration, or import the CSV link of the dataset.
- **Make, Zapier and n8n**: start the actor and read its dataset with the Apify apps and nodes, for example "new contract jobs with a day rate to Slack every morning".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Indeed Jobs Scraper](https://apify.com/themineworks/indeed-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instahyre Jobs Scraper](https://apify.com/themineworks/instahyre-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Apna Jobs Scraper](https://apify.com/themineworks/apna-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CutShort Jobs Scraper](https://apify.com/themineworks/cutshort-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Jobs Scraper](https://apify.com/themineworks/linkedin-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Recruiting & Jobs MCP](https://apify.com/themineworks/recruiting-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a search that should return jobs and does not? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For another job site, a new source or a field you need, email dmineworks@gmail.com.

*Search reed.co.uk by keyword, place, distance and every filter the site offers, and get each UK job back as a clean row with its pay read into numbers and its advertiser named.*

# Actor input Schema

## `keywords` (type: `array`):

One search per line, as you would type it on reed.co.uk, for example software engineer, nurse, accountant, HGV driver. Each keyword is searched in each location. An empty list returns every job that matches the other filters.

## `locations` (type: `array`):

Towns, cities, counties or postcodes, one per line, for example London, Manchester, Kent, LS1. Each location is its own search, within the distance below. Leave empty for the whole of the UK.

## `distanceMiles` (type: `integer`):

The site's own distances: 0 (the place only), 1, 3, 5, 10, 15, 20, 30 or 50 miles. Another number goes to the nearest of these. Ignored when no location is given.

## `salaryMin` (type: `integer`):

Minimum salary, as on the site's salary filter, for example 30000. The site compares hourly and daily rates as yearly pay.

## `salaryMax` (type: `integer`):

Maximum salary, for example 60000.

## `contractTypes` (type: `array`):

Keep only jobs of these contract types (any of them). Leave empty for any.

## `hours` (type: `array`):

Keep only full time or part time jobs. Leave empty for any.

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

Where the work happens, as the site's own filter.

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

Keep only jobs posted in this period.

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

Jobs from recruitment agencies or from employers directly.

## `graduateOnly` (type: `boolean`):

Keep only jobs the site marks as graduate jobs.

## `easyApplyOnly` (type: `boolean`):

Keep only jobs with the site's easy apply.

## `visaSponsorshipOnly` (type: `boolean`):

Keep only jobs that offer visa sponsorship.

## `salaryShownOnly` (type: `boolean`):

Leave out jobs without a salary on display.

## `hideTrainingCourses` (type: `boolean`):

Leave out the paid training course listings the site mixes into job results. On by default.

## `maxJobs` (type: `integer`):

Upper limit per search (one keyword in one location), 25 to 5,000. The site shows 25 jobs a page. Also the most you pay for per search.

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

Adds the full job description (text and HTML), the salary exactly as the site shows it, sector, town, postcode, region and country. One extra page per job.

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

For schedules: skip jobs an earlier run of this actor in your account already delivered, so each run returns and charges only new jobs. Works best with Date posted. The list of delivered jobs is kept in a named key value store in your account.

## Actor input object example

```json
{
  "keywords": [
    "software engineer",
    "accountant"
  ],
  "locations": [
    "London"
  ],
  "distanceMiles": 10,
  "workingOption": "any",
  "datePosted": "anytime",
  "postedBy": "anyone",
  "graduateOnly": false,
  "easyApplyOnly": false,
  "visaSponsorshipOnly": false,
  "salaryShownOnly": false,
  "hideTrainingCourses": true,
  "maxJobs": 25,
  "includeDescription": false,
  "onlyNewJobs": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "keywords": [
        "software engineer",
        "accountant"
    ],
    "locations": [
        "London"
    ],
    "maxJobs": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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 = {
    "keywords": [
        "software engineer",
        "accountant",
    ],
    "locations": ["London"],
    "maxJobs": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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 '{
  "keywords": [
    "software engineer",
    "accountant"
  ],
  "locations": [
    "London"
  ],
  "maxJobs": 25
}' |
apify call themineworks/reed-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/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/uk2cHZab8TjV61G4h/builds/snfH7GjicaDgZ7zxd/openapi.json
