Reed.co.uk Scraper at a glance
Reed.co.uk Scraper is a ready-to-run Apify actor from abotapi for collecting jobs data. Its documented output includes type, url, title, company and job id, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Jobs, Automation, Developer Tools
- Region
- Europe
- Pricing
- $2.20 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 39 options
Scrape Reed.co.uk jobs, companies, courses and reviews by keyword, location, filters or URL. Extract 80+ fields including salary, company, GPS, sector, contract type, skills, descriptions, postcodes, company profiles, courses and reviews.
What Reed.co.uk Scraper can do
- 96 fields on every job record. Every record has the same fixed set of fields; full job details fill in roughly 45 of them (description, location breakdown, sector, contract type, skills, company profile, screening questions) that otherwise stay empty.
- GPS coordinates on every job, resolved from the job's location text against a built-in UK gazetteer, since Reed itself does not publish coordinates.
- Three things to scrape: job listings (by filters or pasted URLs), company profiles, and training courses with their reviews.
- Full filter grammar: keyword, location, distance, salary range, posted-within window, sort order, job type (permanent, temporary, contract, full-time, part-time), posted-by (agency or employer), plus graduate, easy-apply, visa-sponsorship and early-bird flags.
- Walks the whole catalogue by default. Max pages defaults to unlimited: the run walks every result page per search or URL, stopping on its own once Reed's reported page count is reached or a page comes back with nothing new. Max results is the sole cap on volume.
- Resumable runs. Point a new run at a previous run or dataset ID to collect only the jobs it doesn't already have. The run also checkpoints its own progress, so an Apify platform migration or a Resurrect of an interrupted run can continue instead of starting over (see the known limitations below for what a mid-run restart does not preserve).
Choose what to collect
These inputs let you configure Reed.co.uk Scraper - Jobs, Companies, Courses & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Jobs = job listings (by filters or pasted URLs). Companies = company profiles. Courses = training courses and their reviews. |
urlsarray | Reed job-search URLs (keyword, location, category, filtered, sorted or paginated) or direct job URLs (/jobs//). If set, these are scraped directly and the filters below are ignored. The pre-filled list is a sample of every supported URL shape: clear it and use the filters below to search by keywords and locations instead. |
keywordsstring | Job search terms, e.g. 'data engineer'. Used only when no Job URLs are pasted. Leave empty to browse all jobs in the location. |
locationsarray | UK cities or regions, e.g. ['london', 'manchester']. One search per location. Leave empty for a UK-wide search. |
proximityinteger | Search radius around the location, in miles. Allowed: 0, 1, 3, 5, 10, 15, 20, 30, 50 (other values are ignored). Default 10. |
salaryFrominteger | Only jobs with a salary at or above this amount (per annum). |
salaryTointeger | Only jobs with a salary at or below this amount (per annum). |
Show 32 more inputs
| Input | What it controls |
|---|---|
postedDatestring | Only jobs posted within this window. |
sortBystring | Result ordering. 'relevance' is Reed's default; 'date' shows newest first. |
fullTimeboolean | Restrict to full-time roles. |
partTimeboolean | Restrict to part-time roles. |
permanentboolean | Restrict to permanent roles. |
temporaryboolean | Restrict to temporary roles. |
contractboolean | Restrict to contract roles. |
agencyboolean | Only jobs posted by recruitment agencies. |
directboolean | Only jobs posted directly by the employer. |
graduateboolean | Only graduate-level roles. |
easyApplyboolean | Only jobs that support one-click apply. |
visaSponsorshipboolean | Only jobs offering visa sponsorship. |
earlyBirdboolean | Only newly posted 'early bird' jobs. |
workFromHomeboolean | Only jobs Reed marks as remote (the site's Remote working-option filter). |
fetchDetailsboolean | Jobs mode only. When enabled, each job found by a search is enriched from its detail page: full HTML description, region/county/postcode, full salary breakdown, sector + parent sector, company profile, contract type, breadcrumbs, and screening questions. Adds one fetch and one detail charge per job. A pasted single-job URL is always fetched as a detail page and charged one detail unit per delivered job whatever this setting is. |
companiesarray | Reed company-profile URLs (e.g. https://www.reed.co.uk/company-profile/Marshall-Wolfe-63256) or bare slugs (e.g. Marshall-Wolfe-63256). Slugs are case-sensitive. |
courseQueriesarray | Keywords to search Reed Courses, e.g. ['python', 'project management']. One search per keyword; Max results caps the number of courses. |
courseUrlsarray | Reed course search URLs (e.g. https://www.reed.co.uk/courses/python, optional ?page=N), course detail URLs (e.g. https://www.reed.co.uk/courses/python-course/271655 or /courses/c/271655) or bare course IDs (e.g. 271655). Combined with any search keywords above. |
fetchReviewsboolean | Courses mode only. When enabled, each course's reviews are returned as separate review records (rating breakdown, text, reviewer, provider response). |
maxReviewsPerCourseinteger | Cap on reviews fetched per course. 0 = the maximum of 1000 reviews per course. |
reviewsSortstring | Order in which course reviews are fetched. |
maxListingsinteger | The single result cap, applied in every mode: max jobs, companies, or courses (course reviews are additional and not counted here). The run stops once this many are collected. Set 0 for unlimited (the run then walks the whole catalogue). |
maxPagesinteger | Optional safety limit on result pages walked per search (Jobs and Courses). Leave at 0 to walk the whole catalogue: the run stops at Max results, the site's own last page, or a repeat-page guard, not an artificial page cap. |
resumeFromRunIdstring | Optional. ID of a previous run of this actor (or a dataset ID). Jobs already in that dataset are skipped, so this run returns only NEW jobs (a delta). Combine both runs' datasets for the full set. Max results then counts only the new jobs. |
incrementalModeboolean | Turn this on for daily or recurring monitoring of jobs, companies, courses and reviews. The first run returns everything matching as NEW. Later runs return only NEW, UPDATED and REAPPEARED records; unchanged records are not returned and not billed. Turn on "Emit unchanged" or "Emit expired" only when you also want those rows (they are billed as normal dataset items). State is kept separately for each mode, URL or filter setup; use State key to name or share a monitoring campaign. Detail-page enrichment is billed only for rows that are returned. To continue one specific interrupted run, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode, search/URL and filter settings -- different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns -- and bills -- extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned every tracked search/URL -- not when Max listings capped it or when Resume was used. This returns -- and bills -- extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Optional. Field names that must NOT make a record count as UPDATED, for example "displaySalary" (dotted paths reach nested fields). Ignored fields stay in the output and the saved baseline; they are only left out of the comparison and of changedFields. Leave empty to compare every field. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
recordTypeType (text)urlURL (link)titleTitle (text)companyNameCompany (text)jobIdJob ID (text)locationLocation (text)displaySalarySalary (text)companyProfileIdCompany Profile ID (text)sectorNameSector (text)totalJobsCountTotal Jobs (number)logoImageUrlLogo (link)courseIdCourse ID (text)Show 29 more fields
providerNameProvider (text)pricePrice (text)ratingValueRating (number)ratingCountRating Count (number)reviewIdReview ID (text)courseTitleCourse Title (text)overallRatingOverall Rating (number)reviewTextReview Text (text)reviewerNameReviewer (text)createdOnCreated On (text)salaryFromSalary FromsalaryToSalary TocontractTypeContractremoteWorkingOptionRemotepostedOnPostedexpiryOnExpireslatitudeLatlongitudeLngemployeeCountRangeEmployeeslocationTextLocationwebsiteUrlWebsitepriceCurrencyCurrencystudyMethodStudy MethodqualificationGroupQualificationcourseUrlCourse URLchangeTypeChange type (text)changedFieldsChanged fields (array)firstSeenAtFirst seen at (date)lastSeenAtLast seen at (date)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": 1,
"jobId": 1,
"url": "https://www.reed.co.uk/jobs/data-engineer/1",
"title": "Data Engineer",
"companyName": "Sample Company",
"logoImage": "https://resources.reed.co.uk/profileimages/logos/Logo_0000.png",
"description": "Full job description text appears here when full job details are on.",
"skills": [
"Python",
"SQL"
],
"statuses": [
"Featured",
"Easy Apply"
],
"location": "London",
"latitude": 51.5074,
"longitude": -0.1278,
"remoteWorkingOption": "On-Site",
"displaySalary": "£45,000 - £55,000 per annum",
"salaryFrom": 45000,
"salaryTo": 55000,
"salaryCurrencyId": 1,
"salaryType": 5,
"salaryTypeName": "per annum",
"jobType": 1,
"isFullTime": true,
"isPartTime": false,
"postedOn": "2026-01-01T00:00:00.000Z",
"expiryOn": "2026-02-01T00:00:00.000Z",
"contractType": "Permanent",
"sectorName": "Other IT & Telecoms",
"parentSectorName": "IT & Telecoms",
"region": "South East England",
"county": "London",
"country": "United Kingdom",
"countryCode": "GB",
"postCode": "EC1A",
"companyProfileId": 0,
"companyProfileUrl": "Sample-Company-00000",
"isEasyApply": true,
"isExternal": false,
"detailFetched": true
}Ways to use this data
- Recruitment and staffing agencies: track competitor job ads, salary bands and hiring volume by sector or region.
- Job board and aggregator operators: mirror Reed listings into your own search index, complete with GPS coordinates for map-based search.
- Market and salary researchers: build salary distributions and posting-volume trends across UK regions, sectors and job types.
- Sales and lead-generation teams: use company profiles (open jobs, employee-count range, sector, website) to find growing companies as outbound leads.
- Training and upskilling platforms: track Reed Courses pricing, ratings and reviews across providers.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Reed.co.uk Scraper return?
The documented output for Reed.co.uk Scraper includes type, url, title, company, job id, location, salary and company profile id. Availability of each field depends on the source page and the selected mode.
How much does Reed.co.uk Scraper cost?
It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I schedule this to collect only new jobs?
Yes. Schedule the actor from the Schedules tab and turn on incrementalMode. The first run returns everything as NEW; later runs return only NEW, UPDATED and REAPPEARED records with changeType, changedFields, firstSeenAt and lastSeenAt added. Unchanged records are not returned, so they are not billed, and detail enrichment is billed only for rows that are returned. resumeFromRunId remains available to continue one specific run.
Why did I get fewer jobs than I expected across multiple locations?
Two reasons. First, Max results is split evenly across locations, so each location returns at most its share. Second, when locations share jobs (remote or nationally advertised roles), a later location's search stops early if one of its pages after the first holds only jobs an earlier location already returned, so its remaining pages are never read. See "Known limitation: overlapping searches in one run" above for an example. For complete coverage, run one location per run.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
