S1 Jobs Scraper: Scotland Jobs, Salaries & Employers avatar

S1 Jobs Scraper: Scotland Jobs, Salaries & Employers

Pricing

from $1.99 / 1,000 jobs

Go to Apify Store
S1 Jobs Scraper: Scotland Jobs, Salaries & Employers

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

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

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, and period fields. 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 dateWithinDays to 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

  1. 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.
  2. Click Run. The Actor queues listing pages, walks pagination, and fetches every detail page.
  3. 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

FieldTypeDescriptionDefault
startUrlsarrayPaste listing URLs (e.g. https://www.s1jobs.com/jobs/electrician/in-glasgow/) or detail URLs. Overrides keyword/location filters when set.[]
keywordsarrayJob titles, sectors, or categories. Each becomes a /jobs/<keyword>/ path. Examples: electrician, nurse, accountant, project-manager, driver, teacher, social-care.[]
locationsarrayScottish cities or regions. Each becomes a /in-<location>/ path. Examples: glasgow, edinburgh, aberdeen, dundee, fife, highlands, orkney.[]
maxItemsintegerMaximum job rows to emit per search URL (1-10000).100
includeDescriptionbooleanEmit full HTML description. Set false for lean B2B lead rows (~1 KB instead of ~10 KB).true
dateWithinDaysintegerOnly emit jobs posted within the last N days. 0 = no filter.0
maxConcurrencyintegerParallel HTTP requests for detail pages (1-20).8
maxRequestRetriesintegerPer-URL retry budget on transient errors and 5xx (0-10).3
proxyConfigurationobjectS1 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

FieldTypeDescription
rowTypestringAlways job for job rows.
listingUrlstringThe search page the job was discovered on.
jobIdstringThe 9-digit S1 Jobs vacancy ID, parsed from the URL.
jobUrlstringCanonical URL of the job detail page.
titlestringJob title as listed.
descriptionstringFull HTML description (or empty if includeDescription=false).
datePostedstringISO date the job was posted.
validThroughstring | nullISO date the listing closes.
employmentTypestring | nullComma-joined list (e.g. FULL_TIME, OTHER).
industrystring | nullIndustry tag if provided.
directApplyboolean | nullWhether the job supports direct apply on s1jobs.com.
jobLocationTypestring | nullTELECOMMUTE for remote roles.
employer.namestringHiring organization name.
employer.urlstringHiring organization website if provided.
employer.logoUrlstring | nullURL of the employer logo image.
location.textstringJoined locality, region, postalCode, country.
location.localitystring | nullCity or town.
location.regionstring | nullCounty or region.
location.postalCodestring | nullUK postcode.
location.countrystringCountry code (always UK for S1 Jobs).
location.latnumber | nullLatitude.
location.lngnumber | nullLongitude.
salary.rawTextstring | nullOriginal visible salary string when JSON-LD omits min/max.
salary.minnumber | nullMinimum salary.
salary.maxnumber | nullMaximum salary.
salary.currencystringCurrency code (always GBP for S1 Jobs).
salary.periodstring | nullannum, hour, day, week, or month.
scrapedAtstringISO 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 startUrls for 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: false to 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: 7 to only emit jobs posted in the last week. Great for daily job alerts.
  • Avoid burning rate limits. S1 Jobs is open. Default maxConcurrency: 8 is 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 leads view 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.