TotalJobs Scraper
Pricing
from $0.99 / 1,000 results
TotalJobs Scraper
Introducing the Total Jobs Scraper, a lightweight actor designed to efficiently extract job listings from Total Jobs. Fast and user-friendly. For optimal performance and to ensure reliable data collection, the use of residential proxies is strongly recommended. Start gathering job data today!
Pricing
from $0.99 / 1,000 results
Rating
5.0
(3)
Developer
Shahid Irfan
Maintained by CommunityActor stats
1
Bookmarked
86
Total users
10
Monthly active users
9 days ago
Last modified
Categories
Features
Share
What does Totaljobs Scraper do?
Totaljobs Scraper collects live UK job listings from Totaljobs.com and saves them as structured records. Search by job title, skill, or UK location, or paste a Totaljobs search URL you already use. Each record includes the job title, company, location, salary text, parsed salary range, posting and expiry dates, direct job URL, company profile link, logo, listing description, result position, search totals, and listing metadata.
The Actor reads the search results pages only. It does not open individual job adverts, so a run returns listing-level data in seconds instead of spending one request per job.
Use it for recruiting research, salary benchmarking, hiring demand monitoring, lead generation, and job market analysis.
Why use Totaljobs Scraper?
- Reads the search results pages and never opens a job advert, so 200 jobs take seconds rather than minutes.
- Keeps salary text and parsed salary values, posting and expiry timestamps, company data, labels, skills, result position, and search totals.
- Collects live UK vacancies across roles, sectors, and locations without manual copy-paste.
- Starts from a keyword and location, or from an exact Totaljobs search URL with the filters you already selected.
- Skips repeated listings by job identifier or job URL.
- Saves each page as soon as it arrives, so a later page failure does not discard earlier results.
- Retries temporary failures, switches network sessions when a request is refused, re-reads the page when the site changes its response format, and retries unavailable pages in a recovery pass before finishing.
- Supports Apify schedules, proxy settings, dataset exports, webhooks, and no-code automations.
What data can you extract from Totaljobs?
| Field | Type | Description |
|---|---|---|
job_id | String | Totaljobs job identifier. |
harmonised_id | String | Stable harmonised identifier used by Totaljobs. |
title | String | Job title. |
company | String | Hiring company or recruitment agency. |
company_id | Number | Totaljobs company identifier when available. |
location | String | Job location text, including postcode when shown. |
postcode | String | Postcode shown in the listing when available. |
salary | String | Salary or rate text as advertised. |
salary_min | Number | Parsed lower salary value when the salary text contains one. |
salary_max | Number | Parsed upper salary value when the salary text contains one. |
salary_currency | String | Parsed currency such as GBP. |
salary_period | String | Parsed pay period: hour, day, week, month, or year. |
date_posted | String | Human-readable posting age such as 3 days ago. |
date_posted_iso | String | ISO posting timestamp. |
expiry_date_iso | String | ISO expiry timestamp when available. |
published_from_iso | String | ISO publish-from timestamp. |
period_posted_iso | String | ISO period-posted timestamp. |
job_url | String | Direct Totaljobs job listing URL. |
company_url | String | Totaljobs company profile or company jobs URL. |
company_logo | String | Company logo URL when available. |
description_snippet | String | Short description shown in the search result. |
description_text | String | Clean description text from the search result. |
source_search_url | String | Search URL that produced the record. |
source_page | Number | Result page number. |
search_total | Number | Total matching jobs reported by the search page. |
search_page_count | Number | Total result pages reported by the search page. |
search_context | String | Search result context reported by Totaljobs. |
position_on_page | Number | Position of the listing on the result page. |
position_absolute | Number | Absolute listing position from the search data. |
fingerprint_count | Number | Fingerprint count from the search data. |
job_posting_sequence | Number | Job posting sequence from the search data. |
is_featured | Boolean | Whether the listing is marked featured. |
is_premium | Boolean | Whether the listing is marked premium. |
is_new | Boolean | Whether the listing is marked new. |
is_sponsored | Boolean | Whether the listing is marked sponsored. |
is_highlighted | Boolean | Whether the listing is highlighted. |
is_top_job | Boolean | Whether the listing is marked as a top job. |
is_anonymous | Boolean | Whether the employer is anonymous. |
is_traffic_from_partner | Boolean | Whether the listing traffic comes from a partner site. |
is_backfilled | Boolean | Whether the listing is backfilled. |
is_cross_posted | Boolean | Whether the listing is cross-posted. |
is_partnership_job | Boolean | Whether the listing is a partnership job. |
show_partnership_label | Boolean | Whether a partnership label is shown. |
partner_source | String | Partner source name when available. |
work_from_home | String | Work-from-home detail when the listing provides one. |
skills | Array | Skills attached to the listing when available. |
labels | Array | Listing labels from the search result. |
top_labels | Array | Top labels from the search result. |
unified_salary | Object | Unified salary data when Totaljobs provides it. |
unified_travel_time | Object | Unified travel-time data when available. |
travel_time | Object | Travel-time data when available. |
cv_to_job_score | Number | Candidate-to-job score when available. |
section | String | Result section assigned by Totaljobs. |
How to use Totaljobs Scraper
- Open the Actor in Apify Console.
- Enter a keyword such as
admin,software engineer, ordata analyst. - Optionally add a UK location such as London, Manchester, or Leeds.
- Set the maximum number of jobs and an optional posting-age filter.
- Run the Actor and download the dataset, or connect it to your workflow.
If you already have a filtered Totaljobs search URL, paste it into startUrl and leave the keyword and location fields empty. The URL replaces the keyword and location search.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
keyword | String | No | admin | Job title, skill, or search phrase. |
location | String | No | - | UK location to narrow the search. Leave empty for broad UK results. |
startUrl | String | No | - | Totaljobs search URL to use instead of keyword and location. |
url | String | No | - | Alias for startUrl for workflows that already provide a search URL. |
postedWithin | String | No | - | Keep jobs posted in the last 1, 3, 7, 14, or 30 days. |
results_wanted | Integer | No | 20 | Maximum number of jobs to save. |
max_pages | Integer | No | 5 | Maximum search result pages to process. Each page holds 25 jobs. |
proxyConfiguration | Object | No | Apify residential proxy | Proxy settings for reliable access. Totaljobs refuses many datacenter addresses. |
A supplied Totaljobs URL wins over keyword and location. Both are kept as separate search modes, so a URL run does not inherit a keyword or location value.
Usage Examples
Basic keyword search
Collect 20 admin jobs from across the UK:
{"keyword": "admin","results_wanted": 20}
Keyword and location search
Collect software engineer jobs in London:
{"keyword": "software engineer","location": "London","results_wanted": 50,"max_pages": 3}
Custom Totaljobs search URL
Use a search URL with the filters already applied:
{"startUrl": "https://www.totaljobs.com/jobs/data-analyst/in-manchester","results_wanted": 40,"max_pages": 2}
Recent jobs only
Keep only jobs posted in the last seven days:
{"keyword": "warehouse operative","location": "Birmingham","postedWithin": "7","results_wanted": 30,"max_pages": 4}
Larger batch
Collect 200 jobs with a higher page cap:
{"keyword": "admin","results_wanted": 200,"max_pages": 10}
Sample Output
{"job_id": "108074354","harmonised_id": "6a9f2467-ada0-46ae-9f7e-3cfd368ae1f6","title": "Admin","company": "Job&Talent","company_id": 236510,"location": "Chesterfield (S43), S43 3FG","salary": "Up to £13.80 per hour","salary_max": 13.8,"salary_currency": "GBP","salary_period": "hour","date_posted": "27 days ago","date_posted_iso": "2026-10-02T13:12:49.617Z","expiry_date_iso": "2026-10-30T14:12:49.617Z","published_from_iso": "2026-10-02T13:12:49.617Z","period_posted_iso": "2026-10-02T13:12:49.617Z","job_url": "https://www.totaljobs.com/job/admin/job-talent-job108074354","company_url": "https://www.totaljobs.com/jobs/job%26talent?cmpId=236510&cmp=1","company_logo": "https://tjgliveassets.s3.eu-west-1.amazonaws.com/company-logos/68d5d7065d9743f687c6e38ba0d15a87.png","description_snippet": "Job&Talent is recruiting for a leading transport and logistics company in Chesterfield. They're hiring an admin staff member to coordinate daily transport activities, maintain records and communicate with drivers and customers.","description_text": "Job&Talent is recruiting for a leading transport and logistics company in Chesterfield. They're hiring an admin staff member to coordinate daily transport activities, maintain records and communicate with drivers and customers.","source_search_url": "https://www.totaljobs.com/jobs/admin","source_page": 1,"search_total": 2541,"search_page_count": 102,"search_context": "seoRL","position_on_page": 1,"position_absolute": 1,"fingerprint_count": 0,"job_posting_sequence": 0,"is_featured": false,"is_premium": false,"is_new": false,"is_sponsored": false,"is_highlighted": false,"is_top_job": false,"is_anonymous": false,"is_traffic_from_partner": false,"is_backfilled": false,"is_cross_posted": false,"is_partnership_job": false,"show_partnership_label": false,"section": "main"}
Tips for Best Results
- Use role names that appear in real job adverts, such as
data analyst,finance manager, orwarehouse operative. - Add a location when you need a regional dataset. Leave it empty for broad UK coverage.
- Start with
20results before raising the limit. A larger run uses more pages and more proxy traffic. - Use
postedWithinwhen you need fresh listings. The Actor asks Totaljobs for that age range and also checks the posting date before saving. When the reader fallback is used, the age filter is applied from the listing dates. - Raise
max_pageswhen a narrowpostedWithinrange leaves fewer jobs than requested. The page cap can stop a run before it reachesresults_wanted. - Raise
max_pagesfor broad searches or narrow date filters. Each page holds 25 jobs, so 200 results need 8 pages. - Keep the default residential proxy setting. Datacenter addresses are often refused, while residential addresses return results.
- Some listings do not publish salary, company logo, skills, labels, or an expiry date. Those fields are omitted instead of being saved as empty strings.
Integrations
- Google Sheets: review, filter, and share job datasets in spreadsheets.
- Airtable: build a searchable job or employer database.
- Webhooks: send new results to your own systems after each run.
- Make: build automated job monitoring workflows.
- Zapier: trigger notifications, CRM updates, or recruiting pipelines.
- Apify API: access datasets from your own applications and AI agents.
Export formats
- JSON for applications, data pipelines, and AI workflows.
- CSV for spreadsheet analysis.
- Excel for business reporting.
- XML for system integrations.
Frequently Asked Questions
Does the Actor visit each job advert?
No. It reads the data provided by each Totaljobs search results page. Runs stay listing-only, which keeps them fast and reduces load on the site.
Can I collect full job descriptions?
No. The Actor saves the listing description text shown in the search results, not the complete advert body. The description_snippet and description_text fields contain the available listing text.
Can I scrape a specific Totaljobs search URL?
Yes. Add the search page to startUrl. The Actor uses that URL instead of building a search from keyword and location. Filters that are part of the URL are kept.
How many jobs can I collect?
Set results_wanted to the number of records you need and raise max_pages when needed. The Actor stops when it reaches that target, reaches the last result page, or reaches the page cap.
Does the Actor remove duplicates?
Yes. Listings are deduplicated by job identifier or job URL before they are saved.
Why are some salary fields missing?
Some Totaljobs listings do not advertise a salary, or use text that cannot be parsed into a numeric range. The original salary text is still saved when it exists.
Why do I need a residential proxy?
Totaljobs refuses many datacenter addresses. A residential address gives the run a real network identity and returns results far more often. The Actor rotates network sessions when an address is refused, and falls back to a page reader when direct access is blocked.
What happens when a page fails?
The Actor retries temporary failures, moves to a fresh network session when an address is refused, and tries the JSON result list, the rendered page, and the reader fallback for every page. If a page still fails, it is queued and retried in a recovery pass with a fresh session. Records from earlier pages are already saved. Six failed pages in a row stop new pages, then the recovery pass retries them. The run finishes with partial results instead of discarding everything when some pages remain unavailable.
Why did the run finish with zero jobs?
If Totaljobs returns a valid empty search, the run completes with NO_RESULTS instead of failing. If every page was blocked or unreachable, the run still fails and reports the routes and status codes that were tried. A postedWithin filter can also produce NO_RESULTS_AFTER_FILTER when listings exist but none fall inside the requested age window.
Can I schedule repeat runs?
Yes. Use Apify schedules to run the Actor hourly, daily, weekly, or at another interval. Each run creates a new dataset.
Can I use the data in my own application?
Yes. Use the Apify API, webhooks, or dataset exports to connect the results to your own systems.
Support
For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.
Resources
Legal Notice
This Actor is designed for legitimate collection of publicly available job data. Users are responsible for complying with Totaljobs.com terms of service, applicable data protection laws, and any other rules that apply to their use of the data. Use collected data responsibly.