ge.ch Emploi Scraper: Geneva Canton Public Sector Jobs
Pricing
from $1.00 / 1,000 actor starts
ge.ch Emploi Scraper: Geneva Canton Public Sector Jobs
Scrape Geneva canton public-sector jobs from ge.ch. Returns title, department, service, salary class, workload, CDI/CDD, publication date, deadline, apply link, reference number and full description (text, HTML, Markdown). No login, no proxy.
Pricing
from $1.00 / 1,000 actor starts
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Geneva Canton Jobs Scraper (ge.ch): Public Sector Job Offers
Extract every open job offer from ge.ch, the official employment portal of the Republic and Canton of Geneva (Etat de Genève). Each row gives you the French job title, the hiring department and service, the official salary class, the workload (taux d'activité), the contract type (CDI or CDD), the publication date, the application deadline, the apply link, the SIRH reference number and the full description as text, HTML and Markdown.
No login, no captcha and no proxy needed. The actor reads the public portal over plain HTTP, so runs are fast and cheap.
What it does
- Reads the ge.ch offer list and each job page, and returns clean, structured rows.
- Matches your French keywords against the title, service, department and each offer's own mission and profile text, ignoring case and accents, because ge.ch has no keyword search of its own. Title and service matches are listed first. Generic lines such as "maitrise des outils informatiques" are ignored, so "informatique" returns IT jobs, not every job that wants Excel skills.
- Orders results by publication date, newest first, so a cap always keeps the latest offers. ge.ch has no sort control, so this is done by the actor on the full list (about 50 to 80 offers, all on one page).
- Filters by contract type, department, minimum salary class, activity domain and workload using the portal's own list filters, and by publication date (
postedWithinDays) in the actor. - Accepts ge.ch listing URLs and single job URLs, for example to check that a posting is still live.
Pricing
$0.001 per run start, $0.003 per job returned (about $3 per 1,000), plus $0.005 per job enriched with full details (about $8 per 1,000 jobs with details).
A job whose page could not be read is billed the $0.003 job price only. Rows that fail to save are never billed.
New to Apify? Every account gets a free monthly platform credit, enough to read the whole Geneva portal many times over.
Input
| Field | Type | Description |
|---|---|---|
searchQueries | string[] | French keywords, one query each (informatique, enseignant, assistant). Empty returns all open offers. |
maxResultsPerQuery | integer | Cap per keyword or search URL. If empty it equals maxResults when that is set, otherwise 25. |
maxResults | integer | Total cap. Leave empty to use maxResultsPerQuery times the number of queries. |
sortBy | enum | newest (default), oldest, or site for the portal's own order. Newest and oldest are sorted by the actor from each job's publication date, not by ge.ch. |
includeJobDetails | boolean | Default true. Adds the full description, profile, benefits, workplace, apply link and reference number. |
contractType | enum | any, CDI, CDD or apprentissage. Applied by ge.ch (type_contrat). |
department | enum | Only offers from one department, for example finances or instruction. Applied by ge.ch (departement). |
minFunctionClass | integer | Only offers at or above this salary class, 4 to 33. Applied by ge.ch (classe_fonction_min). |
activityDomain | enum | Domain of activity, 00 Management to 22 Public policy, for example 19 for information systems. Applied by ge.ch (domaine_activite). |
maxWorkPercentage | enum | Offers whose workload starts at or below this percentage (10 to 100), for example 50 for part-time roles. Applied by ge.ch (taux_activite_max). |
postedWithinDays | integer | Only offers published in the last N days. Applied by the actor on the publication date of each job page. |
searchUrls | string[] | ge.ch listing URLs. Each counts as one query. |
directUrls | string[] | Single ge.ch job page URLs. Always read as full detail pages. |
maxConcurrency | integer | Job pages fetched in parallel, 1 to 10. Default 5. |
Everything has a default, so an empty input {} returns the 25 newest offers with full details. With only maxResults set (for example 200) you get up to that many offers, about 50 to 80 at most today.
Example input:
{"searchQueries": ["informatique", "assistant"],"maxResultsPerQuery": 20,"sortBy": "newest","includeJobDetails": true}
Output fields
- Identity:
id,title,job_url,source_url,source_platform,reference_numberandreference_id(SIRH number from the apply link) - Employer:
company_name(the department),hiring_organization(Etat de Genève),department,department_url,service - Place:
location,workplace,city,canton(GE),country(CH) - Dates:
posted_at_datetime,posted_at,posted_at_text,updated_at,updated_at_text,application_deadline,application_deadline_text,valid_through,job_start_date,start_date_text - Terms:
contract_type(CDI, CDD, apprentissage),contract_type_note,remote_option,employment_type(full-time, part-time, apprenticeship),work_percentage_text,work_percentage_min,work_percentage_max - Salary:
salary_class,salary_class_number,salary_scale_url - Description:
description(first 500 characters),description_snippet(300 characters or fewer, cut at a word boundary with an ellipsis),description_full,description_html,description_md,experience_requirements(profile),job_benefits,observations - Apply:
apply_url,apply_platform,apply_instructions - Contact:
contact_name,contact_title,contact_email,contact_phone,contact_emails,contact_phones,contact_urls - Run info:
search_query,scraped_at
Contact data is sparse on ge.ch. contact_name and contact_title are read from the Postuler block or from an Observations line such as "a l'attention de Madame ...". In a full crawl of the portal only about 1 offer in 50 names a person, and no offer showed an email address or phone number. Email and phone fields are still extracted whenever they appear in the offer text, but expect them to be empty. Most offers apply through the SIRH or devenez.ge.ch link in apply_url.
updated_at and updated_at_text are always null. ge.ch prints the current date as "Mise a jour" on every page, which is not a per-job edit date, so the actor does not report it. Use posted_at_datetime for freshness.
remote_option is hybrid when the offer text mentions teleworking and null otherwise. ge.ch has no remote field.
Contract type: ge.ch sometimes shows CDI in the header data and a fixed term such as "CDD jusqu'au 30 juin 2027" in the page body. The actor prefers the body value: contract_type is the bare type (CDD) and contract_type_note keeps the full wording. With includeJobDetails off, contract_type is filled from your contractType filter when the job page is not read.
search_query is the keyword that matched, the listing URL for searchUrls, directUrls for single job URLs, and null for a keyword-less browse.
Fields marked detail mode in the dataset schema are empty when includeJobDetails is off.
Sample output
{"id": "1161","reference_number": "114652","title": "Ingénieure ou ingénieur ITI SAED ECM","job_url": "https://www.ge.ch/offres-emploi-etat-geneve/liste-offres/1161","company_name": "Département des institutions et du numérique","service": "Office cantonal des systèmes d'information et du numérique","location": "Rue du Grand-Pré 64-66","posted_at_datetime": "2026-09-24T00:00:00Z","posted_at_text": "24 septembre 2026","application_deadline": "2026-10-17T00:00:00Z","contract_type": "CDI","employment_type": "full-time","work_percentage_text": "100%","salary_class": "classe 19","apply_url": "https://ge.ch/sirhrecrutement/recrutement/candidatAction.do?NOREFPOSTE=114652","apply_platform": "ge.ch-sirh"}
Tips
- The portal lists about 50 to 80 offers depending on the season. To get everything, run with no keyword and
maxResultsset to 200. - Salary class is a Swiss public-sector grid, from classe 4 to classe 33. Every row links the official scale.
- Some offers, such as police recruitment, apply through devenez.ge.ch. Those rows have no
apply_url, andapply_instructionsexplains how to apply. - "Dès que possible" and "A convenir" start dates stay as text in
start_date_text.job_start_dateis set only when the page gives a real date. - Keyword matching also looks at the mission and profile text, ranked after title and service hits. Use a more specific term, or
activityDomain, if you want tighter matches. Single job URLs that no longer exist are skipped with a warning. - Even with
includeJobDetailsoff, the actor reads job pages to order by date and to match keywords. You are billed only for what the run returns.
Use with AI Agents (MCP)
Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.
Configure the MCP server with this actor preconfigured at mcp.apify.com?tools=santamaria-automations/ge-ch-emploi-scraper.
{"mcpServers": {"apify": {"command": "npx","args": ["mcp-remote","https://mcp.apify.com/?tools=santamaria-automations/ge-ch-emploi-scraper","--header","Authorization: Bearer <YOUR_API_TOKEN>"]}}}
For per-tool schemas and copy-paste snippets for MCP clients, see the MCP tab.
See the auto-generated API tab for language-specific examples (cURL, JS, Python, .NET, Ruby, PHP).
Related actors
Cross-site job extraction
- Website Job Extractor: pull jobs from any career page
- Indeed HTTP Scraper: Indeed listings worldwide, including Switzerland
- Glassdoor Scraper: jobs plus company ratings and reviews
Swiss job boards
- Jobs.ch Scraper: Switzerland's largest job board
- Jobup.ch Scraper: Romandie, the French-speaking part of Switzerland
- Arbeit.swiss Scraper: the federal job-room platform
Support
- Questions or issues? Email contact@nanoscrape.com, we typically reply within 6 hours. You can also open a ticket in the Issues tab on the actor page.
- Feature request for this actor? Open a ticket in the Issues tab or email contact@nanoscrape.com with the field you need and, if possible, a ge.ch URL that shows it live.
- Need a scraper for a job board we don't cover yet? Email contact@nanoscrape.com with the target site and your rough usage volume. We ship one-off boards regularly.