s1jobs.com scraper
Pricing
from $2.90 / 1,000 results
s1jobs.com scraper
Scrape Scottish job postings (all sectors) from s1jobs.com — title, salary, employer, location, real lat/lng coordinates, posted/closing dates, full description, structured skills, and the actual recruiter apply URL or apply email. Works with any listing or vacancy URL. JSON or CSV out.
Pricing
from $2.90 / 1,000 results
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Turn s1jobs.com into structured Scottish vacancy data — across every sector. Scrape every job from any s1jobs listing URL — title, salary band, employer (with logo, accreditations, URN), location with real lat/long coordinates, posted/closing dates, full description, structured skills, contract type, and the actual recruiter apply URL or apply email — pulled straight from s1jobs' public JSON API. JSON or CSV out, no compute charge per run, just per result.
How it works

✨ Why use this scraper?
Tracking the Scottish job market across every sector — engineering, healthcare, hospitality, public sector? Building salary benchmarks across regions? Need a clean dataset of Scottish vacancies without scrolling s1jobs manually?
- 🎯 Two starting points. Paste an s1jobs listing URL (
/jobs/{location}/,/jobs/{sector}/{location}/) or a direct vacancy URL — both classified automatically. - ⚡ Public JSON API as the data source. Each vacancy comes from
/api/job/{id}— far richer than HTML scraping (structured skills, accreditations, sponsorship flags, apply method, employer URN, premier vs standard advert type). - 📍 Real coordinates, not just postcodes. Optional one-fetch-per-vacancy pull of lat/lng from the page's JSON-LD geo block.
- 📧 Apply URL or email captured. No JS evaluation, no click-through resolver —
/api/job/{id}returns the recruiter destination directly (Aplitrak, PeopleHR, Workday, JobTrain, employer's own ATS, etc.) or the recruiter's email. - 🇬🇧 All sectors, all regions of Scotland. s1jobs is the largest Scottish-only job board — engineering, healthcare, charity, hospitality, public sector, retail.
- 📤 Clean exports. One row per vacancy with company enrichment merged in. JSON + CSV exported automatically.
🎯 Use cases
| Team | What they build |
|---|---|
| Recruitment / agencies | Daily new-vacancy feeds across Scotland, sliced by sector or region |
| Compensation & benefits | Salary benchmarks by sector, region, and contract type for Scotland |
| Talent acquisition | Competitive intelligence on what other Scottish employers are paying |
| Researchers / journalists | Scottish labour-market datasets across all sectors |
| Workforce strategy | Skills-demand mapping using the structured skills[] and coreSkills[] arrays |
| ATS aggregators | Real recruiter apply URLs (Aplitrak, Workday, PeopleHR, etc.) for redirect-and-track use cases |
📥 Supported inputs
You can pass two kinds of URL in startUrls. Each URL is classified automatically.
| URL pattern | Behaviour |
|---|---|
https://www.s1jobs.com/jobs/{location}/ | Listing by location (e.g. /jobs/glasgow/) |
https://www.s1jobs.com/jobs/{sector}/{location}/ | Listing by sector + location (e.g. /jobs/accountancy/glasgow/) |
https://www.s1jobs.com/jobs/{location}/{contract}/ | Listing by location + contract type (e.g. /jobs/glasgow/permanent/) |
https://www.s1jobs.com/job/{slug}-{numeric-id} | Vacancy detail — fetched via /api/job/{id} JSON |
Easiest workflow: apply your filters on s1jobs.com in the browser, copy the URL out of the address bar, paste into startUrls.
Not supported:
- Company profile URLs as a starting point (they're fetched automatically as enrichment when org enrichment is on)
- Hosts outside
s1jobs.com/www.s1jobs.com
⚠️ Proxy requirement
s1jobs.com IP-blocks many cloud / datacenter / generic proxies. You'll want a UK residential proxy. The actor defaults to Apify Residential pinned to country: GB; if you see consistent connection timeouts, you may need to bring your own pool (Evomi, BrightData, Smartproxy, etc. — any UK residential exit node works).
🔄 How it works
- Classify each
startUrlas a listing URL or a single vacancy URL. - Walk listing pagination (
?page=2,?page=3, …) until<a rel="next">disappears ormaxItemsis reached. - Fetch each vacancy via
/api/job/{id}JSON — all the structured data in one call. - Optionally fetch the vacancy's HTML page once to extract lat/lng coordinates (only field not in the API).
- Optionally fetch each unique company profile page once for the company website + a fuller description.
- Push one merged row per vacancy to the dataset and export
data.csv+data.jsonat the end.
⚙️ Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array | ["https://www.s1jobs.com/jobs/glasgow/"] | s1jobs listing URLs and/or vacancy URLs. Mix both freely. |
enrichOrganisation | boolean | true | Fetch each unique company profile once for companyWebsite, companyDomain, and a fuller companyDescription. The vacancy JSON API already includes the company name, logo, accreditations and a short description — disable this if those are enough. |
includeCoordinates | boolean | true | Fetch each vacancy's HTML page once to extract lat/lng. Disable to save one HTTP call per vacancy when coordinates aren't needed. |
maxItems | integer | 1000 | Hard cap on jobs collected. s1jobs has thousands of jobs across Scotland; this cap limits billing. |
maxConcurrency / minConcurrency | integer | 10 / 1 | Parallel HTTP request limits. |
maxRequestRetries | integer | 5 | Retries before a request is given up. |
proxy | object | Apify residential, GB | UK residential proxy strongly recommended (s1jobs IP-blocks many other proxies). |
📊 Output overview
Each scraped vacancy is one single dataset row of type: "job". When enrichOrganisation is true, the company's website, domain and a fuller description are merged into the same row — no separate organisation rows, so the dataset row count equals the job count exactly.
📦 Output sample
One merged row per vacancy (trimmed to the most useful fields):
{"type": "job","jobId": "126751069","vacancyUuid": "2b47dff6-3bc0-4752-9a9d-b3a6ee20a109","jobReference": "038","jobUrl": "https://www.s1jobs.com/job/scheduling-lead-126751069","title": "Scheduling Lead","companyName": "Redress Scotland","companyId": 3037932,"companyUrn": "RED54621GS","companyType": "Employer","companyConfidential": false,"companyProfileUrl": "https://www.s1jobs.com/companies/redress-scotland-3037932","logoUrl": "https://www.s1jobs.com//ui/img/shared/company_logos/3dd3725857bbc09e422bc941282b2906.png","companyImages": ["https://www.s1jobs.com/ui/img/shared/company_profiles/..."],"companyAccreditations": [],"companyDescription": "Redress Scotland is the body responsible for ...","location": "Bearsden, East Dunbartonshire","addressLocality": "Bearsden","postcode": "G611AA","coordinates": { "latitude": 55.9195, "longitude": -4.33371 },"salary": {"currency": "GBP","min": 49401,"max": 59152,"rate": null,"raw": "£49401 - £59152 per annum"},"contractType": "Permanent","hours": "Full","workingHourPattern": null,"coreSkills": ["Admin / Secretarial / PA"],"primaryCoreSkill": "Admin / Secretarial / PA","specialisms": [],"skills": ["Scheduling and calendar management","Project coordination","Remote work proficiency","Time management","Information security and confidentiality"],"jobSkills": { "skills": [...], "computer_skills": [], "soft_skills": [], "language_skills": [], "other_skills": [...] },"accreditations": [],"publicSectorType": null,"postedDate": "Mon, 27 Apr 2026 07:08:07 GMT","closingDate": null,"description": "<div><p>Redress Scotland have been operational now for a few years...</p></div>","applyType": "external","applyMethod": "url","applyUrl": "https://www.s1jobs.com/job/scheduling-lead-126751069","applyEmail": null,"externalApplyUrl": "https://www.aplitrak.com/?adid=bWljaGVsbGUubmFpcm4uMjAxMzUuNDU0QHJlZHJlc3NzY290bGFuZC5hcGxpdHJhay5jb20","requiresCv": false,"apprenticeship": null,"graduateSuitable": false,"immediateStart": null,"isSponsored": true,"isFeatured": false,"advertType": "Premier","jobBoost": "S1 Social Boost","talentPoolId": null,"companyWebsite": null,"companyDomain": null,"scrapedAt": "2026-05-09T00:14:52.114Z"}
🗂 Key output fields
| Group | Fields |
|---|---|
| Identifiers | type, jobId (numeric), vacancyUuid (s1's internal UUID), jobReference (employer's own ref), jobUrl, scrapedAt |
| Role | title, description (HTML), coreSkills[], primaryCoreSkill, specialisms[], skills[], jobSkills (full structured object), accreditations[], publicSectorType |
| Dates | postedDate, closingDate |
| Employer | companyName, companyId (numeric), companyUrn (S1's internal employer reference), companyType, companyConfidential, companyProfileUrl, logoUrl, companyImages[], companyAccreditations[] |
| Location | location (display string), addressLocality, postcode, coordinates.{latitude,longitude} (when includeCoordinates: true) |
| Compensation | salary.{currency,min,max,rate,raw}, contractType, hours, workingHourPattern |
| Apply flow | applyType (email / external / unknown), applyMethod (s1's raw value: "url" / "email"), applyUrl (the s1jobs page), applyEmail, externalApplyUrl (real recruiter destination — Aplitrak, PeopleHR, employer ATS, etc.) |
| Advert flags | requiresCv, apprenticeship, graduateSuitable, immediateStart, isSponsored, isFeatured, advertType (Premier / Standard), jobBoost, talentPoolId |
Company enrichment (merged into the same row when enrichOrganisation: true) | companyDescription, companyWebsite, companyDomain |
❓ FAQ
Why does the actor need a UK residential proxy?
s1jobs.com IP-blocks a wide range of cloud, datacenter, and generic proxy networks. Direct connections from cloud-hosted runners frequently time out. A UK residential proxy (Apify RESIDENTIAL group with country: GB, or your own pool) is the most reliable path. The actor's default proxy config already pins this.
Where does the apply URL come from?
From s1jobs' public JSON API: /api/job/{id} returns application_url.application_url directly when application_method is "url", and application_email_address when it's "email". No JS evaluation, no click-through resolver needed.
Why is vacancyUuid different from jobId?
jobId is the numeric ID in the URL (e.g. 126751069); vacancyUuid is s1jobs' internal UUID for the same row (e.g. 2b47dff6-3bc0-4752-9a9d-b3a6ee20a109). Both come from the API; use jobId as the stable join key.
Can I scrape private pages or applicant data?
No. The scraper accesses only publicly available pages and the public /api/job/ endpoint — no logged-in content, no recruiter-only views, no candidate data.
How do I limit results?
Set maxItems. The actor stops walking pagination as soon as the cap is reached, so a maxItems: 100 run typically only fetches 3–4 listing pages.
💬 Support
- For issues or feature requests, please use the Issues tab on the actor's Apify Console page.
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
🛠 Additional services
- Custom output shape, additional fields, or one-off datasets: muhamed.didovic@gmail.com
- Need a similar scraper for other UK or regional job boards (CharityJob, Goodmoves, TotalJobs, etc.)? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com
🔎 Explore more scrapers
If this s1jobs Scraper was useful, see other scrapers and actors at memo23's Apify profile — covering job boards, real estate, social media, and more.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by s1jobs, Newsquest Media Group, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available vacancy pages, the public /api/job/{id} JSON endpoint, and public company-profile pages on s1jobs.com — no authenticated endpoints, recruiter-only features, or content behind a s1jobs login. Users are responsible for ensuring their use complies with s1jobs.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.
SEO Keywords
s1jobs scraper, scrape s1jobs, s1jobs api, s1jobs.com scraper, Apify s1jobs, scottish jobs scraper, scotland jobs api, scotland recruitment data, scottish vacancies scraper, glasgow jobs scraper, edinburgh jobs scraper, aberdeen jobs scraper, scottish salary benchmark, scotland labour market data, scottish hiring trends, scotland job board scraper, newsquest jobs scraper, charityjob alternative scraper, goodmoves alternative scraper, totaljobs alternative scraper, scottish job listings api