Scrape IT & tech jobs from NoFluffJobs, the Poland/CEE board with mandatory salary transparency. Each record has title, company, salary min/max, seniority, tech stack, remote flag and apply URL. Incremental delta mode with repost detection; filter by category, currency, remote. JSON, CSV, Excel.
Which NoFluffJobs categories to fetch. Defaults to all 37 verified category slugs below (broad coverage) — this is the full set of category slugs verified live against the NoFluffJobs search API (each was probed directly and returns real results): standard tech categories (backend, frontend, fullstack, mobile, embedded, devops, testing, architecture, security, game-dev, artificial-intelligence, data, sys-administrator), management/analysis (pm, agile, product-management, project-manager, business-intelligence, business-analyst), design/support (ux, support, erp), engineering (electronics, telecommunication, electrical-eng, automation, mechanics), and non-IT business roles NoFluffJobs also lists (sales, marketing, office-administration, hr, finance, consulting, customer-service, law, logistics, other). ai-data is kept as a legacy alias slug that still returns results server-side but is excluded from the default set (already covered by artificial-intelligence + data).
Type:string[]
Default:
[
"backend",
"frontend",
"fullstack",
"mobile",
"embedded",
"testing",
"devops",
"architecture",
"security",
"game-dev",
"artificial-intelligence",
"data",
"sys-administrator",
"pm",
"agile",
"product-management",
"project-manager",
"business-intelligence",
"business-analyst",
"ux",
"support",
"erp",
"electronics",
"telecommunication",
"electrical-eng",
"automation",
"mechanics",
"sales",
"marketing",
"office-administration",
"hr",
"finance",
"consulting",
"customer-service",
"law",
"logistics",
"other"
]
Example:
[
"frontend",
"fullstack"
]
Max items
maxItems
Optional
Maximum total number of postings to return across all categories. Set 0 for no limit.
Type:integer
Minimum:0
Default:100
Max pages per category
maxPages
Optional
Maximum number of result pages to fetch per category (each page contains up to 50 postings).
Type:integer
Minimum:1
Maximum:20
Default:5
Salary currency
salaryCurrency
Optional
Currency in which salary ranges are returned. NoFluffJobs converts all salaries to this currency.
Type:string
Default:EUR
Options:
EURPLNUSDGBPCHFCZKHUFUAH
Posted within (days)
postedSince
Optional
Drop postings older than this many days, based on the source's postedAt timestamp. Set 0 (default) to disable. Postings with a missing or unparseable postedAt always pass through, since we can't judge their age.
Type:integer
Minimum:0
Default:0
Exclude titles containing
titleExclude
Optional
Drop postings whose title contains any of these words/phrases (case-insensitive substring match). Default empty — no filtering.
Type:array
Default:
[]
Exclude companies containing
companyExclude
Optional
Drop postings whose company name contains any of these words/phrases (case-insensitive substring match). Default empty — no filtering.
Type:array
Default:
[]
Remote only
remoteOnly
Optional
Keep only postings flagged fully remote by NoFluffJobs. Default off (all workplace types).
Type:boolean
Default:false
With salary only
withSalaryOnly
Optional
Keep only postings that publish a salary range. NoFluffJobs mandates salary transparency, so this is rarely needed, but it drops the occasional listing without a parseable range. Default off.
Type:boolean
Default:false
Only new since last run (incremental)
onlyNewSinceLastRun
Optional
Incremental/delta mode. Emit only postings that are brand-new or have been reposted/renewed since the previous run for the same search — postings seen before and unchanged are skipped. State is persisted in the Actor's key-value store, keyed by the categories/currency/region (or your custom stateName). Combine with skipReposts to get strictly brand-new postings. Default off.
Type:boolean
Default:false
Skip reposts
skipReposts
Optional
Drop postings flagged as reposts (same job re-listed under a new URL slug, or the same listing bumped with a newer posted/renewed date). Repost detection is keyed on the stable (company, title) job identity across runs. Enabling this (or onlyNewSinceLastRun, or setting a stateName) turns on cross-run state tracking and populates the isRepost output field. Default off.
Type:boolean
Default:false
State record name
stateName
Optional
Optional custom name for the key-value-store record that holds cross-run delta/repost state (not a credential — just a record name). Leave empty to derive one automatically from the categories, currency and region. Set an explicit value to share (or isolate) state across different runs/searches. Only used when incremental or repost mode is on. The legacy stateKey input name is still accepted.
Type:string
Default:
Webhook URL
webhookUrl
Optional
Optional. If set, the postings produced this run are POSTed as JSON ({source, count, truncated, items}, items capped at 200) to this URL after the run. Fail-open: a webhook error is logged and never fails the run. Default empty (no webhook).
Type:string
Default:
Telegram bot token
telegramBotToken
Optional
Optional. Bot token used to send a short summary of this run's postings to a Telegram chat (requires telegramChatId). Stored as a secret. Fail-open: a Telegram error is logged and never fails the run. Default empty (no Telegram).
Type:string
Telegram chat ID
telegramChatId
Optional
Optional. Target chat/channel ID for the Telegram summary (used together with telegramBotToken). Default empty.
Type:string
Default:
Cache TTL (seconds)
cacheTtlSeconds
Optional
Cache the upstream fetch in the key-value store for this many seconds; re-runs within the window skip the network call. Set 0 to disable.
Type:integer
Minimum:0
Default:1800
Region (deprecated — ignored)
region
Optional
Reserved for a future NoFluffJobs regional-portal parameter. NoFluffJobs used to run country-specific portals (nofluffjobs.com/pl, /hu, /cz, ...), but the public search API this Actor calls (api/search/posting) currently ignores this query parameter entirely: we verified this by querying with region=pl, hu, cz, sk, ua, nl and even an invalid value, and every request returned an identical result count. All CEE/EU postings (Poland, Czechia, Hungary, Slovakia, Ukraine, Netherlands and more) already come back from one unified search index regardless of this setting, so no value is being missed by leaving it as pl. Kept for backward compatibility and in case NoFluffJobs re-enables real per-region querying.