Methodology

As of 2026-07-23, SwissAIJob tracks 405 active AI and machine learning roles across 107 Swiss employers. This page documents how that dataset is built and kept current.

Where the data comes from

Every listing is scraped from a public employer-owned source: a company's own careers page, a university or research-institute job portal, or the applicant-tracking system (Ashby, Greenhouse, Lever, Workable, SmartRecruiters, Personio, SuccessFactors, and others) that employer uses. Each employer has its own dedicated scraper. We never pull from LinkedIn, Indeed, Glassdoor, jobs.ch, or any third-party aggregator, so every URL points to the employer's source of truth, not a re-post.

How often it updates

Scrapers run on a roughly 3-day cycle, adding new roles, re-confirming existing ones, and flagging those that have come down. A separate daily job pings every active listing to catch roles that closed between scrapes. Each posting carries a dateModified timestamp that is refreshed every time the scraper re-confirms it is still live, so freshness is verifiable rather than assumed.

What counts as an AI role

Each scraped listing is scored against a curated list of 60+ AI and machine learning keywords, then passed through a title gate. Industry roles need an AI or ML term in the title, or several keyword hits in the description, to qualify. University and research-institute roles use a more lenient gate, since an academic posting often describes AI-heavy work under a generic title. Coverage spans three sectors: universities and Hochschulen (Academia), research-first institutions like Idiap, CSEM, Empa and PSI (Research Institutes), and for-profit companies (Industry), including non-tech employers such as banks, insurers, and pharma that hire for AI.

How salaries are estimated

Most Swiss employers don't publish salaries, so the range shown on each listing is estimated, not employer-quoted. A large language model reads the role, company, seniority, sector, and description, anchors against explicit Swiss market benchmarks (FAANG vs. mid-size tech vs. consulting vs. startup vs. academia), rounds the lower bound to the nearest CHF 5,000, and adds CHF 20,000 for the upper bound. If the listing itself states a salary or a doctoral pay scale, that figure is used instead. Treat every estimate as a rough signal, not a commitment. The salaries page aggregates these estimates by role, sector, and city.

How closed roles are removed

A listing is deactivated by whichever signal fires first: it disappears from an authoritative source's complete job list; an HTTP check confirms the URL returns 404/410 or redirects away; a daily content scan detects a "no longer accepting applications" banner; or, as a safety net, the role goes unseen by its scraper for 6 days. The goal is that a role you click is a role you can still apply to. For 24 hours after a role closes it stays visible with a "Recently taken down" marker, then drops out entirely.

Limitations

Salary figures are model estimates and can be wrong. Coverage depends on an employer having a scrapable public careers page; a company hiring only through a closed portal or a channel we don't yet cover won't appear until a scraper is added. Locations are normalized to a Swiss city, so a genuinely remote role is shown under its posting city. This is a single-developer, largely agent-run project; scrapers are added and repaired continuously, so coverage expands over time rather than being complete on any given day.

Contact

contact@swissaijob.ch