NoFluffJobs Scraper at a glance
NoFluffJobs Scraper is a ready-to-run Apify actor from abotapi for collecting jobs data. Its documented output includes title, change type (incremental mode), company, category and seniority, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Jobs, Automation, Developer Tools
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 28 options
- Run success
- 100.0% of completed public runs in the last 30 days
Scrape No Fluff Jobs IT listings across Poland, Czechia, Slovakia, Hungary and the Netherlands by search filters or URL. Extract job titles, salaries, required skills, descriptions, responsibilities, benefits, hiring steps, company sizes, GPS coordinates and office locations.
What NoFluffJobs Scraper can do
- Salary transparency by default. Every record carries the disclosed pay range, contract type and a full per-contract-type breakdown, with hourly-quoted postings converted onto the same monthly figure as everything else.
- Five markets in one run. Scrape Poland, Czechia, Slovakia, Hungary and the Netherlands, individually or all at once.
- Structured search. Filter by category, seniority, employment type, posting language, city, technology, remote-only and salary range, no need to hand-build search URLs.
- Full detail depth on demand. Required and nice-to-have skills, daily tasks, benefits, equipment, recruitment steps, company size and exact office GPS coordinates.
- Clean, deduplicated output. One record per job, with every office city and its coordinates merged into a single locations array instead of one row per location.
- Built for monitoring. Incremental mode returns only new and changed jobs on a recurring schedule, and a run that could not read the site fails loudly instead of returning an empty dataset.
Choose what to collect
These inputs let you configure NoFluffJobs Scraper - IT Jobs, Salaries & Skills. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | How to find jobs. 'search' builds a query from the filters below. 'url' fetches the NoFluffJobs URLs you paste (search pages or individual job pages). |
regionstring | Which NoFluffJobs market to search. 'All regions' scrapes every market. |
keywordstring | Free-text search, e.g. a role, technology or company name. Leave empty to list everything in the region. |
categorystring | Job category. Leave empty for all categories. |
senioritystring | Experience level. Leave empty for any. |
employmentTypestring | Contract type. Leave empty for any. |
jobLanguagestring | Language the posting is written in. Leave empty for any. |
Show 21 more inputs
| Input | What it controls |
|---|---|
citystring | Filter to a single city (e.g. warszawa, krakow, praha). Leave empty for all cities. |
technologystring | Require a specific skill or technology (e.g. java, react, kubernetes). |
urlsarray | Paste NoFluffJobs URLs (one per line). Search/listing pages are walked with pagination; individual job pages are fetched directly. The search-mode fields are ignored in URL mode. The fields in the Filters and sort section still apply. |
remoteOnlyboolean | Only return jobs that offer remote work. The detail fields remotePercent and fullyRemote tell you whether a job is fully remote or hybrid. Applies in BOTH search mode and URL mode. |
sortBystring | Result ordering. Default is the site's relevance ranking. Salary sorts use the disclosed range; newest sorts by publish date. Applied server-side, so it orders the whole result set, not just the page. Applies in BOTH search mode and URL mode. |
minSalaryinteger | Only jobs whose disclosed salary range reaches at least this amount (monthly gross, in the region currency). Jobs with no disclosed salary are excluded when a salary filter is set. Applies in BOTH search mode and URL mode. |
maxSalaryinteger | Only jobs whose disclosed salary range starts at or below this amount (monthly gross, in the region currency). Applies in BOTH search mode and URL mode. |
fetchDetailsboolean | Open each job's detail page to add full description, required/nice-to-have skills, daily tasks, benefits, equipment, recruitment steps, company size, salary breakdown and GPS. Turn off for a faster, lighter run with list-level fields only. |
maxListingsinteger | The main limit: maximum number of jobs to return. 0 means unlimited (then Max pages becomes the cap). |
maxPagesinteger | Safety bound on how many search-result pages to walk per query/region (about 20 jobs per page). 0 means unlimited (walk until the storefront reports no more pages). Leave at the default; Max jobs is the primary limit. Only lower this if you set Max jobs to 0 (unlimited) and want pages to be the cap. |
residentialRequestCapinteger | Cost guard. If you chose a Residential connection, switch to the cheaper Datacenter connection after this many residential requests. 0 means no cap. |
residentialBudgetMbinteger | Cost guard. If you chose a Residential connection, switch to the cheaper Datacenter connection after pulling this many MB over residential. 0 means no budget limit. |
resumeFromRunIdstring | Continue ONE interrupted crawl. ID of a previous run of this actor (or a dataset ID) -- jobs already in that dataset are skipped, so this run returns only NEW jobs (a delta). Combine both runs' datasets for the full set. Max jobs then counts only the new jobs. For recurring monitoring of the SAME search across scheduled runs instead, use Incremental mode below. |
incrementalModeboolean | Recurring monitoring of the SAME search: schedule this actor and get only what changed (NEW/UPDATED/REAPPEARED/EXPIRED) each run -- the actor remembers its own baseline in a key-value store, no run ID to paste. Off by default so existing runs are unaffected. For continuing ONE interrupted crawl instead, use Resume above. |
stateKeystring | Optional. Name this monitoring campaign so you can run several different filter setups without them sharing a baseline. Leave empty to auto-derive a key from the mode and every filter (region, keyword, category, seniority, employment type, job language, city, technology, remote only, sort, salary range, URLs, fetch details) -- two different filter setups then never collide. |
emitUnchangedboolean | Incremental mode only. When off (default), a job identical to the last run is skipped -- not returned, not billed. Turn on to also return (and pay for) every UNCHANGED job alongside NEW/UPDATED/REAPPEARED. |
emitExpiredboolean | Incremental mode only. When on, a job that was tracked before but is no longer found after a COMPLETE scan of this search is returned once with changeType EXPIRED (and billed like any other row). Only fires on a complete, uncapped, non-resumed scan -- a partial run never marks jobs expired. Off by default. |
ignoreFieldsForChangesarray | Optional. Field names to leave out of UPDATED detection and changedFields, on top of the built-in exclusion (the relative posted-or-renewed day count). Use a plain name such as highlighted, or a dotted path for a nested field such as salaryRanges.type. The fields stay in the output. Adding a name later does not mark already-tracked jobs as UPDATED. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
titleTitle (text)changeTypeChange type (incremental mode) (text)companyNameCompany (text)categoryCategory (text)senioritySeniority (array)salaryFromSalary from (number)salaryToSalary to (number)salaryCurrencyCurrency (text)citiesCities (array)remoteRemote (boolean)technologyMain tech (text)regionRegion (text)Show 13 more fields
urlURL (link)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)descriptionDescription (text)requirementsMustMust-have requirements (array)requirementsNiceNice-to-have requirements (array)dailyTasksDaily tasks (array)benefitsBenefits (array)equipmentEquipment (object)recruitmentStepsRecruitment steps (array)companySizeCompany size (text)salaryRangesSalary ranges (array)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": "senior-java-developer-sample-company-warszawa",
"reference": "REF-0001",
"title": "Senior Java Developer",
"url": "https://nofluffjobs.com/pl/job/senior-java-developer-sample-company-warszawa",
"region": "pl",
"companyName": "Sample Tech Company",
"companySize": "500 - 999",
"companyProfileUrl": "https://nofluffjobs.com/company/sample-tech-company-00000000",
"category": "backend",
"seniority": [
"senior"
],
"technology": "Java",
"remote": true,
"fullyRemote": false,
"remotePercent": 50,
"cities": [
"Remote",
"Warszawa"
],
"locations": [
{
"city": "Warszawa",
"country": "Poland",
"countryCode": "POL",
"latitude": 52,
"longitude": 21
}
],
"salaryFrom": 21840,
"salaryTo": 23520,
"salaryCurrency": "PLN",
"salaryType": "b2b",
"salaryRanges": [
{
"type": "b2b",
"from": 130,
"to": 140,
"currency": "PLN",
"period": "Hour"
}
],
"description": "Full job description text appears here when fetchDetails is on.",
"dailyTasks": [
"Design backend services",
"Build REST APIs"
],
"requirementsMust": [
{
"name": "Java",
"type": "main"
},
{
"name": "Spring",
"type": "main"
}
],
"requirementsNice": [
{
"name": "Kafka",
"type": "nice"
}
],
"requirementLanguages": [
"en"
],
"benefits": [
"Private healthcare",
"Sport card"
],
"officePerks": [
"Free coffee"
],
"equipment": {
"computer": "Notebook",
"operatingSystem": "Linux"
},
"recruitmentSteps": [
"Phone screen",
"Technical interview"
],
"recruitmentLanguages": [
"pl",
"en"
],
"onlineInterviewAvailable": true,
"posted": "2026-01-01T00:00:00.000Z",
"expiresAt": "2026-02-01T00:00:00.000Z"
}Ways to use this data
- Recruiters and talent teams: benchmark disclosed salary ranges and required skills across the region before writing a job ad.
- Compensation and HR analysts: build a dataset of published pay ranges by seniority, technology and region.
- Job boards and career sites: mirror open roles from five Central and Eastern European markets into your own listings.
- Job seekers and career tools: track new and updated postings for a technology, city or seniority level on a schedule.
- Market researchers: study remote-work adoption, contract types and benefits across the region's tech sector.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does NoFluffJobs Scraper return?
The documented output for NoFluffJobs Scraper includes title, change type (incremental mode), company, category, seniority, salary from, salary to and currency. Availability of each field depends on the source page and the selected mode.
How much does NoFluffJobs Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed jobs on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated, reappeared or expired jobs, and unchanged ones are not billed.
What is the difference between Resume and Incremental mode?
Resume continues ONE specific interrupted run by id, and returns the delta against that one run's dataset. Incremental mode is for a search you run again and again on a schedule: the actor remembers its own baseline between runs, no id to paste, and classifies every job against what it saw last time. Use Resume to finish a crawl that stopped; use Incremental mode to monitor the same search over time.
Why did my run fail instead of returning an empty dataset?
If every request to NoFluffJobs was refused, the run stops with a clear message so "no jobs matched" is never confused with "nothing could be read". Retry in a few minutes, or pick a different connection. If a minimum or maximum salary removed everything, the run still succeeds and names the filter as the reason in its final message.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
