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

Scrape profesia.sk, Slovakia's largest job board: job title, company, location, salary range, employment type, posting and closing dates, education, languages, benefits, contact person and phone, apply link and full description. Search by keyword, location and category or paste profesia.sk URLs.
Get every job ad from profesia.sk, Slovakia's largest job board, as clean structured data: title, company, salary range, location, employment type, posting and closing dates, education, languages, benefits, the recruiter's name and phone, the apply link and the full description. Search by keyword, region or category, or paste any profesia.sk link. No account or login needed, about 10 jobs in under 10 seconds, and $1.00 per 1,000 jobs.
programátor, účtovník, java), and optionally locations (bratislavsky-kraj, Košice) or categories (informacne-technologie). Or paste profesia.sk URLs.| Field | What it does |
|---|---|
searchQueries | Keywords, one search each (job titles, skills, company names). |
locations | Regions, districts or cities, for example bratislavsky-kraj, Žilina. |
categories | Category slugs from profesia.sk URLs, for example informacne-technologie. |
startUrls | profesia.sk search, location, category, company or job links. |
maxResults | Total jobs to save (0 = no limit). |
maxResultsPerSearch | Cap per keyword, location or URL (0 = no cap). |
remoteFilter | remote, hybrid or onsite. |
jobType | full-time, part-time, temporary, self-employed or internship. |
salaryMin / salaryPeriod | Minimum salary in EUR per month (m) or hour (h). |
postedWithin | 1, 2, 7 or 31 days. |
includeDetails | Open each job page for the full data (on by default). |
incrementalMode / stateKey | Save only new and changed jobs on scheduled runs. |
{
"searchQueries": ["programátor"],
"locations": ["bratislavsky-kraj"],
"remoteFilter": "hybrid",
"salaryMin": 2000,
"maxResults": 100
}
| Field | Description |
|---|---|
jobId, url | profesia.sk job number and link |
title, company, companyUrl, companyLogoUrl | The job and the employer |
location, places, remoteType | Where the work is, and remote / hybrid / onsite |
salaryText, salaryMin, salaryMax, salaryCurrency, salaryType, salaryGross | Pay as shown and parsed |
employmentType, startDate, postedDate, validThrough | Contract type and dates |
professions, education, languages, skills, otherKnowledge, experience, suitableFor, benefits | Requirements and perks |
description, descriptionHtml, descriptionMarkdown | Full job text in three formats |
companyDescription, companyEmployeeRange | Company profile from the job page |
contactName, contactPhone, contactEmail, applyUrl | How to reach the recruiter or apply |
extractedEmails, extractedPhones, extractedUrls, socialProfiles | Contacts and links found in the description |
searchQuery, searchUrl, position, scrapedAt | Where and when the job was found |
Example (one job from a test run, shortened; the contact person is fictional):
{
"jobId": "5367448",
"url": "https://www.profesia.sk/praca/emel-bratislava/O5367448",
"title": "Programátor / Programátorka",
"company": "EMEL Bratislava, s.r.o.",
"companyUrl": "https://www.profesia.sk/praca/emel-bratislava-s-r-o/C4121",
"location": "Bratislava, Slovensko (Pozícia umožňuje občasnú prácu z domu)",
"places": ["Bratislava"],
"remoteType": "hybrid",
"salaryText": "2 000 EUR/mesiac",
"salaryMin": 2000,
"salaryMax": 2000,
"salaryCurrency": "EUR",
"salaryType": "MONTH",
"salaryGross": true,
"employmentType": "plný úväzok",
"startDate": "Ihneď",
"postedDate": "2026-09-30",
"validThrough": "2026-10-30",
"professions": ["Oracle programátor/programátorka", "PHP programátor/programátorka"],
"languages": "Anglický jazyk - Mierne pokročilý (B1)",
"otherKnowledge": "PHP - Mierne pokročilý\nJavaScript - Mierne pokročilý\nCSS - Mierne pokročilý",
"benefits": "pružný pracovný čas\n\nstabilné prostredie v prosperujúcej spoločnosti\n\nMultiSport karta",
"description": "Informácie o pracovnom mieste\n\nNáplň práce, právomoci a zodpovednosti\nStabilná firma pôsobiaca na trhu informačných technológií už viac ako tri desaťročia hľadá skúseného developera…",
"descriptionLength": 3098,
"companyEmployeeRange": "25-49 zamestnancov",
"contactName": "Jana Nováková",
"contactPhone": "+421900123456",
"applyUrl": "https://www.profesia.sk/job-application-redirect/5367448?_locale=sk&inc_stat=3&refLogin=jobApplication",
"detailsLoaded": true,
"contentQuality": "full",
"searchQuery": "programátor",
"position": 3,
"source": "profesia.sk",
"scrapedAt": "2026-10-22T02:54:32Z"
}
You pay $1.00 per 1,000 jobs saved ($0.001 per job), plus a small platform usage charge for compute and proxy traffic. In our test runs the usage was about $0.04 to $0.07 per 1,000 jobs with details (more when the run moves to Slovak residential proxies), so 1,000 jobs ≈ $1.05 in total. You are never charged for jobs that are not saved, and the run stops cleanly when your spending limit is reached.
Is it legal to scrape profesia.sk? The actor reads only public job ads that anyone can open without an account. Job ads can contain personal data such as a recruiter's name and phone; make sure your use of it complies with GDPR and your local laws.
Do I need a login or my own proxy? No. No account is used. profesia.sk limits how many pages one address may open, so the actor spreads requests over many proxy addresses; datacenter proxies are the default, and the run switches to Slovak residential proxies by itself if the site keeps answering with bot checks.
How many jobs can I get? As many as profesia.sk lists. One search on profesia.sk shows at most 10,000 jobs (500 pages), so for a full export of the site, split it into several searches by region or category. Duplicates across searches are saved only once.
Why is a field empty? Each employer fills in different parts of the ad. Salary, start date, education, contact phone and similar fields are empty when the ad does not state them. Branded (custom-designed) ads give the description and main facts, but often no structured requirements.
Can I schedule it or use the API? Yes. Schedule runs in the console and turn on "Only new and changed jobs" to get just the new ads each time, or start runs and download the dataset through the API.
Can I get only the list data, faster? Turn off "Load job details" to save just title, company, location, salary label and posting age from the result lists, about 20 jobs per page.
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, skills or company names to search for, one per line, for example programátor, účtovník, java or Lidl. Each keyword is a separate search. Leave empty and set a location or category to get every job there.
locationsarrayOptionalLocations
Slovak regions, districts or cities as profesia.sk names them, for example bratislavsky-kraj, kosicky-kraj, Žilina or Banská Bystrica (names are turned into the site's URL form). Each location is a separate search. Leave empty for all of Slovakia.
categoriesarrayOptionalCategories
Job categories from the profesia.sk URL, for example informacne-technologie, ekonomika-financie, administrativa or strojarstvo. Each category is a separate search.
startUrlsarrayOptionalProfesia.sk URLs
profesia.sk links: search result pages (profesia.sk/praca/?search_anywhere=java), location or category pages (profesia.sk/praca/bratislavsky-kraj/), company job lists (profesia.sk/praca//C) or single job pages (profesia.sk/praca//O). Filters in the URL are kept.
maxResultsintegerOptionaldefault 20Max results
Maximum number of jobs to save in total, across all keywords, locations and URLs. Use 0 for no limit (every matching job). profesia.sk itself shows at most 10,000 jobs (500 pages) for one search, so split a very broad search by location or category to get more.
maxResultsPerSearchintegerOptionaldefault 0Max results per search
Cap the jobs saved per keyword, location, category or URL, so one broad search does not use up the whole limit. 0 means no cap.
remoteFilterenumOptionalWork place
Only jobs that are fully remote, hybrid (occasional work from home) or on site. Leave empty for all.
jobTypeenumOptionalEmployment type
Only one kind of employment. Leave empty for all.
salaryMinintegerOptionalMinimum salary (EUR)
Only jobs that pay at least this much, as profesia.sk filters it. Monthly unless 'Salary period' is hourly.
salaryPeriodenumOptionaldefault "m"Salary period
Whether the minimum salary is per month or per hour.
postedWithinenumOptionalPosted within
Only jobs published recently. Leave empty for any date.
sortByenumOptionalSort by
Order of the results. Keyword searches default to relevance, location and category pages to newest first.
includeDetailsbooleanOptionaldefault trueLoad job details
Open each job page for the full description, exact posting and closing dates, employment type, start date, education, languages, skills, benefits, company profile, employee count, contact person and phone, and the apply link. Turn off for a faster list with title, company, location, salary and posting age only.
descriptionFormatenumOptionaldefault "all"Description format
Which forms of the job description to save: all three, or only plain text, HTML or Markdown.
descriptionMaxLengthintegerOptionaldefault 0Description max length
Shorten each description to this many characters. 0 keeps the full text.
incrementalModebooleanOptionaldefault falseOnly new and changed jobs
For scheduled runs: save only jobs that are new or whose title, company, location or salary changed since an earlier run with the same state key. Each saved job says whether it is new or updated.
stateKeystringOptionalState key
Name for the memory of jobs already seen, used by 'Only new and changed jobs'. Use the same key on every scheduled run of one search. Leave empty to derive it from the keywords, locations, categories, URLs and filters.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
profesia.sk limits how many pages one address may open, so requests are spread over many proxy addresses. Datacenter proxies are the default; if the site keeps answering with bot checks, the run switches to Slovak residential proxies by itself.
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 |
|---|---|---|
| jobId | string | null | profesia.sk's job number (the digits after /O in the job URL). |
| url | string | null | Job page on profesia.sk. |
| title | string | null | Job title. |
| company | string | null | Hiring company or recruitment agency. |
| companyId | string | null | profesia.sk's company number. |
| companyUrl | string | null | The company's job list on profesia.sk. |
| companyLogoUrl | string | null | Logo image URL. |
| location | string | null | Place of work as the job shows it (address, city or 'Práca z domu'). |
| places | array | null | Towns or regions the job is listed under. |
| remoteType | string | null | remote, hybrid or onsite. |
| salaryText | string | null | Salary as shown, for example 1 600 - 1 900 EUR/mesiac. |
| salaryMin | number | null | Lower salary bound. |
| salaryMax | number | null | Upper salary bound (empty for 'from' salaries). |
| salaryCurrency | string | null | EUR, CZK... |
| salaryType | string | null | MONTH, HOUR or YEAR. |
| salaryGross | boolean | null | True when the job states a gross (brutto) salary. |
| employmentType | string | null | For example plný úväzok, živnosť (full-time, self-employed contract). |
| startDate | string | null | Start date as stated, for example ihneď (immediately) or dohodou (by agreement). |
| postedDate | string | null | Publication date (YYYY-MM-DD). |
| validThrough | string | null | Date the job ad ends (YYYY-MM-DD). |
| professions | array | null | The site's profession tags for the job. |
| education | string | null | Minimum education required. |
| educationField | string | null | Required field of study, when stated. |
| experience | string | null | Required years or kind of experience, when stated. |
| languages | string | null | Language skills and levels required. |
| skills | string | null | Personal skills and requirements. |
| otherKnowledge | string | null | Computer skills, driving licence and other knowledge, when stated. |
| suitableFor | string | null | Who the job is suitable for (graduates, students...). |
| benefits | string | null | Employee benefits. |
| description | string | null | Full job description as plain text. |
| descriptionHtml | string | null | Job description HTML. |
| descriptionMarkdown | string | null | Job description as Markdown. |
| descriptionLength | number | null | Characters in the plain-text description. |
| companyDescription | string | null | The company's short profile from the job page. |
| companyEmployeeRange | string | null | Number of employees, for example 20-24 zamestnancov. |
| contactName | string | null | Contact person named in the job. |
| contactPhone | string | null | Contact phone number. |
| contactEmail | string | null | Contact e-mail when shown in clear. |
| contactAddress | string | null | Contact address when stated. |
| applyUrl | string | null | Link to apply (profesia.sk form or the employer's site). |
| tags | array | null | Labels from the result list, for example 'Reagujte bez životopisu' (apply without CV). |
| extractedEmails | array | null | E-mail addresses found in the description. |
| extractedPhones | array | null | Phone numbers found in the description. |
| extractedUrls | array | null | Links found in the description. |
| socialProfiles | object | null | LinkedIn, Facebook, Instagram... links found in the description. |
| language | string | null | Language of the job page (sk, en, cs...). |
| detailsLoaded | boolean | null | True when the job page was read. |
| detailsError | string | null | Why the job page could not be read, if it failed. |
| contentQuality | string | null | full (job page read), list (list data only) or partial. |
| contentHash | string | null | Hash of title, company, location, salary and description, for change tracking. |
| changeType | string | null | new or updated in incremental mode. |
| searchQuery | string | null | Keyword that found the job. |
| searchLocation | string | null | Location that found the job. |
| searchUrl | string | null | List page that found the job. |
| position | number | null | Position in the search results. |
| source | string | null | profesia.sk |
| scrapedAt | string | null | Time the job was saved (UTC). |
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 saved job listing. | $0.001 |
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/profesia-scraper').call({
"searchQueries": [
"programátor"
],
"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/profesia-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/profesia-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.
Browse a region and a category with full job details.
Keyword search with employment-type and salary filters.
Paste a company's profesia.sk page to get its open positions.
List data only, without opening each job page.
Keyword search through Slovak home addresses.

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.