S1 Jobs Scraper: Scotland Jobs, Salaries & Employers
Pricing
from $1.99 / 1,000 jobs
S1 Jobs Scraper: Scotland Jobs, Salaries & Employers
Scrape every job on s1jobs.com (Scotland's leading job board). Extract titles, employers with logos, full JobPosting JSON-LD, parsed salary bands, geo-coords, posting dates. Auto-paginate listings or paste direct detail URLs. $1.99 per 1,000 jobs.
Pricing
from $1.99 / 1,000 jobs
Rating
0.0
(0)
Developer
GetAScraper
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
S1 Jobs is Scotland's leading job board, advertising thousands of live vacancies across Glasgow, Edinburgh, Aberdeen, Dundee, Inverness, and the Highlands. This Actor pulls every job listing and decodes the full JobPosting JSON-LD schema into clean, structured rows ready for B2B lead generation, salary benchmarking, or recruitment analytics.
Pay-per-result pricing, no subscription, no minimums.
What does S1 Jobs Scraper do?
Scrape s1jobs.com at scale. Enter any combination of keywords (electrician, nurse, accountant, project-manager, driver) and locations (Glasgow, Edinburgh, Aberdeen, Fife, Highlands), and the Actor walks the search listings, follows the next page links, and fetches each job's detail page. Detail pages are parsed from the embedded Schema.org JobPosting JSON-LD block, giving you perfectly structured data with no fragile DOM scraping.
Each row contains the job ID, title, employer name and logo, full description, posting and expiry dates, employment type, parsed salary band (min / max / currency / period), and structured address (locality, region, postal code, country, latitude, longitude). The Actor is built on Crawlee + Cheerio, so it runs on lightweight HTTP, not a browser. Standard datacenter IPs succeed without proxies.
Built for recruiters, talent intelligence teams, salary researchers, regional economic analysts, and CRM enrichment pipelines.
Why use S1 Jobs Scraper?
- Scotland-only coverage. S1 Jobs is the dominant job board for Scottish vacancies. Capture roles the major UK-wide boards miss.
- B2B leads with logos. Every job row ships the employer name and logo URL. Drop straight into HubSpot, Salesforce, or Airtable.
- Salary benchmarking. Parse raw salary strings into structured
min,max,currency, andperiodfields. Run market-rate research across regions and sectors. - Geo-coordinates. Address parsing includes latitude and longitude for every job. Power maps and heatmaps.
- Job alerts pipeline. Filter by
dateWithinDaysto emit only fresh postings. Wire into Slack, email, or webhook alerts. - No anti-bot blocks. Standard datacenter IPs work. No residential proxy spend required.
How to use S1 Jobs Scraper
- Open the Input tab. Type one or more keywords (e.g.
electrician, driver) and one or more locations (e.g.glasgow, edinburgh). Or paste specific listing or detail URLs into Start URLs for surgical precision. - Click Run. The Actor queues listing pages, walks pagination, and fetches every detail page.
- Download the dataset. Output is available as JSON, CSV, Excel, or via the API. Choose from four pre-built views: Overview, B2B Leads, Salary Benchmark, and Newest Postings.
Input
| Field | Type | Description | Default |
|---|---|---|---|
startUrls | array | Paste listing URLs (e.g. https://www.s1jobs.com/jobs/electrician/in-glasgow/) or detail URLs. Overrides keyword/location filters when set. | [] |
keywords | array | Job titles, sectors, or categories. Each becomes a /jobs/<keyword>/ path. Examples: electrician, nurse, accountant, project-manager, driver, teacher, social-care. | [] |
locations | array | Scottish cities or regions. Each becomes a /in-<location>/ path. Examples: glasgow, edinburgh, aberdeen, dundee, fife, highlands, orkney. | [] |
maxItems | integer | Maximum job rows to emit per search URL (1-10000). | 100 |
includeDescription | boolean | Emit full HTML description. Set false for lean B2B lead rows (~1 KB instead of ~10 KB). | true |
dateWithinDays | integer | Only emit jobs posted within the last N days. 0 = no filter. | 0 |
maxConcurrency | integer | Parallel HTTP requests for detail pages (1-20). | 8 |
maxRequestRetries | integer | Per-URL retry budget on transient errors and 5xx (0-10). | 3 |
proxyConfiguration | object | S1 Jobs does not block datacenter IPs. Leave disabled for cheapest runs. | { "useApifyProxy": false } |
Example input
{"keywords": ["electrician", "driver"],"locations": ["glasgow", "edinburgh"],"maxItems": 250,"includeDescription": true,"dateWithinDays": 30,"maxConcurrency": 8}
Output
Each row is one job posting. Download the dataset in JSON, CSV, HTML, or Excel. The Actor also writes a run-summary to the key-value store with top employers, top locations, salary distribution, and contract type counts.
Example row
{"rowType": "job","listingUrl": "https://www.s1jobs.com/jobs/electrician/in-glasgow/","jobId": "126836433","jobUrl": "https://www.s1jobs.com/job/electrician-engineer-126836433","title": "Electrician Engineer","description": "<p><strong>Electrician Engineer</strong></p><p><strong>Contract: Government</strong>...","datePosted": "2026-05-13","validThrough": "2026-06-10","employmentType": "FULL_TIME, OTHER","industry": null,"directApply": true,"jobLocationType": null,"employer": {"name": "ISS Facility Services","url": "","logoUrl": "https://www.s1jobs.com//ui/img/shared/company_logos/1f50adaef0bda3b04b964a4d5df6c710.png"},"location": {"text": "Hairmyres, South Lanarkshire, G758EA, UK","locality": "Hairmyres","region": "South Lanarkshire","postalCode": "G758EA","country": "UK","lat": 55.7581,"lng": -4.23012},"salary": {"rawText": null,"min": null,"max": null,"currency": "GBP","period": "annum"},"scrapedAt": "2026-06-07T03:55:00.000Z"}
Data table
| Field | Type | Description |
|---|---|---|
rowType | string | Always job for job rows. |
listingUrl | string | The search page the job was discovered on. |
jobId | string | The 9-digit S1 Jobs vacancy ID, parsed from the URL. |
jobUrl | string | Canonical URL of the job detail page. |
title | string | Job title as listed. |
description | string | Full HTML description (or empty if includeDescription=false). |
datePosted | string | ISO date the job was posted. |
validThrough | string | null | ISO date the listing closes. |
employmentType | string | null | Comma-joined list (e.g. FULL_TIME, OTHER). |
industry | string | null | Industry tag if provided. |
directApply | boolean | null | Whether the job supports direct apply on s1jobs.com. |
jobLocationType | string | null | TELECOMMUTE for remote roles. |
employer.name | string | Hiring organization name. |
employer.url | string | Hiring organization website if provided. |
employer.logoUrl | string | null | URL of the employer logo image. |
location.text | string | Joined locality, region, postalCode, country. |
location.locality | string | null | City or town. |
location.region | string | null | County or region. |
location.postalCode | string | null | UK postcode. |
location.country | string | Country code (always UK for S1 Jobs). |
location.lat | number | null | Latitude. |
location.lng | number | null | Longitude. |
salary.rawText | string | null | Original visible salary string when JSON-LD omits min/max. |
salary.min | number | null | Minimum salary. |
salary.max | number | null | Maximum salary. |
salary.currency | string | Currency code (always GBP for S1 Jobs). |
salary.period | string | null | annum, hour, day, week, or month. |
scrapedAt | string | ISO timestamp when the row was written to the dataset. |
Pricing
$1.99 per 1,000 results. Pay only for the data you extract. A 5,000-row run costs about $9.95 of platform credit. Compute and storage costs are negligible because the Actor runs on lightweight HTTP, not a browser. No subscription, no minimums, no proxy overhead.
Tips or Advanced options
- Use
startUrlsfor precision. If you only want jobs from a specific listing, paste the URL directly. Direct detail URLs always emit 1 row each. - Combine keywords and locations. Every keyword is paired with every location, so
["electrician", "driver"]x["glasgow", "edinburgh"]produces 4 search URLs. - Trim descriptions for B2B lead lists. Set
includeDescription: falseto drop description HTML. Rows shrink from ~10 KB to ~1 KB, so a 10,000-row run costs 10x less to store. - Tighten freshness. Set
dateWithinDays: 7to only emit jobs posted in the last week. Great for daily job alerts. - Avoid burning rate limits. S1 Jobs is open. Default
maxConcurrency: 8is comfortable. If you observe 429s, drop to 4 or enable Apify Residential GB. - Use the B2B Leads view. In the Output tab, switch to the
leadsview to see a clean table of title, employer, location, and apply URL ready for CRM import.
FAQ, disclaimers, and support
Is scraping S1 Jobs legal? This Actor accesses publicly available job postings. You are responsible for ensuring your use case complies with s1jobs.com's Terms of Service, the UK Computer Misuse Act, and applicable data protection laws. Do not republish full descriptions verbatim. This Actor is intended for personal research, recruitment analytics, and CRM enrichment, not bulk redistribution.
How fresh is the data? The Actor fetches live pages in real time. Job postings appear in your dataset within seconds of the run completing.
Why are some salaries missing? S1 Jobs JSON-LD sometimes includes only unitText (e.g. YEAR) without numeric min/max values. The Actor captures the period but leaves min/max as null. Set includeDescription: true and parse the visible salary string in your downstream pipeline for a second pass.
What's the difference between S1 Jobs Scraper and cwjobs-scraper? CWJobs targets the UK tech / IT job market on cwjobs.co.uk. S1 Jobs targets general Scottish vacancies on s1jobs.com. They are sister Actors in the same portfolio and use the same JSON-LD extraction logic.
How do I report a bug or request a feature? Open an issue in the Issues tab. Include the run ID and a sample URL that reproduces the problem.
Need a custom scraper for another regional job board or a vertical-specific extractor? Custom development is available on request.