# Reed Jobs Scraper API \[$1💰] — UK Salaries + Emails (`memo23/reed-jobs-scraper`) Actor

Scrape Reed.co.uk for rich, structured job data. Extract exact min/max salaries, remote working options, required skills, full HTML descriptions, location coordinates, company names, and direct application links. Perfect for recruitment, candidate sourcing, and market trend analysis.

- **URL**: https://apify.com/memo23/reed-jobs-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 160 total users, 21 monthly users, 89.3% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 1,000 results

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

### Overview

The **Reed.co.uk Jobs Scraper** is a powerful tool designed to extract comprehensive data from [Reed.co.uk](https://www.reed.co.uk/), one of the leading job boards in the UK. This scraper delivers rich, structured data from job listings to support recruitment, market research, and competitive analysis.

With this scraper, users gain access to **detailed job listings** including job titles, company names, salary ranges, posting dates, location, remote working options, required skills, and full HTML descriptions.

Whether you're a recruiter analyzing the UK job market, an HR professional sourcing candidates, or a market researcher studying employment trends, this scraper provides the complete, structured dataset needed for professional-grade analysis.

***

### Features

- **Multi-Input Scraping**:
  - Scrape job search results by providing specific URLs, or simply enter a keyword, location, and posted date filter to auto-generate a search.
  - Supports direct job detail URLs as well.

- **Efficient Data Extraction**:
  - Handles pagination to capture all job listings across multiple pages.
  - Automatically retries failed requests for seamless scraping.
  - Fetches detailed job data using the underlying mobile API for each listing.

- **Proxy Integration**:
  - Supports custom proxies and Apify Proxy for reliable, anonymous scraping.

- **Detailed Data Output**:
  - Job listings: 30+ fields including exact salary numbers, employment type, location coordinates, required skills, company details, application statuses, and the raw listing data.

***

### How to Use

1. **Set Up**: Ensure you have an Apify account and access to the Apify platform.
2. **Provide Input Data**: Input specific scraping parameters — either `startUrls`, or combinations of `keyword`, `location`, and `postedDate`.
3. **Adjust Scraper Settings**: Configure settings like `maxConcurrency`, `minConcurrency`, and `maxRequestRetries` to optimize performance.
4. **Run the Scraper**: Execute the scraper on the Apify platform.
5. **Download Results**: Export the scraped data in your preferred format (JSON, CSV, Excel).

***

### Input Configuration

To use the scraper, configure the input parameters as follows:

#### Option 1: Using Start URLs

```json
{
    "startUrls": [
        {
            "url": "https://www.reed.co.uk/jobs/part-time-work-from-home-data-engineer-jobs"
        },
        {
            "url": "https://reed.co.uk/jobs/net-developer-cowes/56558318"
        }
    ],
    "maxItems": 100,
    "maxConcurrency": 10,
    "minConcurrency": 1,
    "maxRequestRetries": 3,
    "includeListingDetails": true,
    "proxy": {
        "useApifyProxy": true
    }
}
```

#### Option 2: Using Keyword, Location, and Date Filters

```json
{
    "keyword": "data engineer",
    "location": "london",
    "postedDate": "last3days",
    "maxItems": 100,
    "includeListingDetails": true,
    "proxy": {
        "useApifyProxy": true
    }
}
```

#### Input Fields Explanation

- **Start URLs** (`startUrls`): URLs from which the scraper will begin extracting data. Accepts:
  - **Job Search URLs**: `https://www.reed.co.uk/jobs/part-time-work-from-home-data-engineer-jobs`
  - **Direct Job URLs**: `https://reed.co.uk/jobs/net-developer-cowes/56558318`
- **Keyword** (`keyword`): Keywords for job search (e.g., `"data engineer"`). Used when no `startUrls` are provided or as a fallback.
- **Location** (`location`): City/location for job search (e.g., `"london"`).
- **Posted Date** (`postedDate`): Filter by date posted. Allowed values: `"anytime"`, `"today"`, `"last3days"`, `"last7days"`, `"last14days"`.
- **Include Listing Details** (`includeListingDetails`): When `true`, fetches full job details using the Reed mobile API. Default is `true`.
- **Max Items** (`maxItems`): Maximum number of listings to scrape per run. Default is `10000`.
- **Max Concurrency** (`maxConcurrency`): Maximum number of pages processed simultaneously. Default is `10`.
- **Min Concurrency** (`minConcurrency`): Minimum number of pages processed simultaneously. Default is `1`.
- **Max Request Retries** (`maxRequestRetries`): Number of retries for failed requests. Default is `3`.
- **Proxy Configuration** (`proxy`): Settings for reliable and anonymous scraping. Default uses Apify's Proxy.

***

### Output Structure

The scraper produces structured JSON output for job listings.

#### Job Listing Output

Each listing contains the following fields:

```json
{
    "id": 56549094,
    "jobId": 56549094,
    "url": "https://www.reed.co.uk/jobs/front-end-full-stack-developer-vue-javascript-python/56549094",
    "title": "Front-End/Full Stack Developer Vue, JavaScript, Python",
    "companyName": "Hays Specialist Recruitment Limited",
    "location": "Barnstaple",
    "latitude": 51.0991685,
    "longitude": -4.008485,
    "displaySalary": "£30,000 to £50,000 per annum",
    "shortDisplaySalary": "£30,000 to £50,000 pa",
    "salaryFrom": 30000,
    "salaryTo": 50000,
    "salaryCurrencyId": 1,
    "salaryType": 5,
    "jobType": "permanent",
    "isPartTime": false,
    "isFullTime": true,
    "remoteWorkingOption": "notSpecified",
    "postedOn": "2026-02-27T13:57:01.000Z",
    "createdOn": "2026-02-27T13:57:01.000Z",
    "updatedOn": "2026-03-03T14:02:16.72",
    "expiryOn": "2026-03-27T23:55:00.000Z",
    "description": "<p><strong>Front-End/Full Stack Developer (Vue, JavaScript, Python)<br />Barnstaple, North Devon (Office Based) </strong>...</p>",
    "skills": [
      "CSS",
      "HTML",
      "JavaScript",
      "jQuery",
      "React",
      "UI",
      "Engineer",
      "Front End Developer",
      "Vue",
      "Angular",
      "TypeScript",
      "Svelte"
    ],
    "statuses": [
      "easyApply",
      "posted"
    ],
    "isExternal": false,
    "externalLink": null,
    "emailForApplications": "Field is hidden",
    "applicationStatus": null,
    "isApplicationWithdrawn": null,
    "isEasyApply": true,
    "logoImage": "https://resources.reed.co.uk/profileimages/logos/Banner_36210.png",
    "sourceListUrl": "https://www.reed.co.uk/jobs?keywords=python+web+developer",
    "scrapedAt": "2026-03-04T13:53:08.585Z",
    "rawListData": { }
}
```

#### Job Listing Field Descriptions

##### General Information

- **id**: Unique identifier for the job posting in our dataset.
- **jobId**: The official Reed job ID (e.g., `56549094`).
- **url**: Full URL to the job posting on Reed.co.uk.
- **title**: The job title (e.g., `"Front-End/Full Stack Developer Vue, JavaScript, Python"`).
- **companyName**: Name of the hiring company or recruitment agency (e.g., `"Hays Specialist Recruitment Limited"`).
- **logoImage**: URL to the company's logo image.
- **description**: Full HTML-formatted job description, including responsibilities, requirements, benefits, and about the company.
- **skills**: Array of skills tagged or extracted for the job listing.
- **statuses**: Array of statuses related to the listing (e.g., `["easyApply", "posted"]`).

##### Location & Map Data

- **location**: City/town where the job is located (e.g., `"Barnstaple"`).
- **latitude**: The latitude coordinates of the job location.
- **longitude**: The longitude coordinates of the job location.
- **remoteWorkingOption**: Remote work policy. Values: `"notSpecified"`, `"remote"`, etc.

##### Salary Information

- **displaySalary**: Human-readable salary string (e.g., `"£30,000 to £50,000 per annum"`).
- **shortDisplaySalary**: Shorthand salary string (e.g., `"£30,000 to £50,000 pa"`).
- **salaryFrom**: Minimum annual/hourly salary as a number (e.g., `30000`).
- **salaryTo**: Maximum annual/hourly salary as a number (e.g., `50000`).
- **salaryCurrencyId**: Internal Reed ID for the currency (e.g., `1` for GBP).
- **salaryType**: Internal Reed ID for the salary interval (e.g., annual, daily, hourly).

##### Employment Details

- **jobType**: Type of employment contract (e.g., `"permanent"`, `"contract"`, `"temporary"`).
- **isPartTime**: Boolean indicating if the role is part-time.
- **isFullTime**: Boolean indicating if the role is full-time.

##### Dates & Timestamps

- **postedOn**: The date and time when the job was posted (ISO 8601 format).
- **createdOn**: The date and time when the listing was created (ISO 8601 format).
- **updatedOn**: The date and time when the listing was last updated.
- **expiryOn**: The date and time when the job posting expires (ISO 8601 format).
- **scrapedAt**: Timestamp of when this data was scraped (ISO 8601 format).

##### Application Details

- **isExternal**: Boolean indicating if the application is hosted externally (off Reed).
- **externalLink**: URL to the external application page, if applicable.
- **isEasyApply**: Boolean indicating if the job supports Reed's Easy Apply.
- **emailForApplications**: Email address for applications (often hidden/masked).
- **applicationStatus**: Current status of an application (if scraping under an authenticated session).
- **isApplicationWithdrawn**: Boolean indicating if the application was withdrawn.

##### Source & Raw Data

- **sourceListUrl**: The search or list URL from which this job was originally discovered.
- **rawListData**: The complete, unprocessed job data object as returned by the Reed API or initial Next.js data payload. Contains detailed nested objects (like `jobDetail`) for advanced analysis.

***

### Benefits of the Reed Jobs Scraper

- Automates data collection from Reed.co.uk for massive datasets.
- Provides detailed, accurate, and structured data for analysis.
- Supports flexible search inputs using keywords, locations, and timeframes.
- Reliable performance with proxy integration for anonymity.

***

### Why Choose the Reed Jobs Scraper?

The Reed Jobs Scraper is an indispensable tool for HR professionals, recruiters, and market researchers focused on the UK market. It streamlines job market research by delivering high-quality, actionable data directly from Reed, enabling better decision-making and saving time.

***

### Explore More Scrapers

If you found the Reed Jobs Scraper useful, check out other powerful scrapers and actors at [memo23's Apify profile](https://apify.com/memo23). We offer a wide range of tools to enhance your web scraping and automation needs.

***

### Support

- For issues or feature requests, please use the Issues section of this actor.
- For further assistance, contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

***

### Additional Services

- Request customization or a full dataset: <muhamed.didovic@gmail.com>
- Need other platforms scraped? Contact <muhamed.didovic@gmail.com>
- For API services of this scraper, reach out to <muhamed.didovic@gmail.com>

***

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/reed-jobs-scraper`).

**Purpose:** Scrapes job listings from Reed.co.uk (UK job board) — one row per job with salary numbers, skills, location coordinates, and full HTML description pulled from Reed's mobile detail API.

**Minimal input:**

```json
{
    "keyword": "data engineer",
    "location": "london",
    "maxItems": 50
}
```

URL mode (overrides keyword/location): `{ "startUrls": [{ "url": "https://www.reed.co.uk/jobs/part-time-work-from-home-data-engineer-jobs" }], "maxItems": 50 }`

**Output:** one row per job — id, jobId, url, title, companyName, location, latitude, longitude, displaySalary, shortDisplaySalary, salaryFrom, salaryTo, salaryCurrencyId, salaryType, jobType, isPartTime, isFullTime, remoteWorkingOption, postedOn, createdOn, updatedOn, expiryOn, description (HTML), skills, statuses, isExternal, externalLink, isEasyApply, emailForApplications, logoImage, sourceListUrl, scrapedAt, rawListData. With enrichEmails on: contactEmail, contactWebsite, emailEnrichment.

**Behaviors an agent should know:**

- Always set maxItems — the default is 10000 unique jobs.
- startUrls takes priority; keyword/location/postedDate only build a fallback search URL when startUrls is empty. postedDate accepts anytime, today, last3days, last7days, last14days.
- includeListingDetails (default true) enriches each listing via Reed's mobile detail API; set false for faster, shallower results.
- enrichEmails (default false) adds employer contactEmail/contactWebsite via Clearbit + contact-page scraping; best-effort, billed only per email actually found, never for misses.
- Pay-per-event billing — see the Pricing tab on the actor page.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Reed Online Limited or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Reed.co.uk job listing pages — no authenticated endpoints, paid features, or content behind the reed.co.uk login wall. Users are responsible for ensuring their use complies with reed.co.uk's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

***

### SEO Keywords

reed scraper, scrape reed, reed.co.uk scraper, reed jobs api, apify reed, reed jobs scraper, uk jobs scraper, job listings scraper, recruitment data scraper, job board scraper, salary benchmark data, job market analysis, recruiter lead generation, employer email enrichment, skills extraction, uk employment data, tech jobs intelligence, hiring trends data, job vacancy export

# Actor input Schema

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

Reed search URLs to start with. You can also pass direct job detail URLs.

## `keyword` (type: `string`):

Used only if startUrls is empty. Builds a fallback Reed search URL from this keyword. Example: "data engineer".

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

Optional location for fallback URL generation when startUrls is empty. Example: "london".

## `postedDate` (type: `string`):

Filter by date posted when building fallback URL.

## `includeListingDetails` (type: `boolean`):

When enabled, each listing is enriched via Reed mobile detail API.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each employer by discovering the company's website (Clearbit) and reading its contact/about pages. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort, billed per contact email found; only charged when an email is returned, never for misses.

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

Maximum number of unique jobs to collect.

## `maxConcurrency` (type: `integer`):

Maximum number of pages/requests processed in parallel.

## `minConcurrency` (type: `integer`):

Minimum number of pages/requests processed in parallel.

## `maxRequestRetries` (type: `integer`):

How many times a failed request should be retried.

## `proxy` (type: `object`):

Leave as-is: paying users are routed through our own residential pool automatically, and free-plan runs use your own Apify Proxy. Only change this to force a specific proxy of yours.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.reed.co.uk/jobs/part-time-work-from-home-data-engineer-jobs"
    }
  ],
  "keyword": "",
  "location": "",
  "postedDate": "anytime",
  "includeListingDetails": true,
  "enrichEmails": false,
  "maxItems": 10000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 3,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.reed.co.uk/jobs/part-time-work-from-home-data-engineer-jobs"
        }
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = {
    "startUrls": [{ "url": "https://www.reed.co.uk/jobs/part-time-work-from-home-data-engineer-jobs" }],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/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 '{
  "startUrls": [
    {
      "url": "https://www.reed.co.uk/jobs/part-time-work-from-home-data-engineer-jobs"
    }
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call memo23/reed-jobs-scraper --silent --output-dataset

```

## MCP server setup

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