Reed.co.uk Jobs Scraper: UK Jobs, Salaries & New-Job Monitor
Pricing
$0.80 / 1,000 jobs
Reed.co.uk Jobs Scraper: UK Jobs, Salaries & New-Job Monitor
UK jobs from Reed.co.uk by keyword, town and distance: title, company, salary as numbers (per year, day or hour), contract type, remote/hybrid, posting date and optional full descriptions. Same schema as Career Site Jobs API. Monitor mode returns only new jobs. Respects robots.txt.
Pricing
$0.80 / 1,000 jobs
Rating
0.0
(0)
Developer
Local Wire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Features
Share
Get UK jobs from Reed.co.uk for any keyword, town and distance as structured JSON for $0.80 per 1,000 jobs ($0.0008 per job, no start fee). This Reed jobs scraper reads Reed's public search results and returns one record per job: title, company or agency, location, salary as numbers (min, max, per year, day or hour), contract type, remote / hybrid / on-site, posting and update dates and, optionally, the full job description.
It is built for job alerts, salary benchmarking, recruitment market research, lists of hiring companies and AI agents. Schedule it with monitor mode and you get only the jobs that are new since the last run.
It uses no proxies, no browser and no login. It makes plain requests to public pages, about one every 2 seconds, and follows Reed's robots.txt.
What you get
One record per job, in the same schema as our Career Site Jobs API, so Reed jobs and jobs from company career sites can share one dataset:
- Identity: a stable
id(reed:company:jobId), Reed's ownjobIdand thejobUrl. - The role:
title,company(the employer or the recruitment agency that posted it),employmentType(contract, temporary, full-time, part-time…) and Reed's wording inemploymentTypeRaw("Contract, full-time"). - Where:
location,locations,country(alwaysGB), aremoteflag andworkplaceType(remote, hybrid or onsite). - Pay:
salaryMin,salaryMax,salaryCurrency,salaryPeriod(year, month, week, day or hour) and a readablesalaryText, whenever the advert states a salary. - Dates:
postedAt,updatedAtandscrapedAt. - Description:
descriptionText(anddescriptionHtml) when you turn onincludeDescriptions. - Monitor fields:
changeTypeandfirstSeenAtin monitor mode.
A full record looks like this:
{"id": "reed:intec-select-limited:57418395","ats": "reed","atsName": "Reed","source": "reed.co.uk","companySlug": "intec-select-limited","jobId": "57418395","title": "Python Developers","company": "INTEC SELECT LIMITED","department": null,"team": null,"employmentType": "contract","employmentTypeRaw": "Contract, full-time","location": "London","locations": ["London"],"country": "GB","countries": ["GB"],"remote": false,"workplaceType": "hybrid","salaryMin": 650,"salaryMax": 750,"salaryCurrency": "GBP","salaryPeriod": "day","salaryText": "£650 - £750 per day","descriptionText": null,"descriptionHtml": null,"jobUrl": "https://www.reed.co.uk/jobs/python-developers/57418395","applyUrl": null,"postedAt": "2026-10-02T16:58:06.813Z","updatedAt": "2026-10-14T17:02:17.437Z","changeType": null,"firstSeenAt": null,"input": "python developer | London","detectedBy": "search","scrapedAt": "2026-11-07T10:45:00.000Z"}
inputis the search that found the job, written askeyword | location.departmentandteamare part of the shared schema and are always empty for Reed.applyUrlis filled only when the advert sends applicants to an external site.- With
includeDescriptionson,descriptionTextholds the full advert, cut at 20,000 characters.
The dataset has table views for the key columns. The run's key-value store also gets an OUTPUT record that summarises each search: its URL, the total number of jobs Reed reported, pages read, jobs returned and any problem.
Quick start
Give keywords, locations or both. This input returns up to 50 Python developer jobs in London and costs at most $0.04:
{"keywords": ["python developer"],"locations": ["London"],"maxResults": 50}
In Apify Console the form opens with these values already filled in, so you can press Start straight away. When you call the Actor from the API and leave maxResults out, it defaults to 100 jobs.
Contract Python roles within 10 miles of London, posted this week:
{"keywords": ["python developer"],"locations": ["London"],"radius": 10,"postedWithinDays": 7,"employmentTypes": ["contract"],"maxResults": 300}
A daily alert for remote accountancy jobs anywhere in the UK:
{"keywords": ["accountant"],"workplace": ["remote"],"monitorMode": true,"monitorStoreName": "remote-accountants"}
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | list of text | none | What to search for: job titles, skills or company names. One search per entry. |
locations | list of text | none | UK towns, cities or regions. Every keyword is searched in every location. Empty means the whole of the UK. |
radius | number 1-200 | Reed's own | Miles around each location. Only used with a location. |
postedWithinDays | number 1-365 | none | Keep jobs posted in the last N days. Jobs without a date are kept. |
workplace | list | none | remote, hybrid, onsite. |
employmentTypes | list | none | full-time, part-time, contract, temporary, internship, apprenticeship, other. |
excludeKeywords | list of text | none | Drop jobs whose title contains ANY of these, matched at the start of a word. |
monitorMode | true/false | false | Return only jobs that earlier runs of the same search have not returned. |
monitorEmitExistingOnFirstRun | true/false | true | On a monitor's first run, return the current jobs. Set to false to record them silently and pay nothing for the backlog. |
monitorStoreName | text | reed-jobs-monitor | Name of the key-value store that holds the monitor's memory. Letters, digits and hyphens. |
includeDescriptions | true/false | false | Read each job's page for the full description. One extra request per job. |
includeHtml | true/false | false | Also return the description as HTML. Needs includeDescriptions. |
maxResults | number 1-10,000 | 100 | Stop the run after this many jobs in total. |
maxResultsPerSearch | number 1-10,000 | same as maxResults | Stop each keyword/location search after this many jobs. |
At least one of keywords and locations is needed. Keywords × locations can make at most 50 searches per run. Invalid input fails at once with a message that lists every problem.
How the filters work
- Distance is Reed's own filter and is sent with the search.
- Date posted: for 14 days or fewer, Reed's own date filter (3, 7 or 14 days) narrows the search first. The exact cut is then applied to each job's posting date, so
postedWithinDays: 5really means five days. - Workplace and employment type: a single value that Reed can filter on (
remote,hybrid,onsite;contract,temporary,part-time,full-time) is sent to Reed's search. With several values, or withinternship,apprenticeshiporother, the Actor filters on the data in the results page. Where the results page does not say, the job page is read to decide, and jobs that still do not say are dropped. - Exclude keywords are applied to the job title by the Actor.
Monitor mode: only new Reed jobs
With monitorMode on, the Actor remembers which jobs each search has returned, in a key-value store in your account (named by monitorStoreName). Each run returns, and charges for, only jobs it has not returned before.
- Each search (keyword and location) has its own memory. Changing the filters, the radius or the date window starts a new one.
- After the first run, a search stops paging once two results pages in a row hold nothing new, so a scheduled run usually reads only a page or two.
- A job that was found but not returned because a limit was reached is not remembered, so it comes through next time.
- To start a monitor without paying for the existing backlog, set
monitorEmitExistingOnFirstRuntofalsefor the first run.
Save the input as a Task and add a Schedule, for example every few hours.
Use cases
- Job alerts. New roles for a keyword and town, delivered as they appear.
- Salary benchmarking. Day rates and salaries as numbers with currency and period, ready to average by title or town.
- Recruitment market research. Which agencies and employers are advertising, for which roles, and how many adverts are remote or hybrid.
- Lead lists of hiring companies. Companies advertising a given role in a given area.
- Job boards and aggregators. UK listings in the same schema as our other job Actors.
- AI agents. A small, predictable JSON schema that an agent can call as a tool through Apify's MCP server.
Pricing
$0.0008 per job returned, which is $0.80 per 1,000 jobs. There is no start fee and no monthly rental.
You pay for each job the Actor returns. You pay nothing for jobs that your filters drop or, in monitor mode, for jobs already returned. Full descriptions cost nothing extra.
| What you run | Jobs returned | Cost |
|---|---|---|
| The pre-filled first run | 50 | $0.04 |
| The default API run | 100 | $0.08 |
| One search read to the end | about 2,500 | about $2.00 |
| The largest possible run | 10,000 | $8.00 |
| A monitor of four searches that finds 60 new jobs a day | about 1,800 a month | about $1.44 a month |
To cap spending, set Max cost per run in the run options, or lower maxResults. The Actor stops cleanly at the limit and says so in its status message.
Use it from the API
Run the Actor and get the jobs back in one request:
curl -X POST "https://api.apify.com/v2/acts/localwire~reed-jobs/run-sync-get-dataset-items" \-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords": ["python developer"], "locations": ["London"], "maxResults": 25}'
That endpoint waits up to five minutes. A hundred jobs from results pages take about ten seconds; with includeDescriptions each job adds about two seconds, so for larger runs start the Actor with POST /v2/acts/localwire~reed-jobs/runs and read the run's dataset when it has finished.
With the Apify client for JavaScript:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("localwire/reed-jobs").call({keywords: ["data analyst"],locations: ["Manchester", "Leeds"],radius: 10,maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
With the Apify client for Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("localwire/reed-jobs").call(run_input={"keywords": ["accountant"],"workplace": ["remote"],"maxResults": 100,})jobs = list(client.dataset(run["defaultDatasetId"]).iterate_items())
Results can be downloaded from the dataset as JSON, CSV, Excel, XML or JSON Lines.
Use it from an AI agent (MCP)
Apify's hosted MCP server is at https://mcp.apify.com. Add it to any MCP client that supports remote servers and sign in with your Apify account when the browser opens (or send an Authorization: Bearer <APIFY_TOKEN> header).
To give the agent only this Actor as a tool, use this server URL:
https://mcp.apify.com?tools=localwire/reed-jobs
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=localwire/reed-jobs"}}}
The agent then sees the Actor's input fields with their descriptions and defaults. It needs to send keywords, locations or both; when it leaves maxResults out, the run returns at most 100 jobs. Questions that work well:
- "What day rates are contract Python developers getting in London?"
- "How many remote accountant jobs were posted on Reed this week, and who is hiring?"
- "Compare advertised salaries for data analysts in Manchester and Leeds."
Integrations
Runs can be started on a schedule or by another system, and results can be sent on:
- Make, n8n and Zapier have Apify integrations that run an Actor and pass its dataset to the next step, for example to a spreadsheet, a CRM, email or a chat channel.
- Webhooks call your endpoint when a run succeeds or fails.
- LangChain and other agent frameworks can use Apify Actors as tools.
- The Apify API and the JavaScript and Python clients cover everything else.
FAQ
Is there a Reed jobs API?
Yes. Reed has an official Jobseeker API, which needs an API key from Reed. This Actor is an alternative that needs no Reed key: it reads the public search results pages and returns each job with salary numbers, contract type and the remote or hybrid flag, with monitor mode and scheduling on Apify. It never calls Reed's /api/ paths.
How do I scrape jobs from Reed.co.uk?
Put what you would type into Reed's search box in keywords and the town in locations, then start the run. Each job on the results pages becomes one record. Add radius, postedWithinDays, workplace or employmentTypes to narrow it down.
How do I get salary data from Reed?
Every job whose advert states a salary comes back with salaryMin, salaryMax, salaryCurrency and salaryPeriod. Run a search for the job title and location you care about, then average or chart the numbers. Adverts that say "competitive" or give no figure have empty salary fields.
Can I get the full job description?
Yes. Turn on includeDescriptions. The Actor then reads each job's own page, which takes one more request per job (about two seconds each). The price per job is the same.
How do I get only new Reed jobs each day?
Turn on monitorMode and schedule the Actor. Each run returns, and charges for, only jobs that earlier runs of the same search did not return.
How many jobs can I get from one search?
The Actor reads up to 100 results pages of 25 jobs, so about 2,500 jobs per search, and up to 10,000 jobs per run across at most 50 searches. For more, split the search by location or by keyword.
Can I search the whole UK without a location?
Yes. Leave locations empty and give keywords. You can also give only locations to get every job in a town.
How much does it cost to scrape 1,000 Reed jobs?
$0.80. The price is $0.0008 per job returned, with or without descriptions.
Does it need proxies or a login?
No. It makes plain requests to public pages with one ordinary browser User-Agent, and never logs in.
Is it legal to scrape Reed?
This is not legal advice. The Actor reads only public job adverts, follows Reed's robots.txt and keeps personal contact details out of the output. Job content belongs to the employers and agencies who published it, and you are responsible for how you use it, including Reed's terms and any rules that apply to you.
Limitations
- UK only. Reed.co.uk lists UK jobs;
countryis alwaysGB. - If Reed refuses requests, the run stops. On an HTTP 403, a 429 or a bot-check page the Actor waits once (30 seconds, or what
Retry-Aftersays) and tries one more time. If Reed still refuses, the whole run stops, keeps the jobs it already has and says so in the status message; a run that got nothing is marked failed. It does not use proxies, rotate headers or solve challenges. - Pace. About one request every 2 seconds, or slower if robots.txt asks. Results pages carry 25 jobs each, so results-only runs are quick; descriptions add a request per job.
- robots.txt is followed. Reed's
/api/paths and its sorting parameter are disallowed there and are never used, so results come in Reed's default order. - 2,500 jobs per search (100 results pages), 10,000 per run and 50 searches per run.
- Salaries are present only when the advert states one. Benefits and bonus text are not parsed.
- Recruitment agencies. Many Reed adverts are posted by agencies, so
companyis often the agency, not the end employer. - No removed-job tracking. Monitor mode reports new jobs only.
- Internship and apprenticeship filters rely on the job title or the job page, because Reed's results data only distinguishes permanent, contract, temporary, full-time and part-time.
Data, privacy and terms
The Actor reads public job adverts only and never logs in.
Personal data is kept out of the output. There are no fields for recruiter or contact names. In descriptions, email addresses and phone numbers are replaced with [email removed] and [phone removed], mailto: and tel: links are unwrapped, and full UK postcodes are shortened to their district. Names that an employer wrote into its own description text cannot be removed reliably and can remain.
Not affiliated with or endorsed by Reed. Job content belongs to the employers and agencies who published it.
More from this developer
Jobs:
- Career Site Jobs API: jobs straight from company career sites on Workday, Greenhouse, Lever and eight more platforms, in the same schema.
- Workday Jobs API: every job from a Workday career site.
- Wellfound Jobs Scraper: startup jobs in the same schema, with pay and equity.
- Hacker News API: stories, comments and structured "Who is hiring?" jobs.
Other data:
- Public Tenders API: UK and EU tenders and contract awards.
- Gumtree Scraper: UK classified listings.
- Google Trends Trending Now: trending searches for 125 countries.
- App Store Reviews: reviews, app details and top charts.
- Telegram Channel Scraper: posts from public channels.
- ESPN Sports Data and Flashscore Results & Fixtures: scores, standings and fixtures.
- Eventbrite Scraper and Meetup Scraper: events by place and topic.
Feedback
Found a search that does not work, or need a field we do not return? Open an issue on the Actor's Issues tab and we will reply within a few days.