CWJobs UK IT & Tech Jobs Scraper avatar

CWJobs UK IT & Tech Jobs Scraper

Pricing

from $1.24 / 1,000 serp results

Go to Apify Store
CWJobs UK IT & Tech Jobs Scraper

CWJobs UK IT & Tech Jobs Scraper

Extract IT contract and permanent jobs from CWJobs.co.uk, the UK tech recruitment board. Returns title, employer, salary, rate type (annual/daily/hourly), employment type, workplace type, IR35 status, tech skills, contract length and full description.

Pricing

from $1.24 / 1,000 serp results

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Share

Scrape IT contract and permanent jobs from CWJobs.co.uk, the UK's specialist board for technology recruitment. Supply a keyword, a search URL, or both; get every listing back as structured JSON with employer, salary, IR35 status, day rate, tech skills, contract length, direct apply URL and full description.

What it does

Pulls live UK IT and tech vacancies from CWJobs search results, deduplicates them by job ID, and pushes them to your Apify dataset. Handles pagination automatically up to your result cap. Optionally opens each job's detail page for structured salary ranges, IR35 status, contract length in months, workplace type (remote / hybrid / onsite), tech skill tags, direct apply link and full ad copy. A further optional pass fetches each unique employer's profile page on TotalJobs (CWJobs's sister board) for company About text and a list of the employer's other currently open roles.

Fields you get per job:

  • Job title, employer name, employer logo
  • Location, country, salary (min, max, currency, period)
  • Rate type (annual, daily, hourly, monthly)
  • Employment type (permanent, contract, temporary)
  • Workplace type (remote, hybrid, onsite)
  • IR35 status (inside, outside, undetermined) for contract roles
  • Contract length in months when the ad specifies it
  • Tech skills array (Java, AWS, Kubernetes, React, Python, etc.)
  • Sector (Cybersecurity, Data Science, DevOps, Frontend, etc.)
  • Description (plain text, HTML, Markdown), direct apply URL, posted date
  • Employer profile mode: company-jobs page listing, company website hint, address from PDP schema.org jobLocation

Sample output

{
"_type": "job",
"id": "108018529",
"title": "Junior Java Developer",
"company_name": "Hackajob Ltd",
"company_logo_url": "https://tjgliveassets.s3.eu-west-1.amazonaws.com/company-logos/01a731a76abe4ee4b5f58b72600d5a61.png",
"location": "South West London, South East",
"country": "GB",
"salary_range": null,
"salary_text": "Competitive",
"rate_type": null,
"employment_type": null,
"workplace_type": "hybrid",
"ir35_status": null,
"contract_length_months": null,
"skills": ["Java", "JavaScript", "Node.js", "Spring", "Azure", "Jenkins", "Agile"],
"sector": "IT / Software",
"description_full": "hackajob is partnering directly with Version 1 to hire for this role...",
"description_html": "<p>hackajob is partnering...</p>",
"description_md": "hackajob is partnering...",
"job_url": "https://www.cwjobs.co.uk/job/junior-java-developer/hackajob-ltd-job108018529",
"apply_url": "https://www.totaljobs.com/job/a5984d09-c06d-4d11-b455-c100241b60f4/application/authentication?locale=en_GB",
"posted_at": "2026-09-19",
"posted_at_text": "2026-09-19",
"posted_at_datetime": "2026-09-19",
"search_query": "java developer",
"source_platform": "cwjobs.co.uk",
"scraped_at": "2026-09-23T07:34:24Z",
"contact_emails": [],
"contact_phones": [],
"contact_urls": [],
"company_about": null,
"company_phone": null,
"company_email": null,
"company_website": null,
"company_address_street": null,
"company_address_city": "South West London",
"company_address_postcode": null,
"company_address_country": "GB",
"company_active_jobs_count": 1596,
"company_active_jobs": [
{
"title": "Senior Java Developer",
"job_url": "https://www.totaljobs.com/job/senior-java-developer/hackajob-job108019000"
}
]
}

Input examples

Keyword search only

{
"searchQueries": ["java developer", "devops engineer"],
"location": "London",
"sortBy": "newest",
"maxResults": 100,
"maxResultsPerQuery": 50,
"includeJobDetails": true
}

Search URLs only

{
"searchUrls": [
"https://www.cwjobs.co.uk/jobs/java-developer/in-london",
"https://www.cwjobs.co.uk/jobs/contract/it"
],
"sortBy": "newest",
"maxResults": 200,
"maxResultsPerQuery": 100,
"includeJobDetails": true
}

Combined: keywords AND URLs, with employer profiles

{
"searchQueries": ["software engineer"],
"searchUrls": ["https://www.cwjobs.co.uk/jobs/java-developer/in-london"],
"location": "Manchester",
"sortBy": "newest",
"maxResults": 50,
"maxResultsPerQuery": 25,
"includeJobDetails": true,
"includeCompanyDetails": true,
"maxConcurrency": 5
}

Each keyword and each URL runs as a separate task. Results across all tasks are deduplicated by job ID.

Input parameters

FieldTypeDefaultNotes
searchQueriesarrayKeyword queries (e.g. java developer, devops engineer). Each runs as a separate search.
searchUrlsarrayCWJobs search URLs to crawl directly. Combine freely with searchQueries.
locationstringUK city, region or postcode. Applied to keyword queries.
sortByselectnewestnewest or relevance. Use newest for scheduled scrapes.
includeJobDetailsbooleanfalseOpen each PDP for structured salary, IR35, contract length, skills, apply URL and full description.
includeCompanyDetailsbooleanfalseFetch each employer's TotalJobs company page for About text and open-role list. Implies includeJobDetails.
maxResultsinteger5Total cap across all queries and URLs.
maxResultsPerQueryinteger5Cap per individual keyword or URL task.
maxConcurrencyinteger5Concurrent detail page requests (1 to 20).

Output fields

Every dataset row has a stable schema documented in the Output tab. Key derived fields:

  • employment_type: permanent, contract, temporary
  • rate_type: annual, daily, hourly, monthly
  • workplace_type: remote, hybrid, onsite
  • ir35_status: inside, outside, undetermined (populated when IR35 is mentioned in the ad)
  • contract_length_months: numeric, extracted from phrases like "6 month contract" or "12-week engagement"
  • skills: array of normalised tech tags (Java, Python, AWS, Kubernetes, React, .NET, etc.)
  • sector: narrowed sub-sector (Cybersecurity, Data Science, DevOps, Frontend, Backend, Full Stack, Mobile, QA / Testing, Cloud, Networking, IT Support, Project Management, Product / BA, IT / Software)
  • salary_range: object with min, max, currency, period
  • apply_url: direct application URL from the PDP apply button (TotalJobs-hosted or third-party ATS redirect)
  • description_full, description_html, description_md: full ad text in three formats (requires includeJobDetails)

Employer profile fields (includeCompanyDetails: true):

  • company_about: About-us summary from og:description on the employer's TotalJobs page
  • company_website: Employer website hint from PDP schema.org hiringOrganization.url (external domain only)
  • company_address_city, company_address_country: From PDP schema.org jobLocation.address
  • company_active_jobs_count, company_active_jobs: Count and list (title + job_url) of the employer's other open roles
  • company_phone, company_email, company_address_street, company_address_postcode: Not exposed on CWJobs / TotalJobs; always null

Pricing

Pay-per-event. You only pay for what the actor produces.

EventRateWhen charged
job-start$0.001Once per actor run
job-serp-result$0.00124Per job pushed from a SERP page (includeJobDetails: false)
job-detail-result$0.0025Per job enriched with detail page (includeJobDetails: true)
company-detail-result$0.005Per unique employer resolved (includeCompanyDetails: true)

Compute and proxy costs are absorbed by us. You pay the flat per-event rates above.

Worked examples

SERP-only scan, 100 jobs

EventCountRateSubtotal
job-start1$0.001$0.001
job-serp-result100$0.00124$0.124
Total$0.125

SERP + detail enrichment, 100 jobs

EventCountRateSubtotal
job-start1$0.001$0.001
job-serp-result100$0.00124$0.124
job-detail-result100$0.0025$0.250
Total$0.375

Full pipeline: SERP + detail + employer profiles, 500 jobs, 80 unique employers

EventCountRateSubtotal
job-start1$0.001$0.001
job-serp-result500$0.00124$0.620
job-detail-result500$0.0025$1.250
company-detail-result80$0.005$0.400
Total$2.271

New Apify accounts include $5 free monthly credit, enough to cover roughly 1,300 detail-enriched jobs before any charge.

API integration

See the auto-generated API tab for ready-to-run language-specific examples (cURL, JavaScript, Python, .NET, Ruby, PHP) that stay in sync with the actor's input schema.

Use with AI agents (MCP)

This actor is compatible with Apify's MCP server for use in Claude, Cursor, LangChain and other agent frameworks. For per-tool schemas and MCP-client copy-paste snippets, see the MCP tab on the actor page.

{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.apify.com/?tools=santamaria-automations/cwjobs-uk-scraper",
"--header",
"Authorization: Bearer <YOUR_API_TOKEN>"
]
}
}
}

Example prompt: "Find 30 Java developer contract jobs on CWJobs in London that are outside IR35 with a day rate over £500, return company, salary, contract length and posted date."

Why this scraper

Built HTTP-only in Go for consistent speed and low cost. Uses schema.org JobPosting data on every detail page, so structured salary and dates come straight from the site's own markup instead of guesswork. Derives IR35 status, contract length and tech skills from the full ad text with UK IT contracting vocabulary (inside / outside IR35, deemed inside via umbrella, month or week engagement lengths). Runs at 128 MB RAM with no browser overhead.

Common use cases

  • Recruitment agencies tracking new IT vacancies daily by keyword and location
  • Contract recruiters benchmarking day rates by tech stack and IR35 status
  • IT staffing firms building account lists of hiring companies by tech skill
  • Market intelligence on which UK employers hire for AWS, Kubernetes, .NET or Java at scale
  • Researchers studying inside-vs-outside IR35 rate deltas since HMRC reforms

Notes and limits

  • Coverage: UK IT and tech vacancies posted to CWJobs.co.uk. CWJobs is a sister board of TotalJobs; detail pages are hosted on totaljobs.com.
  • searchQueries and searchUrls are independent inputs. Supply both and the actor runs all keyword tasks plus all URL tasks in sequence, deduplicating by job ID across the full run.
  • Salary is normalised to min, max, currency and period when the ad exposes numbers. When the ad only shows "Competitive" or "Undisclosed", the range comes through as null.
  • IR35 status is populated only when the ad or salary text explicitly mentions IR35. Permanent listings will show null.
  • apply_url is extracted from the PDP apply-button anchor and requires includeJobDetails: true. For TotalJobs-hosted applications the URL follows the form https://www.totaljobs.com/job/{uuid}/application/authentication?locale=en_GB. Third-party ATS redirects return the external ATS URL.
  • Contract length parses 6 month contract, 12 months, 3-month, and N weeks formats and normalises to months.
  • description_full, description_html and description_md require includeJobDetails: true. SERP rows carry no description.

Feed the company_website field from this actor into either of the two below to enrich rows with direct contact data:

  • Website Email & Phone Scraper (VpLcKwzcl70CPHljg) — regex-based, fast and cheap; extracts emails and phones from a company website.
  • Website Contact Extractor (JmMPJ7zumUfB7p0Kr) — LLM-based, higher precision on structured contacts (names, roles, department-scoped emails).

More UK and international job scrapers from our fleet:

  • Reed.co.uk Scraper — UK jobs across all industries with salaries and full descriptions.
  • Indeed Scraper — global job coverage with logos and benefits.
  • LinkedIn Jobs Scraper — LinkedIn's public job search across every geography.
  • Job Feed — one normalised, deduplicated job feed across 50+ international job boards.
  • Career Site Jobs Scraper — scrape jobs directly from company career pages (Greenhouse, Lever, Workday, etc.).

Support

  • Questions or issues with this actor? Email contact@nanoscrape.com or open a ticket in the Issues tab — we typically reply within 6 hours.
  • Feature request for this actor? Open a ticket in the Issues tab or email contact@nanoscrape.com with the field or filter you need and (if possible) a URL showing the data live on CWJobs.
  • Need a scraper for a job board we do not cover yet? Email contact@nanoscrape.com with the target site and your rough usage volume — we ship new boards regularly.