The NanoScrape Schaffu Scraper is an Apify actor that extracts job listings from schaffu.ch. It returns 32 fields per result including title, company, location, salary_min, salary_max, priced at $3/1k result, with no API key or monthly subscription required.
Schaffu.ch (Regional, Switzerland): Schaffhausen region job portal (source platform). Workload filter, company type, and optional LLM contact extraction. Niche Swiss regional coverage.
| Field | Type | Example | Group | Fill % |
|---|---|---|---|---|
id | string | 101047 | Core | 100% |
title | string | Leiter/in Personalwesen | Core | 100% |
source_url | string | https://www.schaffu.ch/job/leiter-in-personalwesen/101047 | Core | 100% |
source_platform | string | schaffu.ch | Core | 100% |
apply_url | string | null | (populated when data available) | Core | — |
company_url | string | null | (populated when data available) | Core | — |
company | string | null | Garage Saurer SA | Company | 100% |
location | string | Conthey, VS | Location | 100% |
description_snippet | string | null | Ihre Hauptaufgaben Sicherstellung der Personaladministration vom Eintritt bis zum Austr... | Description | 100% |
description_full | string | null | Ihre Hauptaufgaben Sicherstellung der Personaladministration vom Eintritt bis zum Austr... | Description | 100% |
salary_min | number | null | (populated when data available) | Salary | — |
salary_max | number | null | (populated when data available) | Salary | — |
salary_currency | string | (populated when data available) | Salary | — |
salary_period | string | null | (populated when data available) | Salary | — |
employment_type | string | null | part-time | Employment | 100% |
remote_option | string | null | (populated when data available) | Employment | — |
requirements | array | [] | Requirements | — |
posted_at | string | null | 2026-09-07T14:40:47.949Z | Metadata | 100% |
scraped_at | string | 2026-09-15T06:09:11.883Z | Metadata | 100% |
canton | string | null | VS | Other | 100% |
job_status | string | null | (populated when data available) | Other | — |
search_query | string | null | Informatiker | Other | 100% |
workload_min | number | null | 50 | Other | 100% |
workload_max | number | null | 60 | Other | 100% |
expires_at | string | null | 2026-10-01T00:00:00.000Z | Other | 100% |
contact_salutation | string | null | (populated when data available) | Other | — |
contact_firstname | string | null | (populated when data available) | Other | — |
contact_lastname | string | null | (populated when data available) | Other | — |
contact_email | string | null | (populated when data available) | Other | 100% |
contact_phone | string | null | (populated when data available) | Other | — |
contact_raw | string | null | (populated when data available) | Other | 100% |
apply_email | string | null | (populated when data available) | Other | 100% |
{
"includeJobDetails": true,
"maxResults": 30,
"maxResultsPerQuery": 10,
"searchQueries": [
"Informatiker",
"Pflege",
"Buchhaltung"
]
}{
"id": "101047",
"title": "Leiter/in Personalwesen",
"company": "Garage Saurer SA",
"location": "Conthey, VS",
"country": "CH",
"canton": "VS",
"employment_type": "part-time",
"workload_min": 50,
"workload_max": 60,
"remote_option": null,
"description_snippet": "Ihre Hauptaufgaben Sicherstellung der Personaladministration vom Eintritt bis zum Austritt der Mitarbeitenden Verwaltung der Absenzen sowie Betreuung und Nachverfolgung von Krankheitsfällen und Unfällen Steuerung der Rekrutierungs-, Einführungs-, Beurteilungs- und Entwicklungsprozesse der Mitarbeitenden Beratung und Unterstützung der Geschäftsleitung, der Führungskräfte sowie der Mitarbeitenden in sämtlichen Fragen des ...",
"description_full": "Ihre Hauptaufgaben Sicherstellung der Personaladministration vom Eintritt bis zum Austritt der Mitarbeitenden Verwaltung der Absenzen sowie Betreuung und Nachverfolgung von Krankheitsfällen und Unfällen Steuerung der Rekrutierungs-, Einführungs-, Beurteilungs- und Entwicklungsprozesse der Mitarbeitenden Beratung und Unterstützung der Geschäftsleitung, der Führungskräfte sowie der Mitarbeitenden in sämtlichen Fragen des ...",
"requirements": [],
"posted_at": "2026-09-07T14:40:47.949Z",
"expires_at": "2026-10-01T00:00:00.000Z",
"source_url": "https://www.schaffu.ch/job/leiter-in-personalwesen/101047",
"source_platform": "schaffu.ch",
"search_query": "Informatiker",
"contact_salutation": null,
"contact_firstname": null,
"contact_lastname": null,
"contact_email": null,
"contact_phone": null,
"contact_raw": null,
"apply_url": null,
"apply_email": null,
"company_url": null,
"company_description": null,
"company_social_urls": null,
"company_benefits": null,
"scraped_at": "2026-09-15T06:09:11.883Z"
}Priced at $0.0030 per result. 10 results ≈ $0.03, 100 ≈ $0.30, 1,000 ≈ $3.00. The first runs land inside Apify's $5/mo free-tier credit — pay only for what you extract, no monthly subscription.
Swiss HR platforms and regional recruiters covering the Schaffhausen canton use Schaffu.ch as their primary local source because it captures postings from Schaffhausen employers that national Swiss boards like Jobs.ch or Indeed do not index at the same depth. The Pensum workload filter lets you target the common 60-80% and 80-100% Swiss part-time job categories at input time, avoiding the need to filter thousands of results post-scrape. Direct employer outreach teams use companyFilter: exclude-hr to remove competing staffing agency listings and extract contact_person and contact_email for direct hiring manager outreach. Still-alive monitoring pipelines use direct URL mode to verify whether previously scraped listings remain active without re-crawling the full site.
Click Open on Apify above to run schaffu-ch-scraper in your browser - no code, no install. In the Apify console you get:
To run this actor from your own code you need an Apify API token. Get one in about a minute:
Free tier: Apify credits your account with $5 of platform usage every month, no credit card required. Enough to test any actor meaningfully - at $0.001 per result on typical scrapers, that is roughly 5,000 results for free every month.
Run this actor from any language via the Apify REST API. Replace YOUR_TOKEN with your API token and adapt the input JSON to your needs.
curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~schaffu-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('santamaria-automations/schaffu-ch-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('santamaria-automations/schaffu-ch-scraper').call(run_input={})
items = list(client.dataset(run['defaultDatasetId']).iterate_items())
print(items)// dotnet add package Apify.Client
using Apify.Client;
var client = new ApifyClient("YOUR_TOKEN");
var run = await client.Actor("santamaria-automations/schaffu-ch-scraper").CallAsync(new { });
var items = await client.Dataset(run.DefaultDatasetId).ListItemsAsync();// Maven: com.apify:apify-client
import com.apify.client.ApifyClient;
ApifyClient client = new ApifyClient("YOUR_TOKEN");
ActorRun run = client.actor("santamaria-automations/schaffu-ch-scraper").call(Map.of());
List<Map<String,Object>> items = client.dataset(run.getDefaultDatasetId()).listItems();This actor is available on the Apify MCP server, so you can drive it from any MCP-compatible AI client - Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or a custom agent - without writing any code.
https://mcp.apify.com?tools=santamaria-automations/schaffu-ch-scraperExample prompt once connected:
"Use <code>schaffu-ch-scraper</code> to run a scrape on my target list and give me the results as a table."
Clients that support dynamic tool discovery (Claude.ai, VS Code) receive the full input schema automatically via add-actor.
Trigger this actor from your favorite automation tool. Every platform below can call the Apify API in a few clicks - no code required.
@apify/n8n-nodes-apify).santamaria-automations/schaffu-ch-scraper.https://api.apify.com/v2/acts/santamaria-automations~schaffu-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.application/json.https://api.apify.com/v2/acts/santamaria-automations~schaffu-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, method POST, body raw JSON.https://api.apify.com/v2/acts/santamaria-automations~schaffu-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.steps.http.$return_value in subsequent steps.https://api.apify.com/v2/acts/santamaria-automations~schaffu-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, body type JSON.$3.00 / 1,000 result, billed per result on Apify. Apify's $5/month free tier covers the first runs. No monthly subscription — you only pay for what you extract.
32 fields per result. Full field catalog is listed in the 'What you can scrape' table above — includes core identifiers, descriptive text, dates, and any category-specific data.
Scraping publicly available data is generally permitted in most jurisdictions, but GDPR applies to any personal data you collect. Review your local rules and consult a lawyer for commercial use.
No. This actor reads public pages over HTTP with datacenter proxies. No API key, no OAuth, no rate-limit management on your side.
Every run pulls live data at execution time. Set up a schedule (daily/hourly/weekly cron) in the Apify console to keep your dataset current automatically.