# Reed.co.uk Jobs Scraper - UK Jobs, Salaries & Recruiters API (`rel8ble/reed-jobs-scraper`) Actor

Use this to get UK job ads from Reed.co.uk. Input: keywords, locations, filters or Reed URLs. One result = one job: title, company, agency or employer, location, salary (parsed), contract type, remote/hybrid, date, URL; optional full description, skills and company profile. $0.50 per 1,000.

- **URL**: https://apify.com/rel8ble/reed-jobs-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / 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

## Reed Jobs Scraper & API - UK job ads from Reed.co.uk (salaries, agencies, employers)

**Reed Jobs Scraper** is a Reed.co.uk scraper and unofficial Reed jobs API for UK jobs. Give it keywords, UK locations and filters (or paste Reed search, job, agency or company URLs) and get every matching job ad as clean JSON, CSV or Excel: title, company, whether a recruitment agency or the employer posted it, location, salary (as Reed shows it and as numbers with the period), permanent / contract / temporary, full-time / part-time, remote / hybrid / on-site, posted and expiry dates, the job URL and, if you want it, the full description, the skills list, sector, postcode district and the company profile (website, size, industry, LinkedIn).

It reads the same data the Reed website puts in its own pages, over plain HTTP: no browser, no login and no Reed API key, up to 100 jobs per request. Reed returns at most 10,000 jobs for any one search; this scraper **splits big searches automatically** by sector, contract type, agency / employer, workplace and hours, and merges the results without duplicates. In testing, `driver` (22,289 listed) returned 22,188 jobs in under 3 minutes, and a search for every job on Reed (102,299 listed) returned 102,145 in about 6 minutes.

Use it for **UK recruitment and staffing lead generation** (which employers are hiring accountants in Manchester this week, which agencies are flooding a sector), job boards and aggregators, UK salary and day-rate benchmarking, and labour-market research.

### How to use

1. Type one or more **Search keywords** (`software developer`, `accountant`, `care assistant`, `HGV driver`) and, optionally, **Locations** (`London`, `Manchester`, `Kent`, `SW1A 1AA`). Every keyword is searched in every location. No keyword = all jobs matching your location and filters.
2. Optionally filter: **Distance**, **Minimum / maximum salary**, **Contract types** (permanent, temporary, contract), **Working hours** (full-time, part-time), **Remote / hybrid / on-site**, **Posted by** (employer or agency), **Sectors**, **Posted within (days)**, **Graduate jobs only**, **Easy apply only**, **Visa sponsorship only** and **Only jobs that show a salary**.
3. Set **Max jobs per search** (0 = everything). Tick **Include full description & skills** and / or **Include company profile** if you need them.
4. Click **Start**. Download the results as JSON, CSV, Excel or HTML from the **Output** tab, or pull them through the Apify API, Make, Zapier, n8n or an MCP client.

Already have links? Paste Reed **search URLs**, **job URLs**, **agency / employer job lists** or **company-profile URLs** into *Reed URLs* instead; the filters in a search URL are read from the URL.

### What you get

One dataset item per job ad:

- **Identity**: `id` (Reed job id, stable across runs), `title`, `url`.
- **Advertiser**: `companyName`, `companyId`, `companyJobsUrl` (all its live jobs), `companyLogoUrl`, `postedBy` (Employer, Agency or Other) and `isAgency`.
- **Where**: `location`, `county`, `workplace` (Remote, Hybrid, On-site).
- **Work**: `contractType` (Permanent, Contract, Temporary), `fullTime`, `partTime`, `easyApply`, `ukApplicantsOnly`, `isEarlyBird`, `isPromoted`.
- **Pay**: `salaryText` exactly as Reed shows it ("£650 - £750 per day", "Competitive salary"), plus `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` (hour, day, year) and the flags `salaryNegotiable`, `salaryIncludesBenefits`, `salaryOte`, `commissionOnly`.
- **Dates**: `postedAt`, `createdAt`, `updatedAt`, `expiresAt` (all UTC).
- **Text and category**: `summary` (the first ~150 characters), `category` and `subcategory` from Reed's job taxonomy.
- **Where it came from**: `sourceQuery`, `sourceLocation`, `position`, `scrapedAt`.

With **Include full description & skills** on, each job also gets `description` (plain text), optional `descriptionHtml`, `skills`, `sector`, `sectorGroup`, `town`, `postcodeDistrict`, `region`, `country`, `countryCode`, `isRemote`, `locationType`, `salaryDisplay`, `salaryAnnualMin` / `salaryAnnualMax` (Reed's yearly equivalent of hourly and daily rates), `isGraduate`, `advertReference` (the advertiser's own reference) and `companyProfileUrl`.

With **Include company profile** on, each job also gets, from the advertiser's Reed company profile where one exists: `companyWebsite`, `companySize`, `companyIndustry`, `companyHeadquarters`, `companyDescription`, `companyLinkedIn`, `companyFacebook`, `companyX`, `companyInstagram` and `companyJobsOnReed`. One request per company, not per job.

### Use cases

- **Recruitment agency lead generation**: an employer that advertises its own accountant jobs (`postedBy: ["employer"]`) is a company an agency can call. Run daily with *Posted within 1 day*, add the company profile for the website and LinkedIn, and send new rows to your CRM.
- **Competitor tracking for agencies**: `postedBy: ["agency"]` with a sector and region shows which agencies are advertising what, and `companyJobsUrl` lists everything one agency has live.
- **Salary and day-rate benchmarking**: `salaryMin` / `salaryMax` with `salaryPeriod`, or `salaryAnnualMin` / `salaryAnnualMax` with details on, by role, county and contract type.
- **UK job boards and aggregators**: pull a keyword, a sector or the whole of Reed into your own feed, deduplicated by `id`.
- **Labour-market research**: demand by sector, remote and hybrid share, agency vs employer share, over time.
- **AI agents**: "find hybrid permanent accountant jobs in Manchester paying over £40k posted this week, direct employers only" maps straight onto the input fields.

### Input example

| Field | Default | Description |
|---|---|---|
| `searchQueries` | - | Keywords, one search each. Empty = all jobs matching the filters |
| `locations` | whole UK | Town, city, county, country or postcode |
| `distanceMiles` | 10 | 0, 1, 3, 5, 10, 15, 20, 30 or 50 |
| `salaryMin` / `salaryMax` | - | Pounds per year (hourly and daily rates are compared by their yearly equivalent) |
| `contractTypes` | all | Any of `permanent`, `temporary`, `contract` |
| `workingHours` | both | `fulltime` and / or `parttime` |
| `workplace` | `any` | `remote`, `hybrid` or `onsite` |
| `postedBy` | both | `employer` and / or `agency` |
| `sectors` | all | Reed sectors, e.g. `IT & Telecoms`, `Education`, `Social Care` |
| `postedWithinDays` | 0 (any) | 1 = today, 3, 7, 14, or any number of days |
| `graduateOnly` / `easyApplyOnly` / `visaSponsorshipOnly` | false | Reed's own flags |
| `salaryShownOnly` | false | Hide "Competitive salary" / "Salary negotiable" ads |
| `excludeTrainingCourses` | true | Leave out paid training-course ads Reed mixes into results |
| `maxItems` | 100 | Max jobs per search; 0 = all |
| `deepSearch` | true | Split searches above 10,000 jobs so nothing is cut off |
| `includeDetails` | false | Full description, skills, sector, postcode district (one extra request per job) |
| `includeDescriptionHtml` | false | Also keep the description HTML |
| `includeCompanyDetails` | false | Company profile (one extra request per company) |
| `startUrls` | - | Reed search, job, agency-list or company-profile URLs |
| `proxyConfiguration` | no proxy | Not needed; see Limits |

Permanent, full-time, hybrid accountant and payroll jobs in Manchester and Leeds paying £30k-£70k, posted in the last two weeks by employers themselves:

```json
{
    "searchQueries": ["accountant", "payroll"],
    "locations": ["Manchester", "Leeds"],
    "distanceMiles": 20,
    "salaryMin": 30000,
    "salaryMax": 70000,
    "contractTypes": ["permanent"],
    "workingHours": ["fulltime"],
    "workplace": "hybrid",
    "postedBy": ["employer"],
    "postedWithinDays": 14,
    "maxItems": 50
}
```

Python jobs in London with descriptions and company profiles:

```json
{
    "searchQueries": ["python developer"],
    "locations": ["London"],
    "maxItems": 60,
    "includeDetails": true,
    "includeCompanyDetails": true
}
```

Every `driver` job in the UK, no cap:

```json
{
    "searchQueries": ["driver"],
    "maxItems": 0
}
```

From links you copied off the site:

```json
{
    "startUrls": [
        "https://www.reed.co.uk/jobs/python-developer-jobs-in-london?keywords=python+developer&locationName=London&salaryFrom=60000&perm=true",
        "https://www.reed.co.uk/jobs/intec-select-limited/p41618",
        "https://www.reed.co.uk/company-profile/Savers-611",
        "https://www.reed.co.uk/jobs/python-developers/57418395"
    ]
}
```

### Output example

From a real run (search for `python developer` in `London`, details and company profile on; long texts shortened):

```json
{
    "id": "57418395",
    "title": "Python Developers",
    "url": "https://www.reed.co.uk/jobs/python-developers/57418395",
    "companyName": "INTEC SELECT LIMITED",
    "companyId": "41618",
    "companyJobsUrl": "https://www.reed.co.uk/jobs/intec-select-limited/p41618",
    "companyLogoUrl": "https://resources.reed.co.uk/profileimages/logos/thumbs/Logo_41618.png",
    "postedBy": "Agency",
    "isAgency": true,
    "location": "London",
    "county": "London",
    "workplace": "Hybrid",
    "contractType": "Contract",
    "fullTime": true,
    "partTime": false,
    "salaryText": "£650 - £750 per day",
    "salaryMin": 650,
    "salaryMax": 750,
    "salaryCurrency": "GBP",
    "salaryPeriod": "day",
    "salaryNegotiable": false,
    "salaryIncludesBenefits": false,
    "salaryOte": false,
    "commissionOnly": false,
    "postedAt": "2026-10-02T15:58:06.810Z",
    "createdAt": "2026-10-02T15:58:06.813Z",
    "updatedAt": "2026-10-14T16:02:17.437Z",
    "expiresAt": "2026-11-13T23:55:00.000Z",
    "category": "Developer",
    "subcategory": "Python Developer",
    "summary": "Software Developer - Python (Contract) Location: London - Hybrid, 2 days/week on-site Contract: Initial 6 months (view to extend) Rate: 650– 750 pe...",
    "easyApply": true,
    "isPromoted": false,
    "isEarlyBird": false,
    "ukApplicantsOnly": false,
    "isTrainingCourse": false,
    "sourceQuery": "python developer",
    "sourceLocation": "London",
    "position": 1,
    "scrapedAt": "2026-10-15T17:46:13.623Z",
    "description": "Software Developer - Python (Contract)\n\nLocation: London - Hybrid, 2 days/week on-site\nContract: Initial 6 months (view to extend)\nRate: £650–£750 per day\n\nOverview\nA global data-d ...",
    "skills": ["Algorithm Design and Development", "Amazon Web Services (AWS)", "Back-Related Terms", "Continuous Integration", "Docker Containerization", "Flask (Python Web Framework)", "Python Django Web Development", "Python Programming (Beginner)", "React.js Development", "Serverless Computing"],
    "sector": "Software Developer",
    "sectorGroup": "IT & Telecoms",
    "town": "London",
    "postcodeDistrict": "SE1",
    "region": "South East England",
    "country": "England",
    "countryCode": "GB",
    "isRemote": false,
    "locationType": "Hybrid",
    "salaryDisplay": "£ 650.00 - £ 750.00 per day",
    "salaryAnnualMin": 169000,
    "salaryAnnualMax": 195000,
    "isGraduate": false,
    "advertReference": "V-132584-2",
    "companyProfileUrl": "https://www.reed.co.uk/company-profile/INTEC-SELECT-LIMITED-52454",
    "isLive": true,
    "companyWebsite": "http://www.intecselect.com",
    "companySize": "20–49",
    "companyIndustry": "IT & Telecoms",
    "companyHeadquarters": "Maidstone, United Kingdom",
    "companyDescription": "Intec Select is a leading specialist IT Recruitment Consultancy which delivers bespoke recruitment services to some of the world's leading organisations ...",
    "companyLinkedIn": "https://www.linkedin.com/company/intec-select/",
    "companyFacebook": "https://www.facebook.com/IntecSelect/",
    "companyX": null,
    "companyInstagram": "https://www.instagram.com/intecselect/?hl=en",
    "companyJobsOnReed": 50
}
```

Fill rates on a test run over every job on Reed (102,145 jobs): id, title, URL, company, posted by, location, contract type, salary text, dates and summary 100%; county 99%; workplace 97%; category 97%; company logo 95%; salary figures 83% (the rest say "Competitive salary" or "Salary negotiable"); subcategory 77%. On a 201-job cloud run with details and company profiles: description, sector, region and the yearly salary equivalent 98-100%; advertiser reference 74%; postcode district 51%; skills 32% (Reed tags skills on some ads only); company profile link, size, industry and description 77%; company website 68%; LinkedIn 55%. A field Reed does not publish for a job is `null`, never guessed.

### Pricing

Pay per result: **$0.50 per 1,000 jobs** (one result = one job ad saved to the dataset). The full description, skills and company profile are included in that price.

- 100 jobs for a quick search = $0.05
- Every `driver` job in the UK, about 22,000 jobs = $11
- A daily run of 10 keywords, new jobs only (about 500 jobs) = $0.25 a day

No start fee and no charge per search. Failed requests, duplicate ads, expired job URLs and empty searches are never charged. If you set a maximum cost per run, the scraper stops cleanly when it reaches it. Apify's free plan includes $5 of monthly platform credit, enough for about 10,000 jobs.

### Integrations

- **Apify API**: run the actor and fetch results over REST, or with the official [Python](https://docs.apify.com/api/client/python) and [JavaScript / Node.js](https://docs.apify.com/api/client/js) clients.
- **MCP for AI agents**: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this Reed jobs API directly and read the results. The input fields are described for agents.
- **Make, Zapier and n8n**: start runs and push new jobs to your CRM, Slack, Google Sheets or Airtable.
- **Webhooks**: get notified when a run finishes and process the data right away.
- **Schedules**: run daily with `postedWithinDays: 1` and deduplicate by `id` to collect only new ads.
- **Google Sheets**: export the dataset straight into a spreadsheet, or refresh it on a schedule.

Python example:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("rel8ble/reed-jobs-scraper").call(run_input={
    "searchQueries": ["accountant"],
    "locations": ["Manchester"],
    "postedBy": ["employer"],
    "postedWithinDays": 7,
    "maxItems": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], "|", job["companyName"], "|", job["salaryText"], "|", job["url"])
```

### Limits (read before large runs)

- **10,000 jobs per single search** is Reed's own limit. Deep search gets around it by splitting: `driver` (22,289 listed) returned 22,188, and every job on Reed (102,299 listed) returned 102,145. A slice that is still above 10,000 after every split is fetched in Reed's two result orders, and the run summary counts those slices (`searchesCappedAt10000`). A few dozen jobs per big search sit in a sector Reed's filter cannot select and can be missed.
- **Speed.** Reed limits how fast one IP may ask for pages. The scraper connects directly (no proxy) at about 170 requests a minute and pauses for a minute if Reed still says "slow down". Searches return 100 jobs per request, so that is up to about 17,000 jobs a minute; with details it is about 170 jobs a minute.
- **Proxies are not needed.** Most Apify datacenter proxy IPs are refused by Reed. A residential proxy (country GB) works but costs extra per GB.
- **Locations**: Reed matches the start of a place name, so a vague name can land on a small place ("Scotland" becomes "Scotland Gate", "Wales" becomes "Wales, Sheffield"). The run log and `RUN_SUMMARY` show the place Reed used (`resolvedLocation`); use a town, city, county or postcode.
- **Sort order**: Reed sorts keyword searches by relevance and searches without a keyword by date; the site has no other sort switch, so neither does this scraper. For "newest jobs", use `postedWithinDays`.
- **Salary filters** work on Reed's yearly equivalent and include ads that hide their figure ("Competitive salary") but fall in the range. `salaryMin` / `salaryMax` in the output are `null` when the ad hides the figure.
- **No personal data.** Recruiter names, e-mail addresses and phone numbers are not collected as fields; e-mail addresses and phone numbers written into the ad text are replaced with `[email removed]` / `[phone removed]`. Names written inside the free text of an ad can still appear there.

### FAQ

**Is there an official Reed API?**
Reed has a developer API that needs a personal key and returns fewer fields. This actor needs no key: it reads the public job pages and returns more fields per job (agency / employer, workplace, salary flags, category, skills, company profile).

**How do I get only new jobs every day?**
Schedule the actor daily with `postedWithinDays: 1` and deduplicate on `id` in your own system.

**How do I skip recruitment agencies?**
Set `postedBy: ["employer"]`. Each row also has `isAgency`.

**Why did I get fewer jobs than Reed's count?**
Reed's count includes a few duplicates and changes during a run as ads come and go; duplicates are dropped and not charged. Check `RUN_SUMMARY` in the key-value store: it lists each search with the site total, the place Reed used, pages fetched and why it stopped.

**Does it cover Scotland, Wales and Northern Ireland?**
Yes, every job on Reed.co.uk. Use a city or county name ("Glasgow", "Cardiff", "County Antrim") rather than the country name.

**Is scraping Reed legal?**
The actor collects publicly visible job ads, not personal data. You are responsible for how you use the data and for following Reed's terms and the laws that apply to you.

**Something is wrong or a field is missing.**
Open an issue on the Issues tab of the actor page with the run ID. It reaches the developer directly.

# Actor input Schema

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

Optional. Job keywords as typed into the Reed search box, one per line: "software developer", "accountant", "care assistant", "HGV driver". A job title, skill or company name all work. Each keyword is one search and returns up to maxItems jobs. Leave empty to list all jobs matching the location and filters below. Give at least one of searchQueries, locations, a filter or startUrls.

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

Optional. UK places to search around, one per line: a town or city ("London", "Manchester"), a county ("Kent", "West Yorkshire"), a country ("England") or a postcode ("SW1A 1AA", "M1"). Every keyword is searched in every location (2 keywords x 3 locations = 6 searches). Empty = the whole UK. Reed matches the start of a place name, so a vague name can land on a village ("Scotland" becomes "Scotland Gate"); the run log and summary show the place Reed used.

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

Optional. Radius around each location in miles. Reed offers 0, 1, 3, 5, 10, 15, 20, 30 and 50; other numbers are rounded to the nearest of those. Default 10 (what reed.co.uk uses). Ignored when locations is empty.

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

Optional. Only jobs paying at least this much, in pounds per year, e.g. 30000. Reed compares against the annual equivalent, so hourly and daily rates are included when they work out above it. 0 or empty = no minimum.

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

Optional. Only jobs paying at most this much, in pounds per year, e.g. 60000. 0 or empty = no maximum.

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

Optional. Keep only these contract types: any of "permanent", "temporary", "contract". Several values = any of them. Empty = all.

## `workingHours` (type: `array`):

Optional. "fulltime" and / or "parttime". Empty = both.

## `workplace` (type: `string`):

Optional. One of "any" (default), "remote", "hybrid", "onsite". Reed allows one at a time; run the actor once per value to combine.

## `postedBy` (type: `array`):

Optional. "employer" = ads the hiring company posted itself, "agency" = ads posted by recruitment agencies. Use \["employer"] to skip agencies, \["agency"] to list only agency ads. Empty = both.

## `sectors` (type: `array`):

Optional. Keep only jobs in these Reed sectors, one per line, written as on reed.co.uk: "Accountancy", "Accountancy (Qualified)", "Admin, Secretarial & PA", "Apprenticeships", "Banking", "Charity & Voluntary", "Construction & Property", "Customer Service", "Education", "Energy", "Engineering", "Estate Agency", "Financial Services", "FMCG", "General Insurance", "Graduate Training & Internships", "Health & Medicine", "Hospitality & Catering", "Human Resources", "IT & Telecoms", "Legal", "Leisure & Tourism", "Manufacturing", "Marketing & PR", "Media, Digital & Creative", "Motoring & Automotive", "Other", "Purchasing", "Recruitment Consultancy", "Retail", "Sales", "Scientific", "Security & Safety", "Social Care", "Strategy & Consultancy", "Training", "Transport & Logistics". Several = any of them. Empty = all sectors.

## `postedWithinDays` (type: `integer`):

Optional. Only jobs posted in the last N days, integer >= 0. 1 = posted today (UK time), 3, 7 and 14 use Reed's own filters; any other number is applied to each job's postedAt date. 0 (default) = any date. Use 1 on a daily schedule to collect only new jobs.

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

Optional boolean. true = only jobs Reed marks as suitable for graduates. Default false.

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

Optional boolean. true = only jobs you can apply to on Reed with your Reed CV. Default false.

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

Optional boolean. true = only jobs whose advertiser offers visa sponsorship (few ads use this flag). Default false.

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

Optional boolean. true = hide ads that say "Competitive salary" or "Salary negotiable" instead of a figure. Default false.

## `excludeTrainingCourses` (type: `boolean`):

Optional boolean, default true. Reed mixes paid training-course ads ("Become a ... - no experience needed") into job results; true leaves them out. false = keep them (they have isTrainingCourse: true).

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

Optional. Maximum jobs saved per search (one keyword in one location), integer >= 0. Default 100; 0 = every job the search has. You pay per job saved ($0.0005 each), so 100 jobs = $0.05. Use 10-20 for a quick answer.

## `deepSearch` (type: `boolean`):

Optional boolean, default true. Reed returns at most 10,000 jobs for any one search (all UK jobs are about 100,000). With deep search on, a bigger search is split automatically by sector, contract type, agency / employer, workplace and hours, and the results are merged without duplicates. Only kicks in when maxItems is above 10,000 (or 0). It costs extra requests, not extra money per job.

## `includeDetails` (type: `boolean`):

Optional boolean. false (default) = search data only: title, company, agency or employer, location, salary, contract type, hours, workplace, summary (first ~150 characters), dates, category, links; up to 100 jobs per request. true = also open each job page to add the full description (plain text), the skills list, sector, town, postcode district, region, annual salary equivalent, graduate flag, the advertiser's reference and the company-profile link. One extra request per job, same price per result.

## `includeDescriptionHtml` (type: `boolean`):

Optional boolean. Only used with includeDetails or job URLs. true = add descriptionHtml (the original formatting) next to the plain-text description. Default false.

## `includeCompanyDetails` (type: `boolean`):

Optional boolean. true = add the advertiser's Reed company profile where one exists: website, size, industry, headquarters, description, LinkedIn / Facebook / X / Instagram links and how many jobs it has on Reed. Turns on includeDetails (the profile link is on the job page). One extra request per company (not per job), same price per result. Default false.

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

Optional. URLs copied from reed.co.uk, one per line. A search URL ("https://www.reed.co.uk/jobs/python-developer-jobs-in-london?salaryFrom=50000\&perm=true") is scraped with the filters in the URL (the filter fields above are not applied to it). An agency or employer job list ("https://www.reed.co.uk/jobs/intec-select-limited/p41618") works the same way. A job URL ("https://www.reed.co.uk/jobs/python-developers/57418395") or a bare job id is looked up directly and always includes the full details. A company-profile URL ("https://www.reed.co.uk/company-profile/Savers-611") returns all of that company's jobs. Expired jobs are listed in the run summary and are not charged.

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

Optional, advanced. Number of parallel requests, integer 1-30. Default 10. Leave unset.

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

Optional, advanced. Retries per failed or rate-limited request, integer 0-20; each retry uses a new session (and a new IP when a proxy is on). Default 10. Leave unset.

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

Optional, advanced. Apify Proxy settings object. Default {"useApifyProxy": false}: no proxy is needed, requests go out directly at a pace Reed accepts (about 170 a minute). Most Apify datacenter proxy IPs are refused by Reed, so do not switch them on; a residential proxy with country GB works but costs extra and is only worth it for very large runs. Leave unset.

## Actor input object example

```json
{
  "searchQueries": [
    "software developer"
  ],
  "distanceMiles": 10,
  "workplace": "any",
  "postedWithinDays": 0,
  "graduateOnly": false,
  "easyApplyOnly": false,
  "visaSponsorshipOnly": false,
  "salaryShownOnly": false,
  "excludeTrainingCourses": true,
  "maxItems": 20,
  "deepSearch": true,
  "includeDetails": false,
  "includeDescriptionHtml": false,
  "includeCompanyDetails": false,
  "maxConcurrency": 10,
  "maxRequestRetries": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All jobs found: title, company, agency or employer, location, salary (text and parsed numbers), contract type, hours, workplace, summary, posted and expiry dates, category and job URL (plus full description, skills, sector, postcode district and company profile when those options are on).

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

Per-search counts, the totals Reed reported, the place Reed used for each location, how many narrower searches deep search ran, stop reasons and the list of anything that failed.

# 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 developer"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/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 developer"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/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 developer"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rel8ble/reed-jobs-scraper --silent --output-dataset

```

## MCP server setup

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