# S1 Jobs Scraper: Scotland Vacancies, Salaries, and Coordinates (`getascraper/s1jobs-scraper`) Actor

Scrape every live vacancy on s1jobs.com, Scotland's leading job board. Extract titles, employer names and logos, parsed salary bands, geo-coordinates, and posting dates with no residential proxy cost. Export to HubSpot, Salesforce, or Airtable as ready-made B2B leads. $1.99 per 1,000 jobs.

- **URL**: https://apify.com/getascraper/s1jobs-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 💼 S1 Jobs Scraper: Scotland Vacancies, Salaries, and Coordinates

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;margin-bottom:0">
<tr>
<td colspan="3" style="padding:14px 18px;background:#E6F0F9;border:none;border-top:3px solid #0065BD;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:16px;font-weight:700;color:#1C1917">Turn every live S1 Jobs vacancy into structured Scotland-wide hiring data.</span> <span style="font-size:15px;color:#57534E">Get job ID, employer, parsed salary bands, and geo-coordinates from Scotland's leading job board, extracted straight from embedded JSON-LD schema with no proxy required.</span>
</td>
</tr>
<tr>
<td colspan="3" style="padding:10px 14px;background:#0065BD;border:none;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;color:#FFFFFF">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">SCOTLAND AND UK JOBS COVERAGE</span>
<span style="color:#FFFFFF;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;S1Jobs, HiJobs, and CWJobs across Scotland and the wider UK</span>
</td>
</tr>
<tr>
<td style="padding:10px 12px;border:none;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:33.333%;background:#E6F0F9;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-EF26XxJqZsBhZ8PkH-BskemufoLQ-CompressJPEG.Online_img%28512x512%29_%2811%29.jpg" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/s1jobs-scraper" style="color:#0065BD;text-decoration:none;font-weight:700;font-size:13px">S1 Jobs</a></span><br>
<span style="color:#0065BD;font-size:11px;font-weight:700">&#10148; You are here</span>
</td>
<td style="padding:10px 12px;border:none;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:33.333%;background:#FFFFFF;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-Juy4kbEgoDewQgQld-T6qX1Mm98x-CompressJPEG.Online_img%28512x512%29_%281%29.jpg" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/hijobs-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">HIJOBS</a></span><br>
<span style="color:#57534E;font-size:11px">Highlands and Islands jobs</span>
</td>
<td style="padding:10px 12px;border:none;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:33.333%;background:#FFFFFF;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-QQaXRS5KPnacaCXM2-2V1RenHjT8-CompressJPEG.Online_img%28512x512%29_%286%29.jpg" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/cwjobs-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">CWJobs</a></span><br>
<span style="color:#57534E;font-size:11px">UK tech jobs and salaries</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#E6F0F9;border:1px solid #E6F0F9;border-top:none;color:#1C1917">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every live S1 Jobs vacancy, structured in one run</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull job ID, employer, parsed salary bands, and geo-coordinates from Scotland's leading job board, decoded straight from the embedded <span style="font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:0.9em;background:#FFFFFF;color:#1C1917;border:1px solid #D6D3D1;padding:1px 6px;border-radius:4px;white-space:nowrap">JobPosting</span> JSON-LD schema.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E6F0F9;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#0065BD">💰 Salary bands</span><br>
<span style="font-size:12px;color:#57534E">Min, max, currency, and period parsed from JSON-LD for market-rate research</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E6F0F9;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#0065BD">🏢 Employer and logo</span><br>
<span style="font-size:12px;color:#57534E">B2B lead rows ready to drop into HubSpot, Salesforce, or Airtable</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E6F0F9;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#0065BD">📍 Geo-coordinates</span><br>
<span style="font-size:12px;color:#57534E">Latitude and longitude on every job for maps and heatmaps</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E6F0F9;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#0065BD">⚡ Zero proxy spend</span><br>
<span style="font-size:12px;color:#57534E">Standard connections get through every time, no residential proxy bill cutting into your margin</span>
</td>
</tr>
</table>

**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](https://www.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 none of the usual guesswork from parsing page layouts.

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 reads the job board's own listing data instead of rendering pages in a browser, so it runs fast and needs no proxy to get through. Standard connections succeed every time, which means no residential proxy bill eating into your margin.

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 Scotland's biggest job board. Catch roles the major UK-wide scrapers skip entirely.
- **B2B leads with logos.** Every job row ships the employer name and logo URL, ready to drop straight into HubSpot, Salesforce, or Airtable as a sales lead.
- **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 proxy bill.** S1 Jobs has no anti-bot defenses to get past, so standard connections work every time. You skip the residential proxy cost that other S1 Jobs scrapers carry.

### 🚀 How to use S1 Jobs Scraper

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#E6F0F9;border:1px solid #E6F0F9;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#0065BD;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Open the Input tab</span><br>
<span style="font-size:12px;color:#57534E">Type keywords (e.g. <span style="font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:0.9em;background:#FFFFFF;color:#1C1917;border:1px solid #D6D3D1;padding:1px 6px;border-radius:4px;white-space:nowrap">electrician, driver</span>) and locations (e.g. <span style="font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:0.9em;background:#FFFFFF;color:#1C1917;border:1px solid #D6D3D1;padding:1px 6px;border-radius:4px;white-space:nowrap">glasgow, edinburgh</span>), or paste listing or detail URLs into Start URLs.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E6F0F9;border:1px solid #E6F0F9;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#0065BD;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Click Run</span><br>
<span style="font-size:12px;color:#57534E">The Actor queues listing pages, walks pagination, and fetches every detail page.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E6F0F9;border:1px solid #E6F0F9;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#0065BD;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Download the dataset</span><br>
<span style="font-size:12px;color:#57534E">Export as JSON, CSV, Excel, or via the API. Choose from four pre-built views.</span>
</td>
</tr>
</table>

### ⚙️ 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

```json
{
    "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

```json
{
    "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.

### ⭐ Enjoying S1 Jobs Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#E6F0F9;border:1px solid #E6F0F9;border-left:5px solid #0065BD;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Skip hours of manual searching and get every live Scottish vacancy with salary and geo data in one run.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other recruiters and salary researchers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0065BD;border:1px solid #0065BD;border-left:5px solid #0065BD;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/s1jobs-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ 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](https://console.apify.com/actors/~console/runs). 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.

### 🔗 Other actors

- [CWJobs Scraper](https://apify.com/getascraper/cwjobs-scraper) ↗ - extracts UK tech job listings, salaries, and geo data from CWJobs.
- [WTTJ Jobs Scraper](https://apify.com/getascraper/welcome-to-the-jungle-jobs-scraper) ↗ - pulls European job listings from Welcome to the Jungle as raw JSON or RAG-ready chunks.
- [HigherEdJobs Scraper](https://apify.com/getascraper/higheredjobs-com-scraper) ↗ - collects academic and university job listings from HigherEdJobs.
- [Goodmoves Jobs Scraper](https://apify.com/getascraper/goodmoves-jobs-scraper) ↗ - extracts Scottish charity and voluntary sector vacancies from Goodmoves.

# Actor input Schema

## `startUrls` (type: `array`):

Optional. Paste S1 Jobs listing URLs (e.g. https://www.s1jobs.com/jobs/electrician/in-glasgow/). If provided, takes precedence over search filters.

## `keywords` (type: `array`):

Job titles, sectors, or categories (e.g. electrician, nurse, accountant).

## `locations` (type: `array`):

Scottish cities or regions (e.g. glasgow, edinburgh, aberdeen). Leave empty for all Scotland.

## `includeDescription` (type: `boolean`):

If true (default), emit the full HTML job description.

## `dateWithinDays` (type: `integer`):

Only emit jobs whose posting date is within the last N days. 0 = no filter.

## `maxItems` (type: `integer`):

Maximum job rows to emit per search URL. Default 100.

## `maxConcurrency` (type: `integer`):

Parallel HTTP requests for detail-page fetches.

## `maxRequestRetries` (type: `integer`):

Per-URL retry budget on transient errors.

## `proxyConfiguration` (type: `object`):

Connection proxies to prevent website blocks.

## Actor input object example

```json
{
  "startUrls": [],
  "keywords": [
    "electrician"
  ],
  "locations": [
    "glasgow"
  ],
  "includeDescription": true,
  "dateWithinDays": 0,
  "maxItems": 100,
  "maxConcurrency": 8,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [],
    "keywords": [
        "electrician"
    ],
    "locations": [
        "glasgow"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/s1jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [],
    "keywords": ["electrician"],
    "locations": ["glasgow"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/s1jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [],
  "keywords": [
    "electrician"
  ],
  "locations": [
    "glasgow"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call getascraper/s1jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/s1jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/EF26XxJqZsBhZ8PkH/builds/MfdaqbavjbTiDXwyo/openapi.json
