s1jobs.com scraper avatar

s1jobs.com scraper

Pricing

from $2.90 / 1,000 results

Go to Apify Store
s1jobs.com scraper

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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

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

How s1jobs Scraper 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

TeamWhat they build
Recruitment / agenciesDaily new-vacancy feeds across Scotland, sliced by sector or region
Compensation & benefitsSalary benchmarks by sector, region, and contract type for Scotland
Talent acquisitionCompetitive intelligence on what other Scottish employers are paying
Researchers / journalistsScottish labour-market datasets across all sectors
Workforce strategySkills-demand mapping using the structured skills[] and coreSkills[] arrays
ATS aggregatorsReal 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 patternBehaviour
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

  1. Classify each startUrl as a listing URL or a single vacancy URL.
  2. Walk listing pagination (?page=2, ?page=3, …) until <a rel="next"> disappears or maxItems is reached.
  3. Fetch each vacancy via /api/job/{id} JSON — all the structured data in one call.
  4. Optionally fetch the vacancy's HTML page once to extract lat/lng coordinates (only field not in the API).
  5. Optionally fetch each unique company profile page once for the company website + a fuller description.
  6. Push one merged row per vacancy to the dataset and export data.csv + data.json at the end.

⚙️ Input parameters

ParameterTypeDefaultDescription
startUrlsarray["https://www.s1jobs.com/jobs/glasgow/"]s1jobs listing URLs and/or vacancy URLs. Mix both freely.
enrichOrganisationbooleantrueFetch 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.
includeCoordinatesbooleantrueFetch each vacancy's HTML page once to extract lat/lng. Disable to save one HTTP call per vacancy when coordinates aren't needed.
maxItemsinteger1000Hard cap on jobs collected. s1jobs has thousands of jobs across Scotland; this cap limits billing.
maxConcurrency / minConcurrencyinteger10 / 1Parallel HTTP request limits.
maxRequestRetriesinteger5Retries before a request is given up.
proxyobjectApify residential, GBUK 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

GroupFields
Identifierstype, jobId (numeric), vacancyUuid (s1's internal UUID), jobReference (employer's own ref), jobUrl, scrapedAt
Roletitle, description (HTML), coreSkills[], primaryCoreSkill, specialisms[], skills[], jobSkills (full structured object), accreditations[], publicSectorType
DatespostedDate, closingDate
EmployercompanyName, companyId (numeric), companyUrn (S1's internal employer reference), companyType, companyConfidential, companyProfileUrl, logoUrl, companyImages[], companyAccreditations[]
Locationlocation (display string), addressLocality, postcode, coordinates.{latitude,longitude} (when includeCoordinates: true)
Compensationsalary.{currency,min,max,rate,raw}, contractType, hours, workingHourPattern
Apply flowapplyType (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 flagsrequiresCv, 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

🛠 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