Ostjob.ch Scraper - Eastern Switzerland Job Board avatar
Ostjob.ch Scraper - Eastern Switzerland Job Board

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Ostjob.ch Scraper - Eastern Switzerland Job Board

Ostjob.ch Scraper - Eastern Switzerland Job Board

Scrapes job listings from Ostjob.ch, the leading job portal for Eastern Switzerland (St. Gallen, Thurgau, Appenzell, Graubünden). Filter by canton, workload, and company type. Includes optional LLM-powered contact extraction.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Alessandro Santamaria

Alessandro Santamaria

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Ostjob.ch Job Scraper

Scrapes job listings from ostjob.ch, the leading job portal for Eastern Switzerland (Ostschweiz).

Three Scraping Modes

This actor supports three distinct scraping modes for different use cases:

1. SEARCH MODE (Default)

Search for jobs using query/location filters. Returns job listings matching your search criteria.

Use case: Regular job scraping, finding new opportunities

Example input:

{
"searchQuery": "Informatiker",
"location": "St. Gallen",
"maxResults": 200
}

2. DIRECT URL MODE

Check if specific job URLs are still online (still alive checks). Fetches jobs by their URLs directly from the API.

Use case: Monitoring if previously scraped jobs are still available, updating job status in your database

Example input:

{
"directUrls": [
"https://www.ostjob.ch/job/software-entwickler/12345",
"https://www.ostjob.ch/job/projekt-manager/67890",
"https://www.ostjob.ch/job/verkaufsberater/54321"
]
}

Output: Each job will have a job_status field:

  • "online" - Job is still available, full data extracted
  • "offline" - Job not found (404) or removed

3. SEARCH+DETAILS MODE

Search for jobs AND fetch full details. Same as SEARCH MODE but with includeJobDetails: true.

Use case: Get comprehensive job data including full descriptions

Example input:

{
"searchQuery": "Pflege",
"location": "Thurgau",
"maxResults": 100,
"includeJobDetails": true
}

Features

  • API-based scraping - Uses the official Ostjob API for fast, reliable data extraction
  • Smart location filtering - Enter any canton, district, or city name - auto-resolves via API
  • Sort by date - Get newest jobs first for job monitoring use cases
  • Workload filter - Filter by Pensum percentage (e.g., 40-60% for part-time)
  • Regional focus - Specializes in jobs from St. Gallen, Thurgau, Appenzell, Graubünden, and surrounding areas
  • Comprehensive job data - Extracts title, company, location, workload, contact details, and more
  • Company enrichment - Includes company description, social media URLs, and benefits when available
  • LLM-powered contact extraction - Optional AI-powered extraction of contact person details (salutation, first name, last name) using Groq or OpenRouter
  • HR company filtering - Filter out recruitment agencies to get direct employer postings, or filter to only show HR agencies
  • Still alive checks - Verify if specific job URLs are still active
  • Standardized output - Returns data in the JobListing schema format
  • Rate-limited - Respectful 4-second delays between API requests
  • Proxy support - Built-in proxy rotation for reliability

Input

FieldTypeDescriptionDefault
directUrlsarrayList of job URLs to scrape directly (for still alive checks)[]
searchQuerystringJob title, skills, or keywords to search for"" (all jobs)
locationstringCanton, district, or city name (e.g., "St. Gallen", "Thurgau", "Zürich 8001"). Auto-resolves location type via API."" (all Eastern Switzerland)
maxResultsintegerMaximum number of job listings to scrape500
sortOrderstringSort order: by_relevance (best match) or by_date (newest first)by_relevance
workloadMinintegerMinimum workload/Pensum percentage (0-100)-
workloadMaxintegerMaximum workload/Pensum percentage (0-100)-
includeJobDetailsbooleanFetch full job descriptionstrue
companyFilterstringFilter by company type: all, exclude-hr, only-hrall
llmApiKeystringAPI key for LLM contact extraction (optional, secret)-
llmModelstringLLM model for contact extractionnone
proxyConfigurationobjectApify proxy settingsResidential

Sort Order

Control how job results are sorted:

OptionDescription
by_relevanceBest matches to your search query first (default)
by_dateNewest jobs first - recommended for job monitoring

Use by_date when you want to monitor for new job postings or get the latest opportunities.

Workload Filter (Pensum)

Filter jobs by workload percentage (Pensum in Swiss German):

ExampleDescription
workloadMin: 80Jobs with at least 80% workload
workloadMax: 60Part-time jobs up to 60%
workloadMin: 40, workloadMax: 60Part-time jobs between 40-60%

This is useful for finding part-time positions or full-time only jobs.

HR Company Filtering

Filter jobs by company type to focus on direct employer postings or recruitment agencies:

OptionDescription
allInclude all companies (default)
exclude-hrRemove HR/recruitment agencies (e.g., HP Job, Universal-Job, Adecco)
only-hrShow only HR/recruitment agency postings

The filter detects HR companies by matching company names against common patterns like "Personal", "Recruiting", "Staffing", "Job", "Vermittlung", "Zeitarbeit", etc.

Use cases:

  • Job seekers often prefer direct employer postings for more detailed job information
  • Recruiters may want to analyze competitor agency postings

LLM Contact Extraction (Optional)

The scraper can optionally use an LLM to extract structured contact person details from the raw HTML contact block. This is useful because many job postings embed the contact person's name in unstructured HTML.

Supported LLM Providers:

  • Groq - Use API keys starting with gsk_ (recommended: fast and free tier available)
  • OpenRouter - Use API keys starting with sk-or-

Available Models:

Model IDProviderDescription
llama-3.1-8b-instantGroqFast, lightweight (default)
mistral-small-3.1-24b-instructOpenRouterMore capable, higher quality

The LLM extracts:

  • contact_salutation - "Herr" or "Frau" (only if gender is clearly indicated)
  • contact_firstname - First name of contact person
  • contact_lastname - Last name of contact person

Example Inputs

{
"searchQuery": "Informatiker",
"location": "St. Gallen",
"maxResults": 200
}

SEARCH MODE - Job Monitoring (Newest First)

{
"searchQuery": "",
"location": "Thurgau",
"maxResults": 100,
"sortOrder": "by_date"
}

SEARCH MODE - Part-Time Jobs (40-60%)

{
"searchQuery": "Buchhaltung",
"location": "St. Gallen",
"workloadMin": 40,
"workloadMax": 60,
"maxResults": 50
}

SEARCH MODE - Exclude HR Agencies

{
"searchQuery": "Elektriker",
"location": "St. Gallen",
"maxResults": 100,
"companyFilter": "exclude-hr"
}

SEARCH MODE - With LLM Extraction

{
"searchQuery": "Elektriker",
"location": "St. Gallen",
"maxResults": 100,
"llmApiKey": "gsk_your_groq_api_key_here",
"llmModel": "llama-3.1-8b-instant"
}

DIRECT URL MODE - Still Alive Checks

{
"directUrls": [
"https://www.ostjob.ch/job/software-entwickler/12345",
"https://www.ostjob.ch/job/projekt-manager/67890",
"https://www.ostjob.ch/job/verkaufsberater/54321",
"https://www.ostjob.ch/job/pflegefachfrau/11111"
]
}

Output

Each job listing follows the standardized JobListing schema:

{
"id": "12345",
"title": "Software Entwickler (m/w/d)",
"company": "Tech Solutions AG",
"location": "St. Gallen, 9000, SG",
"canton": "SG",
"job_status": "online",
"employment_type": "full-time",
"workload_min": 80,
"workload_max": 100,
"remote_option": null,
"description_snippet": "Wir suchen einen erfahrenen Entwickler...",
"description_full": "Tätigkeit: ...\n\nAnforderungen: ...\n\nWir bieten: ...",
"requirements": ["3+ Jahre Erfahrung in Java"],
"posted_at": "2024-01-15T00:00:00.000Z",
"expires_at": "2024-02-28T00:00:00.000Z",
"source_url": "https://www.ostjob.ch/job/software-entwickler/12345",
"source_platform": "ostjob.ch",
"contact_salutation": "Herr",
"contact_firstname": "Thomas",
"contact_lastname": "Müller",
"contact_email": "jobs@techsolutions.ch",
"contact_phone": "+41712345678",
"contact_raw": "<strong>Kontakt:</strong><br/>Herr Thomas Müller<br/>E-Mail: jobs@techsolutions.ch<br/>Tel: +41 71 234 56 78",
"apply_url": "https://careers.techsolutions.ch/apply",
"apply_email": "jobs@techsolutions.ch",
"company_url": "https://www.techsolutions.ch",
"company_description": "Tech Solutions AG ist ein führender IT-Dienstleister...",
"company_social_urls": {
"linkedin": "https://linkedin.com/company/techsolutions",
"xing": "https://xing.com/companies/techsolutions"
},
"company_benefits": ["Flexible Arbeitszeiten", "Home Office", "Weiterbildung"],
"scraped_at": "2024-01-16T12:00:00.000Z"
}

Output Fields

FieldDescription
job_statusJob availability status: "online" (still available), "offline" (removed/404). Only set in DIRECT URL mode.
contact_rawRaw HTML/text contact block from the job posting (always populated)
contact_salutation"Herr" or "Frau" - extracted by LLM if API key provided
contact_firstnameFirst name - extracted by LLM if API key provided
contact_lastnameLast name - extracted by LLM if API key provided
contact_emailEmail address - extracted via regex (no LLM needed)
contact_phonePhone number - extracted via regex (no LLM needed)
company_descriptionCompany about/description text (HTML stripped)
company_social_urlsObject with social media links (linkedin, xing, facebook, etc.)
company_benefitsArray of company benefits/perks (e.g., "Flexible Arbeitszeiten")

Job Status Values (DIRECT URL Mode)

When using directUrls, each job will have a job_status field:

ValueDescription
"online"Job is still available on ostjob.ch, full data extracted
"offline"Job not found (404) or removed, minimal data returned

Usage

Via Apify Console

  1. Go to the actor page
  2. Configure input parameters
  3. Click "Start"
  4. Download results from the Dataset tab (JSON, CSV, Excel)

Via API

curl -X POST "https://api.apify.com/v2/acts/santamaria~ostjob-ch-scraper/runs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQuery": "Pflege",
"location": "Thurgau",
"maxResults": 100
}'

Via Apify SDK (Node.js)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('santamaria/ostjob-ch-scraper').call({
searchQuery: 'Buchhaltung',
location: 'St. Gallen',
maxResults: 150,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} jobs`);

Still Alive Checks via API

// Check if previously scraped jobs are still online
const run = await client.actor('santamaria/ostjob-ch-scraper').call({
directUrls: [
'https://www.ostjob.ch/job/software-entwickler/12345',
'https://www.ostjob.ch/job/projekt-manager/67890',
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(job => {
console.log(`Job ${job.id}: ${job.job_status}`);
// Output: "Job 12345: online" or "Job 67890: offline"
});

Covered Regions

Ostjob.ch specializes in jobs from Eastern Switzerland:

CantonMajor Cities
SGSt. Gallen, Rapperswil, Wil
TGFrauenfeld, Kreuzlingen, Arbon
ARHerisau, Teufen
AIAppenzell
GRChur, Davos, St. Moritz
GLGlarus

Performance

  • Speed: ~100-200 jobs/minute (limited by respectful rate limiting)
  • Cost: ~0.01-0.03 CU per 500 jobs
  • Reliability: Built-in retry logic and error handling
  • Direct URL mode: ~1-2 seconds per URL check (4-second rate limit between requests)

Data Source

This actor scrapes data from the leading Eastern Switzerland job portal:

  • Website: ostjob.ch
  • API: Public vacancy search API (https://api.ostjob.ch/public/vacancy/)
  • Coverage: Eastern Switzerland (Ostschweiz)

This actor accesses publicly available job listings through the API. Please ensure your use case complies with the ostjob.ch terms of service.


Part of the Santamaria Job Scrapers Suite - Professional-grade job data for the DACH region and beyond.

Need help with integration, aggregation, or custom scraping solutions? Contact us at contact@alessandrosantamaria.com