
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Scrape Swiss job ads from jobscout24.ch by keyword, city, region and filters: full description, requirements, benefits, contact person and phone, workload, canton, salary and company rating. No login needed.
Scrape Swiss job ads from jobscout24.ch by keyword, city, region and filters. Each job comes with the full description, requirements, tasks and benefits, the contact person and phone, workload, canton, apply link and company rating. No login needed.
| Field | What it does |
|---|---|
searchQueries | Keywords, one search each, e.g. Software Engineer |
location | City as the site spells it, e.g. Zürich, Genf, St. Gallen |
startUrls | Job ad URLs, job IDs or result-page URLs from jobscout24.ch |
maxResults | Max jobs in the whole run (0 = no limit) |
includeJobDetails | Open each ad for the full details (default on) |
region, category, contractType, workloadMin, workloadMax, companyType, industry, positionLevel, adLanguage | The site's own filters |
postedWithinDays, maxAgeHours | Only recent jobs |
titleFilter | Keep only titles that contain one of these words |
sortBy | Newest first, best match, title, company or place of work |
{
"searchQueries": ["Software Engineer"],
"region": "zurich",
"postedWithinDays": 7,
"maxResults": 50
}
Every row is one job ad. With Include full job details on (the default) you get all of these fields; with it off you get the fields marked ⚡ (from the result list).
| Field | What it is |
|---|---|
id ⚡, job_uuid ⚡ | jobscout24.ch job ID and ad ID |
title ⚡, company ⚡, location ⚡ | Job title, employer, place of work |
postal_code, street_address, canton, country | Workplace address and canton code (e.g. ZH, BE) |
workload_min ⚡, workload_max ⚡, workload_label ⚡ | Workload in percent (e.g. 80 to 100) |
employment_type, employment_types, contract_type | full-time / part-time / temporary, and the contract (e.g. permanent position) |
position_level, job_category, industry, company_type ⚡ | Level, occupational group, employer industry, SME / large company / staffing agency |
posted_at ⚡, posted_age_label ⚡ | Posting time (exact with details, the day from the age label without) |
salary_text, salary_min, salary_max, salary_currency, salary_unit | Salary when the ad publishes one |
remote_option | remote or hybrid when the ad mentions home office or remote work |
description_full, description_md, description_html, description_snippet | The full ad as plain text, Markdown and HTML, plus the first 500 characters |
requirements, responsibilities, company_benefits | Bullet points under the profile, tasks and benefits headings |
contact_salutation, contact_firstname, contact_lastname, contact_fullname, contact_position, contact_phone, contact_email, contact_raw | Contact person from the ad's contact box or its closing lines |
emails, apply_url, apply_email, application_type | Emails in the ad, the apply link, an application email and internal / external application |
company_id, company_url, company_logo_url, company_rating, company_review_count, company_social_urls | Company profile on jobscout24.ch, logo, rating and number of ratings |
top_listing ⚡ | true for promoted ads |
video_url, header_image_url | Employer video and header image when the ad has them |
source_url ⚡, search_query ⚡, scraped_at ⚡ | Link to the ad, the keyword that found it, and when it was scraped |
Example row from a test run (lists shortened, contact person replaced with a fictional one):
{
"id": "10425671",
"title": "Technische/r Projektleiter/in 80-100%",
"company": "Spitalzentrum Biel / Centre hospitalier Bienne",
"location": "Biel/Bienne",
"postal_code": "2501",
"canton": "BE",
"country": "CH",
"job_status": "online",
"top_listing": true,
"employment_type": "full-time",
"contract_type": "permanent position",
"workload_min": 80,
"workload_max": 100,
"workload_label": "80% - 100%",
"position_level": "specialist",
"job_category": "Technical Jobs / Engineers / Architects",
"industry": "Health / Hospitals",
"company_type": "Large companies",
"ad_language": "de",
"posted_at": "2026-10-09T00:03:46+02:00",
"posted_age_label": "1 w",
"description_snippet": "Technische/r Projektleiter/in 80-100%\nDas Spitalzentrum Biel ist das öffentliche Zentrumsspital der zweisprachigen Region Biel-Seeland-Berner Jura ...",
"requirements": [
"Abgeschlossenes Studium (HF/FH/Uni/ETH) im Bereich Elektrotechnik, Automatisierungstechnik, Gebäudetechnik HLKKSE ...",
"Mehrjährige Berufserfahrung als technischer Projektleiter und beim Führen von Projektteams, idealerweise im Spitalumfeld"
],
"responsibilities": [
"Unterstützung im Bereich Haustechnik im Spital-Neubauprojekt",
"Führen von technischen Projekten am Standort Beaumont und den Aussenstandorten"
],
"company_benefits": [
"Moderne Arbeitsbedingungen, flexible Arbeitszeitmodelle und zahlreiche Benefits",
"Individuelle Weiterbildungs- und Entwicklungsmöglichkeiten"
],
"contact_firstname": "Anna",
"contact_lastname": "Muster",
"contact_fullname": "Anna Muster",
"contact_phone": "+41 32 000 00 00",
"apply_url": "https://www.jobscout24.ch/en/job/technische-projektleiter/10425671/externalapply/",
"application_type": "external",
"company_url": "https://www.jobscout24.ch/en/company/spitalzentrum-biel-centre-hospitalier-bienne/119988/",
"source_url": "https://www.jobscout24.ch/en/job/4cf69d4d-46b4-4dae-b3cc-ed52c79bedbd/",
"source_platform": "jobscout24.ch",
"search_query": "Projektleiter",
"scraped_at": "2026-10-22T10:18:56+00:00"
}
The run summary (key-value store record OUTPUT) lists how many jobs the site shows for each search, inputs that failed and job URLs that were offline.
You pay $2.00 per 1,000 jobs ($0.002 per saved job), the same price with or without full job details. Offline ads, filtered-out jobs and failed pages are never charged.
Platform usage (compute and proxy traffic) comes on top and is small: 1,000 jobs with full details used about $0.05 of platform usage in our tests, and 10,000 jobs without details about $0.03 (both measured at 256 MB with the datacenter proxy; the default 512 MB adds less than half a cent to either run).
Example: 1,000 jobs with full details ≈ $2.00 + $0.05 = about $2.05.
Is it legal to scrape jobscout24.ch? The scraper only reads public job ads that anyone can open without an account. You are responsible for how you use the data, including data-protection rules for the contact details.
Do I need a login or my own proxy? No. The default datacenter proxy works; if a page is blocked, the scraper retries it on Swiss residential proxies automatically.
How many jobs can I get? As many as the search matches: set Max jobs in total to 0 to take every result. jobscout24.ch shows at most 100 result pages (about 2,000 jobs) per search, so larger searches are split automatically by region and filters; the run summary tells you how many jobs the site lists and how many were collected.
Why is a field empty? Not every ad has every field. Contact person, phone, salary, benefits and company rating are filled only when the ad or company profile shows them.
Can I schedule it or use the API? Yes. Schedule daily runs with "Posted within 1 day", or start runs and read the results through the API.
apply_url is that jobscout24.ch link, not the employer's own form.posted_at is the date derived from the site's age label (e.g. "2 w"), so it is approximate.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchQueriesarrayOptionalSearch keywords
Job titles or keywords to search on jobscout24.ch, e.g. "Software Engineer", "Pflegefachfrau" or "comptable". Each keyword is a separate search; jobs found by several keywords are saved once. Leave empty to browse every job that matches the location and filters.
locationstringOptionalLocation (city)
Swiss city or town as jobscout24.ch spells it, e.g. Zürich, Bern, Basel, Genf, Lausanne, St. Gallen. The site includes jobs from the surrounding area. Leave empty for all of Switzerland, or use the Region filter.
startUrlsarrayOptionalJob or result-page URLs
Optional: jobscout24.ch job ads (https://www.jobscout24.ch/de/job/...), job IDs (e.g. 10449494), or result pages copied from the site with your filters applied. Job ads that went offline are skipped and not charged, which makes this a cheap still-online check.
maxResultsintegerOptionaldefault 20Max jobs in total
Stop after this many jobs in the whole run. 0 means no limit: every matching job is scraped.
maxResultsPerQueryintegerOptionalMax jobs per keyword or result page
Optional cap for each keyword or result-page URL, so one broad keyword cannot use up the whole run. 0 or empty means no per-keyword cap.
includeJobDetailsbooleanOptionaldefault trueInclude full job details
Open each job ad for the full description (text, Markdown and HTML), requirements, tasks, benefits, contact person and phone, workplace address, canton, salary when published, apply link and company rating. Turn off for a fast list of titles, companies, locations, workloads and ages only.
regionenumOptionaldefault ""Region
Only jobs in this Swiss region (the site's own region filter).
categoryenumOptionaldefault ""Job category
Only jobs in this occupational group.
contractTypeenumOptionaldefault ""Contract type
Only jobs with this type of contract.
workloadMinintegerOptionalMin workload (%)
Lower end of the workload range (the site's workload filter, steps of 10 %). Jobs whose workload range overlaps your range are returned, e.g. Min 80 for full-time roles.
workloadMaxintegerOptionalMax workload (%)
Upper end of the workload range (the site's workload filter, steps of 10 %), e.g. Max 60 for part-time roles.
postedWithinDaysintegerOptionalPosted within (days)
Only jobs posted in the last N days. 0 or empty means any age. Ideal for daily or weekly schedules together with sorting by newest.
maxAgeHoursintegerOptionalMax age (hours)
Only jobs posted in the last N hours. With full job details on, the exact posting time is checked before the job is saved and charged; without details the site only shows the age in days.
titleFilterstringOptionalJob title must contain
Comma-separated words; only jobs whose title contains at least one of them are kept (case-insensitive), e.g. "Senior, Lead". Filtered jobs are not opened and not charged.
companyTypeenumOptionaldefault ""Company type
Only jobs from this kind of employer.
industryenumOptionaldefault ""Industry
Only jobs from employers in this industry.
positionLevelenumOptionaldefault ""Position level
Only jobs at this level.
adLanguageenumOptionaldefault ""Ad language
Only job ads written in this language.
apprenticeshipsbooleanOptionaldefault falseSearch apprenticeships (Lehrstellen) instead of jobs
Search the site's apprenticeship listings (Lehrstellen / places d'apprentissage) instead of regular jobs.
sortByenumOptionaldefault "newest"Sort by
Order of the search results. Newest first is best for scheduled runs.
languageenumOptionaldefault "en"Site language
Language of the jobscout24.ch pages: it sets the language of links and of labels such as the job category. The job ad text stays in the language it was written in.
maxConcurrencyintegerOptionaldefault 20Parallel requests
How many job pages to load at the same time.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work for jobscout24.ch. If a page is blocked, the scraper retries it on Swiss residential proxies automatically.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | Job ID |
| title | string | null | Job title |
| company | string | null | |
| location | string | null | |
| canton | string | null | |
| source_url | string | Job ad URL |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job | One job ad saved, with full details when they are switched on. Offline ads, filtered jobs and failed pages are free. | $0.002 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/jobscout24-scraper').call({
"searchQueries": [
"Software Engineer"
],
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/jobscout24-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/jobscout24-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Fast list of sales jobs in the Zurich region: title, company, place, workload and age.
Full job ads with description, contact person and workload for cooks around Bern.
Accounting jobs in the Lake Geneva region with links to the French site.
Nursing jobs with a 40 to 60 % workload whose title contains Pflege.
Paste a result page from the site with your own filters.
Open apprenticeship places in and around Zürich.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.