CV-Library Scraper [$1/1K💰] | UK Jobs | Salary Data
Pricing
from $0.90 / 1,000 results
CV-Library Scraper [$1/1K💰] | UK Jobs | Salary Data
Scrape UK job listings from cv-library.co.uk: titles, companies, locations + geo-coordinates, parsed salaries, contract types, dates, full descriptions and apply URLs (up to 10,000 jobs/run). Automatic Cloudflare warm-up. Pay-per-event.
Pricing
from $0.90 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 days ago
Last modified
Categories
Features
Share
CV-Library Scraper - UK Job Listings, Salaries and Recruiter Data
The CV-Library Scraper extracts public UK job listings from cv-library.co.uk into structured JSON. Collect job titles, companies, advertiser type, locations with coordinates, parsed salary ranges, contract type, posting dates, descriptions, apply URLs and company details.
Use it for UK recruitment lead generation, salary benchmarking, hiring-trend tracking, job-feed APIs or labour-market research. Search by keyword and location, combine several queries, or supply CV-Library search and job URLs directly. The Actor handles up to 10,000 jobs per run and includes an automatic Cloudflare warm-up on a UK residential connection.
Main Use Cases for CV-Library Job Data
- UK job market research - analyze vacancies by keyword, region, salary and contract type.
- Salary benchmarking - compare published salary minimums and maximums across roles.
- Recruitment lead generation - identify companies and whether an ad comes from an agency or a direct employer.
- Hiring trend tracking - schedule runs and compare posting and expiry dates over time.
- Job feed and board products - load normalized UK listings into an app, database or alerting pipeline.
- Candidate sourcing research - map demand by city, region, postcode, industry and contract type.
- AI job assistants - provide an LLM with structured vacancies, salaries and apply links.
How It Works

At run start, the Actor launches a real Chromium browser once through a UK residential sticky session. That warm-up solves the public Cloudflare challenge and establishes the IP and user-agent pair. The crawl then uses a plain HTTP Cheerio crawler on the same sticky session and cookie jar, so it can read search pages without rendering every page in a browser.
Search pages expose the site's own backend records inside Next.js flight data. Each record can include the job ID, title, company account, location and centroid, salary object, contract type, posting date, category, featured flag, logo, apply URLs and a description. The Actor reads those records directly and paginates with page_number; it can also fall back to the visible job cards if the flight payload is absent.
By default, the Actor returns list-level data: one search request can cover 100 jobs, which is fast and less likely to trigger rate limits. With includeDescription: true, it opens each job page for the full description, expiry date, contract length, employment type and direct-apply flag. Detail requests are slower and more likely to be blocked; if one fails, the Actor keeps the list-level record instead of dropping the job.
The warm-up is fixed; all requests use the UK residential route. Direct job URLs are supported, but a direct job URL is handled as a detail request - with includeDescription: false it produces no row in the current build. Use a search URL or the keyword fields for list mode.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
searchQuery | string | No | software developer | Job title, keywords or skills. Empty means browse all jobs. |
keywords | string[] | No | [] | Extra queries. Each runs its own search and shares the maxResults budget. |
location | string | No | - | City, town, county or postcode, such as London, M1 1AA or West Yorkshire. |
distance | integer | No | 15 | Radius in miles, 0-750. Applies only with a location. |
contractType | string | No | any | any, permanent, contract, temporary, part-time or apprenticeship. |
daysOld | integer | No | 14 | Posted-within filter. CV-Library uses 1, 3, 7 and 14-day bands; other values round up. |
salaryMin | integer | No | 20000 | Minimum annual salary in GBP. |
salaryMax | integer | No | 100000 | Maximum annual salary in GBP. |
startUrls | array | No | [] | CV-Library search or job URLs. Each item is { "url": "..." }. These bypass search construction. |
maxResults | integer | No | 100 | Maximum jobs, 1-10,000. Free accounts receive a 10-job preview. |
maxPages | integer | No | 50 | Present in the schema, but the current build derives its page cap from maxResults and does not read this value. |
includeDescription | boolean | No | false | Fetch each job page for the full description and extra detail fields. |
searchQuery and keywords are combined: each keyword runs a separate search and all searches share the same result budget. startUrls take priority over the search fields. The daysOld, distance, salary and contract filters are applied only to searches the Actor builds; they are not added to a supplied URL.
Output
The dataset contains 35 fields per job. Fields the listing does not publish are null.
| Field group | Fields | What you get |
|---|---|---|
| Identity | id, url, applyUrl, title, source, isFeatured, directApply | Job ID, public URL, apply URL, title and source flags. directApply requires detail mode. |
| Company | company, companyId, companyUrl, companyLogo, advertiserType | Company identity and agency/direct-employer signal. |
| Location | location, city, region, postcode, country, latitude, longitude | Display location, parsed geography and coordinates. |
| Salary | salaryRaw, salaryMin, salaryMax, salaryCurrency, salaryPeriod | Original salary text, parsed values, GBP and period. |
| Employment | contractType, contractLength, employmentType, industry | Contract and industry fields; the last three are often detail-only. |
| Dates | postedText, postedDate, postedDateISO, expiryDate, scrapedAt | Posting text and dates, expiry in detail mode, extraction time. |
| Description | descriptionHtml, descriptionText | List-level teaser or full description, depending on mode. |
advertiserType comes from the backend account type when available and falls back to a text heuristic on the page. Treat it as a research signal, not a legal classification. salaryMin and salaryMax are numbers only when CV-Library publishes a usable salary; otherwise they are null. contractLength, employmentType, expiryDate and directApply are detail-mode fields and remain null in list mode.
Pricing
The Actor uses pay-per-event pricing: a start event per run, a result event for list rows and a detail event for full-detail rows.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|
| Actor start, per run | $0.00005 | $0.00005 | $0.00005 | $0.00005 | $0.00005 | $0.00005 |
result per job | $0.001 | $0.001 | $0.00095 | $0.0009 | $0.0009 | $0.0009 |
detail per job | $0.0014 | $0.0014 | $0.00135 | $0.0013 | $0.0013 | $0.0013 |
List mode is $1.00 per 1,000 jobs on the FREE tier. Detail mode additionally uses the detail event; the live pricing panel shows the current total for your run. Free accounts receive a 10-job preview, and preview rows are billed. UK residential proxy traffic is billed separately through Apify's proxy accounting.
Example Input
{"searchQuery": "care assistant","location": "Leeds","distance": 15,"contractType": "permanent","maxResults": 200,"includeDescription": false}
Example Output
{"id": "3494812","url": "https://www.cv-library.co.uk/job/3494812/care-assistant-leeds","applyUrl": "https://www.cv-library.co.uk/job/3494812/care-assistant-leeds/apply","title": "Care Assistant - Days","company": "Example Care Homes","companyId": "100234","companyUrl": "https://www.cv-library.co.uk/company/100234","advertiserType": "Recruitment Agency","location": "Leeds, West Yorkshire","city": "Leeds","region": "West Yorkshire","postcode": "LS1 4AP","country": "GB","latitude": 53.801,"longitude": -1.548,"salaryRaw": "GBP 22,000 - 26,000 per annum","salaryMin": 22000,"salaryMax": 26000,"salaryCurrency": "GBP","salaryPeriod": "YEAR","contractType": "Permanent","industry": "Healthcare","postedText": "2 days ago","postedDate": "2026-10-08","postedDateISO": "2026-10-08T08:00:00Z","isFeatured": false,"source": "cv-library.co.uk","scrapedAt": "2026-10-10T10:00:00.000Z"}
Integrations and Automation
Run the Actor through the Apify API, Apify MCP server, Zapier, Make, n8n or an Apify schedule. Send jobs to Google Sheets, Airtable, a CRM, a job board, a database or a Slack/email alert. Export the dataset as JSON, CSV, Excel, XML or HTML.
For monitoring, keep id as the stable key and snapshot runs on a schedule. Compare postedDateISO, salaryMin and salaryMax to spot new roles and salary changes. Store the search parameters separately because the output does not repeat the query or location.
Related Actors
- Indeed Job Scraper - broader international job-board coverage.
- CareerBuilder Scraper - US job listings and company data.
- Jobs Teamtailor Scraper - ATS-hosted roles from company career sites.
FAQ
Does CV-Library have a public API?
CV-Library documents a partner Job View API, but it requires approved partner credentials. This Actor reads the public search pages and the site's own embedded backend records instead. It does not use a private API key.
Why do some rows lack descriptions or expiry dates?
List mode returns the teaser and fields available in the search payload. Set includeDescription: true to open each job page for the full description, contract length, employment type, expiry date and direct-apply flag. Detail mode is slower and costs an additional event.
Why does a direct job URL return nothing?
In the current build, a /job/<id>/... URL is treated as a detail request. When includeDescription is false, the detail handler has no list record to fall back to and emits no row. Use a search URL or keyword input for list mode, or enable detail mode for direct job URLs.
What does maxPages do?
It is present in the input schema for compatibility, but the current build calculates its page budget from maxResults and does not read the value. Use maxResults to control run size.
Are salaries always available?
No. The Actor returns salaryRaw and parsed salaryMin/salaryMax only when the employer publishes a salary. It never estimates or invents a missing range. salaryPeriod can be year, month, week, day or hour.
Can I use the listings for candidate outreach?
The listings are public job ads, but company contacts and any personal data still require a lawful basis under UK GDPR and the Data Protection Act. Do not use the Actor to scrape candidate profiles or to send unlawful unsolicited marketing.
For AI Agents and LLM Apps
The Actor is callable through the Apify API and Apify MCP server and returns one JSON row per UK job listing.
Minimal input
{"searchQuery": "software developer","location": "London","maxResults": 10,"includeDescription": false}
Behavior an agent should know
- One item represents one job ad, not a candidate or a guaranteed live vacancy.
includeDescriptionis the main cost and speed lever.- Salary fields can be null when no salary is published.
advertiserTypeis a research signal, not a verified legal status.- Direct job URLs require detail mode in the current build.
maxPagesis currently ignored; usemaxResults.- Free accounts are capped at 10 jobs.
Suggested tool description: "Collect UK CV-Library job listings with titles, companies, geo-located salaries, contract types, dates and apply URLs."
Legal and Compliance
This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by CV-Library Ltd. It accesses publicly available job listings and job pages. It does not bypass login, authentication or paywalls; the browser warm-up is used only to pass the site's public-facing Cloudflare challenge on a residential connection.
CV-Library's terms, robots guidance and applicable law still apply. UK GDPR and the Data Protection Act govern any personal data in listings or company records. Use the data for lawful recruitment, market research and salary analysis, keep only what you need, and do not use it for unlawful outreach or automated decisions about candidates.
SEO Keywords
CV-Library scraper, cv-library API, UK job scraper, UK jobs data, CV-Library jobs, UK job listings, job board scraper, salary benchmarking, UK salary data, recruitment lead generation, UK labour market data, hiring trends UK, job feed API, CV-Library salary data, contract jobs UK, permanent jobs UK, recruiter data, job posting monitor, UK job market analysis, candidate sourcing research, geo job data, job dataset