{
  "openapi": "3.0.1",
  "info": {
    "title": "NoFluffJobs Scraper — Poland & CEE IT Jobs with Salaries",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "hkw7CmcbkJf0EOPnD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nomad-agent~nofluffjobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nomad-agent-nofluffjobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/nomad-agent~nofluffjobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nomad-agent-nofluffjobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/nomad-agent~nofluffjobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nomad-agent-nofluffjobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "categories": {
            "title": "Job categories",
            "type": "array",
            "description": "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). <code>ai-data</code> 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).",
            "items": {
              "type": "string",
              "enum": [
                "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",
                "ai-data"
              ],
              "enumTitles": [
                "Backend",
                "Frontend",
                "Fullstack",
                "Mobile",
                "Embedded",
                "Testing / QA",
                "DevOps",
                "Architecture",
                "Security",
                "Game Dev",
                "Artificial Intelligence",
                "Data",
                "System Administrator",
                "PM (Project/Product)",
                "Agile",
                "Product Management",
                "Project Manager",
                "Business Intelligence",
                "Business Analyst",
                "UX/UI",
                "Support",
                "ERP",
                "Electronics",
                "Telecommunication",
                "Electrical Engineering",
                "Automation",
                "Mechanics",
                "Sales",
                "Marketing",
                "Office Administration",
                "HR",
                "Finance",
                "Consulting",
                "Customer Service",
                "Law",
                "Logistics",
                "Other",
                "AI & Data (legacy alias)"
              ]
            },
            "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"
            ]
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum total number of postings to return across all categories. Set 0 for no limit.",
            "default": 100
          },
          "maxPages": {
            "title": "Max pages per category",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of result pages to fetch per category (each page contains up to 50 postings).",
            "default": 5
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "enum": [
              "EUR",
              "PLN",
              "USD",
              "GBP",
              "CHF",
              "CZK",
              "HUF",
              "UAH"
            ],
            "type": "string",
            "description": "Currency in which salary ranges are returned. NoFluffJobs converts all salaries to this currency.",
            "default": "EUR"
          },
          "postedSince": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "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.",
            "default": 0
          },
          "titleExclude": {
            "title": "Exclude titles containing",
            "type": "array",
            "description": "Drop postings whose title contains any of these words/phrases (case-insensitive substring match). Default empty — no filtering.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyExclude": {
            "title": "Exclude companies containing",
            "type": "array",
            "description": "Drop postings whose company name contains any of these words/phrases (case-insensitive substring match). Default empty — no filtering.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only postings flagged fully remote by NoFluffJobs. Default off (all workplace types).",
            "default": false
          },
          "withSalaryOnly": {
            "title": "With salary only",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "onlyNewSinceLastRun": {
            "title": "Only new since last run (incremental)",
            "type": "boolean",
            "description": "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 <code>stateName</code>). Combine with <code>skipReposts</code> to get strictly brand-new postings. Default off.",
            "default": false
          },
          "skipReposts": {
            "title": "Skip reposts",
            "type": "boolean",
            "description": "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 <code>onlyNewSinceLastRun</code>, or setting a <code>stateName</code>) turns on cross-run state tracking and populates the <code>isRepost</code> output field. Default off.",
            "default": false
          },
          "stateName": {
            "title": "State record name",
            "type": "string",
            "description": "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 <code>stateKey</code> input name is still accepted.",
            "default": ""
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Optional. If set, the postings produced this run are POSTed as JSON (<code>{source, count, truncated, items}</code>, 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).",
            "default": ""
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "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)."
          },
          "telegramChatId": {
            "title": "Telegram chat ID",
            "type": "string",
            "description": "Optional. Target chat/channel ID for the Telegram summary (used together with telegramBotToken). Default empty.",
            "default": ""
          },
          "cacheTtlSeconds": {
            "title": "Cache TTL (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "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.",
            "default": 1800
          },
          "region": {
            "title": "Region (deprecated — ignored)",
            "enum": [
              "pl"
            ],
            "type": "string",
            "description": "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 <code>pl</code>. Kept for backward compatibility and in case NoFluffJobs re-enables real per-region querying.",
            "default": "pl"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}