No Fluff Jobs Scraper | NoFluffJobs IT Jobs & Salary Data
Pricing
from $1.85 / 1,000 results
No Fluff Jobs Scraper | NoFluffJobs IT Jobs & Salary Data
Scrape nofluffjobs.com IT jobs in Poland, Czechia & Slovakia, Hungary and Ukraine. 60 fields: salary ranges per contract type (B2B & permanent), skills, seniority, work mode, remote days, company size. Multi-select filters, salaries in one currency, incremental monitoring + alerts.
Pricing
from $1.85 / 1,000 results
Rating
0.0
(0)
Developer
Corvuslab
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
What does No Fluff Jobs Scraper do?
No Fluff Jobs Scraper pulls IT and tech job offers from nofluffjobs.com across all four of its markets โ Poland, Czechia & Slovakia, Hungary and Ukraine โ into clean, structured records with 63 fields each. Every offer on No Fluff Jobs carries a salary, and this Actor turns it into numbers you can sort and compare, optionally converted to one currency and one period. It runs with no code and exports to JSON, CSV, Excel, the API or straight into an AI agent.
Give it search terms (python, data engineer, react native) and filters, or paste No Fluff Jobs URLs, and it returns every matching job: title, company, seniority, skills, salary, work mode and dates, plus the full offer when Fetch full job details is on (the default).
New to Apify? Sign up free and use the included monthly platform credit to try this Actor โ no credit card needed.
Why this scraper
- โก Fast & low-cost โ lightweight, no browser, no login, so large runs stay cheap.
- ๐๏ธ Narrow it down properly โ ten multi-select filters, four markets and several search terms in one de-duplicated run.
- ๐ข No half-empty records โ company size, work mode, remote days per week and expiry date come back on every job, so you can filter and chart on them without gaps.
- โป๏ธ Built for monitoring โ scheduled runs return only what changed, and unchanged jobs are free.
What data can you extract from No Fluff Jobs?
Every record carries 63 fields. Fields in bold are filled on every offer, not only when the employer happens to provide them.
| Group | What you get |
|---|---|
| Job & role | Title, URL, market, category, seniority, main technology, skills, must-have and nice-to-have skills, language requirements, daily tasks |
| Salary | Min, currency, period, contract type and readable salary text, max (empty only on open-ended "from X" offers), and a separate range for each contract type the offer lists, with its paid-holiday flag |
| Work mode & location | Location, cities, countries, work mode (remote / hybrid / office), remote days per week, flexible-remote flag, hybrid arrangement text |
| Company & hiring | Company, company size, website, logo, company video, contract start, how to apply, the employer's own job reference, plus recruitment steps and team methodology when the employer describes them |
| Dates & status | Posted, renewed and expiry dates, featured flag, online-interview flag, Help-for-Ukraine flag |
| Description | Full offer text as plain text, HTML and/or Markdown, with an optional length cap |
Key features
- ๐ Search or URL scraping โ several search terms per run, or paste No Fluff Jobs search URLs (their filters are kept) and job URLs.
- ๐ All four markets at once โ any mix of Poland, Czechia & Slovakia, Hungary and Ukraine, merged and de-duplicated across markets and terms. A job posted in several cities is returned once.
- ๐๏ธ Real multi-select filters โ 36 job categories, 7 seniority levels, 5 contract types, cities, remote, required skills, companies, posting language, minimum salary and posting age.
- ๐ฑ Salary normalization โ report every salary in PLN, EUR, USD, GBP, CHF, CZK, HUF or UAH, per hour, day, month or year, so offers from four markets compare side by side.
- ๐งฎ Pay per contract type โ when an offer pays differently on B2B and on a permanent contract,
salaryByContractkeeps both ranges instead of flattening them into one number. - โป๏ธ Monitoring & alerts โ scheduled runs deliver only new, updated and reappeared jobs, and push them to Telegram, Slack, Discord or any webhook (details below).
- ๐ค AI-ready โ compact and drop-empty output modes keep payloads small for LLMs and MCP.
๐ How to scrape No Fluff Jobs
- Open the Actor and enter one or more search terms (e.g.
python), pick your markets and any filters โ or paste a No Fluff Jobs URL. - Set Max results and choose whether to fetch full job details (on by default).
- Optionally pick a salary currency and period so every offer is reported the same way.
- (Optional) Turn on incremental mode and an alert channel, then Schedule it.
- Click Start โ results stream into the Output tab.
Leave everything empty and it returns the 25 most recently posted or refreshed jobs in Poland.
Quick-start example input
{"searchTerms": ["python"],"markets": ["pl", "cz"],"seniority": ["senior", "expert"],"employmentTypes": ["b2b"],"remoteOnly": true,"salaryCurrency": "EUR","salaryPeriod": "month","maxResults": 100}
This finds up to 100 senior and expert Python jobs offering a B2B contract that can be done fully remote, across Poland and Czechia & Slovakia, with every salary converted to euros per month โ a ready-made shortlist of the best-paid remote B2B roles in the region.
Input
Configure it in the visual editor โ no code needed โ or pass JSON via the API. 37 inputs are available, grouped exactly as in the editor. The incremental monitoring and notification inputs are described in their own sections below.
๐ Search
| Field | Type | What it does |
|---|---|---|
searchTerms | array | Job titles, technologies or keywords, e.g. python, data engineer. Each term runs as its own search; results are merged and de-duplicated. Empty = every open job. |
markets | array | pl (Poland), cz (Czechia & Slovakia โ one shared market), hu (Hungary), ua (Ukraine). Defaults to Poland. |
startUrls | array | No Fluff Jobs search URLs (filters in the URL are kept) or job offer URLs. Replaces the search form. |
maxResults | integer | Maximum jobs across all searches (default 25, 0 = every matching job). |
๐๏ธ Filters
Several values inside one filter widen the search (OR); different filters narrow it (AND).
| Field | Type | What it does |
|---|---|---|
categories | array | 36 categories: backend, frontend, fullstack, mobile, embedded, data, AI / machine learning, DevOps, testing, security, architecture, system administration, IT support, business analysis, BI, project and product management, agile, ERP, UX / UI, game dev, marketing, sales, finance, HR, consulting and more. |
seniority | array | trainee, junior, mid, senior, expert, lead, head. |
employmentTypes | array | b2b, permanent, zlecenie (mandate), uod (specific-task), intern. |
cities | array | e.g. Warszawa, Krakรณw, Praha, Budapest โ Polish characters optional. |
remoteOnly | boolean | Fully remote jobs. With cities: jobs in those cities or remote. |
skills | array | Only jobs listing one of these technologies, e.g. Java, Kubernetes, SQL. |
companies | array | Only jobs from these employers (name or part of it). |
jobLanguages | array | Posting language: en, pl, de, hu, uk. |
minSalary | integer | Only jobs paying at least this much, in the salary currency and period chosen below. |
postedWithinDays | integer | Only jobs posted or refreshed in the last N days. |
๐ Output
| Field | Type | What it does |
|---|---|---|
salaryCurrency | enum | original or one of PLN, EUR, USD, GBP, CHF, CZK, HUF, UAH. |
salaryPeriod | enum | original, hour, day, month or year. |
includeDetails | boolean | Fetch the full offer (default on) โ see Data fields below for what it adds. |
descriptionFormat | enum | all, text, html or markdown. |
descriptionMaxLength | integer | Cut descriptions to N characters (0 = full length). |
compact | boolean | Core fields only. |
excludeEmptyFields | boolean | Drop null/empty fields. |
โ๏ธ Advanced
| Field | Type | What it does |
|---|---|---|
proxyConfiguration | object | Optional and off by default โ the Actor works without it. |
ignoreUrlFailures | boolean | Skip start URLs that can't be interpreted instead of failing the run. |
maxRequestRetries | integer | Retries per failed request (0โ10, default 3). |
More example inputs
A data-engineering salary survey across every market, salaries per year in euros:
{"categories": ["data", "artificialIntelligence"],"markets": ["pl", "cz", "hu", "ua"],"salaryCurrency": "EUR","salaryPeriod": "year","maxResults": 0}
A daily watch on new Krakรณw and Warsaw Java jobs above a pay floor, pushed to Telegram:
{"skills": ["Java"],"cities": ["Krakรณw", "Warszawa"],"minSalary": 20000,"postedWithinDays": 2,"incrementalMode": true,"skipReposts": true,"telegramToken": "<bot token>","telegramChatId": "@yourchannel"}
Paste a search you built on the site, keep its filters:
{ "startUrls": [{ "url": "https://nofluffjobs.com/pl/backend" }], "maxResults": 200 }
Output
Each dataset item is one job offer. A real record with full details on (long text and lists trimmed):
{"id": "BIGSKIRV","title": "Senior PHP Software Engineer (Pimcore)","company": "Branchspace sp. z o.o.","url": "https://nofluffjobs.com/pl/job/senior-php-software-engineer-pimcore-branchspace-krakow","market": "pl","category": "backend","seniority": ["Senior"],"technology": "PHP","skills": ["PHP", "Symfony", "CMS"],"location": "Krakรณw","cities": ["Krakรณw"],"countries": ["PL"],"isFullyRemote": false,"workMode": "hybrid","remoteDaysPerWeek": 3,"salaryMin": 18000,"salaryMax": 25000,"salaryCurrency": "PLN","salaryPeriod": "month","salaryContractType": "b2b","salaryText": "18 000โ25 000 PLN / month (B2B)","salaryByContract": [{ "contractType": "b2b", "min": 18000, "max": 25000, "currency": "PLN", "period": "month", "paidHoliday": false }],"employmentTypes": ["b2b"],"postedAt": "2026-10-08T06:35:46.319000+00:00","expiresAt": "2026-11-07T23:59:59","onlineInterview": true,"mustHaveSkills": ["PHP", "Symfony", "CMS", "HTML", "CSS", "JavaScript"],"niceToHaveSkills": ["Web security", "DevOps", "AWS", "Pimcore"],"languageRequirements": ["en B2 (required)", "pl (nice to have)"],"benefits": ["Sport subscription", "Private healthcare", "Small teams", "International projects"],"recruitmentSteps": ["Screening interview (30 min. Teams meeting)","Product Owner interview (30 min. Teams meeting)","Technical Interview (1h Teams meeting)","Final interview (45 min. in person meeting at our office)"],"methodology": ["Agile management: Scrum", "Issue tracking tool: Jira", "Version control system: GIT"],"contractStart": "ASAP","companySize": "50 - 249","companyWebsite": "https://branchspace.com/","applyMethod": "email","source": "nofluffjobs.com","scrapedAt": "2026-10-08T08:27:57.067004+00:00","detailFetched": true}
Data fields
- Core (every run) โ
id,title,company,url,market,category,seniority,technology,skills,location,cities,countries,isFullyRemote,workMode,postedAt,renewedAt,isFeatured,onlineInterview,help4Ua,companyLogo,salaryMin,salaryMax,salaryCurrency,salaryPeriod,salaryContractType,salaryText. - Full details (with
includeDetails) โdescription,descriptionHtml,descriptionMarkdown,requirementsText(the requirements section in Markdown),mustHaveSkills,niceToHaveSkills,languageRequirements,dailyTasks,benefits,officePerks,salaryByContract,employmentTypes,remoteDaysPerWeek,remoteFlexible,hybridDescription,expiresAt,companySize,companyWebsite,companyVideo,recruitmentSteps,methodology,contractStart,applyMethod,employerReference(the employer's own job ID, handy for matching against an ATS). - Run & monitoring โ
source,searchKeyword,scrapedAt,detailFetched,contentHash, and in incremental modechangeType(NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED),firstSeenAt,lastSeenAt,previousSeenAt,expiredAt,isRepost,repostOfId,repostDetectedAt.
Output modes. By default every field the run collects is present, with null where the offer has no value. Compact mode
returns the core fields only, and excludeEmptyFields drops empties entirely โ together they keep
payloads small for spreadsheets, LLM context windows and MCP tools. EXPIRED records carry only the
job's ID, title, link and tracking dates.
The Output tab also ships a ready-made Overview table view: title, company, location, work mode, seniority, salary, skills, posted date and link.
โป๏ธ How to monitor No Fluff Jobs with incremental mode
Schedule the Actor and turn on incremental mode: each run compares against the last and tags
every job with a changeType.
- NEW, UPDATED and REAPPEARED (closed, then back under the same link) are delivered.
- UNCHANGED jobs are recognised before their details are fetched, so they cost nothing โ unless you ask for them.
- A job taken down and re-posted under a new link (same title, company and location) is delivered as NEW with
isRepost: trueand the original's ID inrepostOfIdโ or left out, and not charged, with Skip re-posted jobs. Closed jobs are remembered for 90 days for this. - EXPIRED jobs (closed since the last run) are reported once, on request.
| Field | Type | What it does |
|---|---|---|
incrementalMode | boolean | Compare every run with the last one and tag each job with a changeType. |
stateKey | string | Stable name for the tracked search (auto-derived from your settings if blank). |
emitUnchanged | boolean | Also deliver UNCHANGED jobs, for a complete dataset on every run. |
emitExpired | boolean | Also deliver jobs that closed since the last run. |
skipReposts | boolean | Leave out jobs re-posted under a new link. |
| First run (baseline) | Next run (nothing changed) | |
|---|---|---|
| Jobs found | all | all |
| Job details fetched | all | none |
| Records emitted & billed | all | none |
Setting up scheduled monitoring
- Configure your search terms, markets and filters.
- Turn on Incremental mode.
- Run it once โ this seeds the baseline.
- Open the Schedules tab and set a recurring run (e.g. hourly or daily).
- Add an alert channel (below).
To catch closed jobs, let the run read the whole search (Max results 0, or above the number of matches) โ a capped run never marks jobs as expired, so a limit can't produce false closures. A job that is still open but has aged out of your posted within window is not treated as closed either.
๐ How to set up No Fluff Jobs alerts
Get pinged the moment a matching job appears. Fill in only the channels you want โ credentials are secret inputs, encrypted at rest, masked in the UI and never written to the run log.
| Channel | What to configure |
|---|---|
| โ๏ธ Telegram | telegramToken (from @BotFather) + telegramChatId (chat or channel ID) |
| ๐ฌ Slack | slackWebhookUrl (Incoming Webhook URL) |
| ๐ฎ Discord | discordWebhookUrl (channel webhook URL) |
| ๐ช Webhook | webhookUrl (+ optional webhookHeaders) receives every matched job as JSON, up to 1,000 per run โ ideal for n8n / Make / Zapier |
Chat messages list up to notificationLimit jobs (1โ20, default 5) with title, company, salary, link
and change type, under a header with the full count. In incremental mode, Alert only on changes
(notifyOnlyChanges) keeps alerts to new, updated and reappeared jobs โ so you can keep your dataset
complete with Include unchanged jobs while the messages stay short. Every channel fires
independently: a broken channel can't stop the scrape or the others.
๐ก What can you do with No Fluff Jobs data?
Benchmark IT salaries across Central Europe
Convert every offer to one currency and period, then compare what a senior DevOps engineer earns in Warsaw, Prague and Budapest. Where an offer pays differently on B2B and on a permanent contract, both ranges come through, so you can see the contract premium too.
Build a job alert for your exact profile
Combine seniority, skills, cities, remote and a salary floor, schedule it daily and get only new matches in Telegram or Slack. No more refreshing the site.
Recruitment and talent-market intelligence
See which companies are hiring for which stacks, at what seniority and with what hybrid policy, and segment the market by company size and remote days per week.
Tech-stack and skills demand research
Track must-have versus nice-to-have skills over time to see which frameworks are rising. Category and seniority counts per market make clean trend charts.
Market & competitive research for employers
Check how your offer stacks up against similar roles on pay, remote days, benefits and office perks โ against peers of your own size, not giants.
Feed AI agents and LLM pipelines
Send job records straight into an LLM context, an MCP tool or a vector store for job matching or career assistants.
๐ฐ How much does it cost to scrape No Fluff Jobs?
This Actor uses Apify's pay-per-event model: a small fee when a run starts, plus a fee for each job saved to your dataset. See the Actor's Pricing tab for the current numbers โ they're rendered live, so this page never goes stale.
It is a lightweight scraper with no browser, which is why its fees can sit at the low end of the market. Three things cut your bill further:
- Filters โ jobs you filtered out are never saved and never billed.
- Details off โ turn off Fetch full job details for the fastest, leanest runs when the listing fields are enough.
- Incremental mode โ after the baseline you pay only for what changed, so your cost scales with how much No Fluff Jobs changes, not with how much you watch:
| Daily churn | of 1,000 tracked | billable records | you save |
|---|---|---|---|
| 5 % | 1,000 | 50 | 95 % |
| 15 % | 1,000 | 150 | 85 % |
| 30 % | 1,000 | 300 | 70 % |
๐ Integrations, export & API
Export to JSON, CSV, Excel or an HTML table, run on a schedule, and connect to Google Sheets, Slack, Make, Zapier and n8n. It also works as an MCP tool for AI agents.
To run it from your own code, use the REST API or the JavaScript / Python clients. Example with the Apify Python client:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run_input = {"searchTerms": ["data engineer"],"markets": ["pl", "cz", "hu"],"salaryCurrency": "EUR","salaryPeriod": "month","maxResults": 50,}run = client.actor("corvuslab/nofluffjobs-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["company"], item["salaryMin"], item["salaryMax"], item["salaryCurrency"])
โ FAQ
Do I need a No Fluff Jobs account or login? No โ it collects only public job offers and runs out of the box, with no cookies or setup.
Why do I see Polish jobs in the Czechia & Slovakia market? That's how No Fluff Jobs works: Czechia and Slovakia are one shared market, and many employers advertise the same role โ often remote โ in several markets, so the Czech & Slovak pool includes plenty of Poland-based offers. Use cities or countries in the output to narrow it down. A job advertised in several markets you picked is returned once.
Does every job have a salary? Yes. No Fluff Jobs requires a salary on every offer, so salaryMin, currency and period are always filled; salaryMax is empty only on open-ended "from X" offers. Most offers list one contract type โ when one lists several, salaryByContract gives each its own range.
How does the minimum salary filter work? It follows the site's own rule: a job matches when the top of its range reaches your floor, in the currency and period you chose under Salary currency / Salary period (Polish zลoty per month when those are left as posted).
Why are recruitmentSteps, methodology or hybridDescription empty on most jobs? They come from optional sections most employers skip: recruitment steps and methodology appear on roughly one offer in ten, a written hybrid arrangement on fewer. When the employer wrote them, you get them. They also need Fetch full job details on.
Can I get recruiter emails or phone numbers, or a direct apply link? No. No Fluff Jobs doesn't publish recruiter contact details, and applications go through the site itself, so there is nothing public to extract. You get the job URL, applyMethod, the company website and company size instead.
How many jobs can I get? Every open job matching your search โ set maxResults to 0 for no limit.
โ๏ธ Is it legal to scrape No Fluff Jobs?
This Actor collects only publicly available job offers โ the same information anyone can see on nofluffjobs.com without logging in. You're responsible for how you use it โ in particular any personal information โ and for complying with the site's terms and applicable law (including the GDPR where it applies). Not affiliated with, endorsed by or sponsored by No Fluff Jobs.
Keywords: No Fluff Jobs scraper ยท nofluffjobs scraper ยท nofluffjobs api ยท nofluffjobs.com scraper ยท IT jobs Poland ยท tech jobs Poland ยท IT jobs Czech Republic ยท tech jobs Hungary ยท IT salary data Poland ยท B2B salary ranges ยท remote IT jobs Europe ยท developer job listings ยท tech salary benchmark ยท job monitoring ยท recruitment data ยท export to CSV ยท export to Excel ยท MCP tool for AI agents