# No Fluff Jobs Scraper (`solidcode/nofluffjobs-scraper`) Actor

\[💰 $0.75 / 1K] Extract IT and tech job listings from No Fluff Jobs across 6 European countries. Search by keyword and filter by category, seniority, employment type, city, salary, and remote work to get structured jobs with salary ranges, tech stack, company, and apply links.

- **URL**: https://apify.com/solidcode/nofluffjobs-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## No Fluff Jobs Scraper

Pull IT and tech job listings from No Fluff Jobs at scale — full salary ranges, complete tech stacks, seniority, company, location, and apply links for every posting across six European country editions. Every record arrives as one clean, flat row with parsed salary min/max and a single currency, ready to drop into a spreadsheet or BI tool. Built for tech recruiters, salary-benchmarking analysts, and developer-tooling teams who need structured European IT-job data without hand-crafting search URLs or copy-pasting from job cards one at a time.

### Why This Scraper?

- **Six country editions in one actor** — Poland, Czech Republic, Slovakia, Hungary, Ukraine, and the Netherlands, switched with a single dropdown. No separate runs, no juggling locale URLs.
- **17 IT job categories** — Backend, Frontend, Fullstack, Mobile, DevOps, Testing/QA, Data, AI/Machine Learning, Security, UX, Architecture, Embedded, System Administrator, Support, Business Analyst, Business Intelligence, and Project Manager.
- **Parsed salary on every job** — No Fluff Jobs mandates transparent pay, so each row carries `salaryMin` and `salaryMax` as real numbers (plus `salaryCurrency` and `salaryPeriod`), not a string you have to clean.
- **7-currency salary normalization** — read every salary in PLN, EUR, USD, GBP, CZK, HUF, or UAH; the actor converts the numbers so cross-border comparisons line up.
- **Full tech stack, split by importance** — `mustHaveSkills` and `niceToHaveSkills` arrays plus a `primaryTech` tag, so you can filter candidates or market reports on the exact technologies that matter.
- **Five seniority levels and two contract types** — Trainee, Junior, Mid, Senior, and Expert, crossed with B2B / Contract or Permanent / Employment.
- **Keyword search with structured filters, no URL building** — type "react" or "devops", pick a category, seniority, city, and remote toggle; the actor does the searching. Or paste a No Fluff Jobs URL to clone a search you already dialed in.
- **Cross-region deduplication by listing reference** — the same job often appears under several regions; you get it once, with a `reference` key so you can verify it yourself.
- **Remote level 0–5 plus a fully-remote flag** — `remoteLevel` and `isRemote` on every posting, so "remote-friendly" and "fully remote" are never conflated.

### Use Cases

**Recruitment & Sourcing**
- Build candidate-outreach lists by category, seniority, and required tech stack
- Track which companies are hiring for a given role across multiple countries
- Pull `applyUrl` and company details to feed an ATS or sourcing pipeline
- Monitor newly posted roles daily using `postedDate` and `daysAgo`

**Salary Benchmarking**
- Compare pay ranges for the same role across Poland, Czechia, and Hungary
- Normalize every offer to one currency for apples-to-apples reporting
- Benchmark B2B contract rates against permanent-employment salaries
- Map salary by seniority level for a single technology

**Market & Talent Intelligence**
- Track demand for specific technologies through `mustHaveSkills` frequency
- Measure remote-work supply by country using `remoteLevel` and `isRemote`
- Watch hiring volume by category as a leading indicator of tech-sector trends
- Identify which cities concentrate the most openings for a given stack

**Lead Generation**
- Build lists of companies actively hiring for tools you sell into
- Capture company name and size band for B2B prospecting
- Target firms hiring DevOps or Security roles for infrastructure vendors
- Segment outreach by employment type and team size

**Data Enrichment & Integration**
- Feed live job data into talent dashboards and market reports
- Power salary calculators and compensation tools
- Enrich a CRM with hiring-activity signals per company
- Build alerting for new postings matching a saved search

### Getting Started

#### Simple keyword search

Just a keyword and a country edition:

```json
{
    "searchQueries": ["python"],
    "country": "pl"
}
````

#### Filtered search

The most useful combination — role, category, seniority, and remote only:

```json
{
    "searchQueries": ["react"],
    "country": "cz",
    "category": "frontend",
    "seniority": "senior",
    "remoteOnly": true,
    "maxResultsPerQuery": 200
}
```

#### Advanced run

Most options set — multi-keyword, salary normalized to euros, salary-disclosed only, lighter records:

```json
{
    "searchQueries": ["devops", "platform engineer"],
    "country": "pl",
    "category": "devops",
    "seniority": "mid",
    "employmentType": "b2b",
    "location": "Warsaw",
    "salaryCurrency": "EUR",
    "withSalaryOnly": true,
    "maxResultsPerQuery": 500,
    "includeDescription": false
}
```

#### From a No Fluff Jobs URL

Paste a search, category, or individual job URL to scrape it directly:

```json
{
    "startUrls": [
        "https://nofluffjobs.com/jobs/backend",
        "https://nofluffjobs.com/pl/job/senior-backend-engineer-acme-warszawa"
    ],
    "maxResultsPerQuery": 100
}
```

### Input Reference

#### What to Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | `["python"]` | Job titles, roles, or technologies to search for. A multi-word phrase like `data engineer` is matched as one phrase. Each keyword runs a separate search. Leave empty for the broadest result set. Up to 50 keywords per run. |
| `startUrls` | string\[] | `[]` | Paste full No Fluff Jobs search, category, or individual job URLs to scrape directly. Takes priority over the keyword search. Up to 50 URLs per run. |
| `country` | select | `Poland` | Country edition to search: Poland, Netherlands, Czech Republic, Slovakia, Hungary, or Ukraine. Sets the site locale and the jobs shown. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `category` | select | `Any category` | One IT job category — Backend, Frontend, Fullstack, Mobile, DevOps, Testing / QA, Data, AI / Machine Learning, Security, UX, Architecture, Embedded, System Administrator, Support / Helpdesk, Business Analyst, Business Intelligence, or Project Manager. |
| `seniority` | select | `Any level` | One experience level: Trainee, Junior, Mid, Senior, or Expert. |
| `employmentType` | select | `Any` | Contract type: B2B / Contract or Permanent / Employment. |
| `location` | string | `""` | City to search in, such as "Warsaw", "Kraków", or "Wrocław". Empty searches anywhere in the country. |
| `remoteOnly` | boolean | `false` | Only return jobs that can be done fully remotely. |
| `withSalaryOnly` | boolean | `false` | Only return jobs that disclose a salary range. |
| `salaryCurrency` | select | `Any currency` | Read salaries in one currency: Polish Złoty, Euro, US Dollar, British Pound, Czech Koruna, Hungarian Forint, or Ukrainian Hryvnia. Converts the numbers. |

#### Limits & Output

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResultsPerQuery` | integer | `100` | Maximum job listings per keyword or start URL. Set to 0 for all available results. The whole final page is always kept, so a small cap may return slightly more; deduplication may bring it slightly under. |
| `onlyUniqueJobs` | boolean | `true` | Return each job once even when No Fluff Jobs lists it under several regions. Turn off to keep every regional copy. |
| `includeDescription` | boolean | `true` | Include the full job description (text and HTML). Turn off for lighter, faster records when you only need titles, companies, salaries, and tech stack. |

### Output

Each job posting is one flat row. Here's a representative result:

```json
{
    "jobId": "senior-backend-engineer-acme-warszawa",
    "reference": "ACME-BE-2026-0042",
    "title": "Senior Backend Engineer",
    "company": "Acme Software",
    "companyLogoUrl": "https://static.nofluffjobs.com/companies/logos/acme.png",
    "companySize": "100-249",
    "category": "Backend",
    "seniority": ["Senior"],
    "primaryTech": "Java",
    "techStack": ["Java", "Spring", "PostgreSQL", "Kafka", "AWS"],
    "mustHaveSkills": ["Java", "Spring", "PostgreSQL"],
    "niceToHaveSkills": ["Kafka", "AWS"],
    "languages": ["English", "Polish"],
    "location": "Warsaw, Poland",
    "cities": ["Warsaw"],
    "countries": ["PL"],
    "remoteLevel": 4,
    "isRemote": false,
    "employmentType": "b2b",
    "salary": "20 000 - 26 000 PLN / month",
    "salaryMin": 20000,
    "salaryMax": 26000,
    "salaryCurrency": "PLN",
    "salaryPeriod": "Month",
    "benefits": ["Private healthcare", "Sport card", "Training budget"],
    "description": "We are looking for a Senior Backend Engineer to join...",
    "descriptionHtml": "<p>We are looking for a Senior Backend Engineer to join...</p>",
    "postedDate": "2026-05-21T08:00:00Z",
    "daysAgo": 11,
    "status": "PUBLISHED",
    "applyUrl": "https://nofluffjobs.com/pl/job/senior-backend-engineer-acme-warszawa/apply",
    "postingUrl": "https://nofluffjobs.com/pl/job/senior-backend-engineer-acme-warszawa",
    "country": "PL",
    "searchQuery": "python developer",
    "scrapedAt": "2026-06-01T14:30:00Z"
}
```

#### Job & Company

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | string | No Fluff Jobs posting identifier |
| `reference` | string | Cross-region deduplication key |
| `title` | string | Job title |
| `company` | string | Hiring company name |
| `companyLogoUrl` | string | Company logo URL |
| `companySize` | string | Company size band (e.g. "100-249") |
| `category` | string | Job category (Backend, Frontend, ...) |
| `status` | string | Listing status |

#### Role & Skills

| Field | Type | Description |
|-------|------|-------------|
| `seniority` | string\[] | Seniority level(s) |
| `primaryTech` | string | Primary technology |
| `techStack` | string\[] | All must-have and nice-to-have skills |
| `mustHaveSkills` | string\[] | Required skills |
| `niceToHaveSkills` | string\[] | Optional skills |
| `languages` | string\[] | Required spoken languages |
| `employmentType` | string | Contract type, e.g. `b2b` or `permanent` |

#### Location & Remote

| Field | Type | Description |
|-------|------|-------------|
| `location` | string | Display location |
| `cities` | string\[] | City names |
| `countries` | string\[] | Country codes |
| `remoteLevel` | integer | Remote scale 0–5 (5 = fully remote) |
| `isRemote` | boolean | Fully-remote flag |
| `country` | string | Country edition searched (PL, CZ, ...) |

#### Salary

| Field | Type | Description |
|-------|------|-------------|
| `salary` | string | Salary range as displayed |
| `salaryMin` | number | Parsed minimum |
| `salaryMax` | number | Parsed maximum |
| `salaryCurrency` | string | PLN, EUR, USD, GBP, CZK, HUF, or UAH |
| `salaryPeriod` | string | Pay period, e.g. `Month` or `Hour` |
| `benefits` | string\[] | Listed benefits and perks |

#### Description, Dates & Links

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Full job description (plain text) |
| `descriptionHtml` | string | Full job description (HTML) |
| `postedDate` | string | ISO 8601 posting date |
| `daysAgo` | integer | Days since posted |
| `applyUrl` | string | Application URL |
| `postingUrl` | string | Canonical job URL |
| `searchQuery` | string | Keyword that produced this row |
| `scrapedAt` | string | ISO 8601 timestamp of extraction |

### Tips for Best Results

- **Start small to test** — set `maxResultsPerQuery` to 10–50 on your first run to confirm the data fits your needs, then scale up.
- **Pick the right country edition** — Poland, Czechia, Slovakia, Hungary, and Ukraine are all active; the Netherlands edition currently carries no live postings, so use one of the other five unless you specifically want to watch the NL market.
- **Normalize salaries when comparing across borders** — set `salaryCurrency` to EUR (or your reporting currency) and every range comes back converted, so a Polish and a Czech offer sit on the same scale.
- **Use exact technology keywords for clean results** — a recognized tech token (like "python" or "kubernetes") resolves to a precise skill match, while an unmatched phrase returns zero rather than a flood of unrelated jobs.
- **Clone a search from the website** — dial in filters on No Fluff Jobs, copy the URL, and paste it into `startUrls` to reproduce that exact result set.
- **Turn off descriptions for faster scans** — set `includeDescription` to false when you only need titles, companies, salaries, and tech stack; flip it on when you need the full posting text.
- **Keep deduplication on for counting** — `onlyUniqueJobs` returns one row per posting even though listings repeat across regions, so your totals reflect real openings rather than regional copies.

### Pricing

**From $0.75 per 1,000 results** — pay-per-result, among the most affordable structured job-data feeds for the European tech market. No compute charges — you only pay per result returned. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.09 | $0.085 | $0.08 | $0.075 |
| 1,000 | $0.90 | $0.85 | $0.80 | $0.75 |
| 10,000 | $9.00 | $8.50 | $8.00 | $7.50 |
| 100,000 | $90.00 | $85.00 | $80.00 | $75.00 |

A "result" is any job row in the output dataset. There are no separate compute charges — the per-result price shown above is all you pay.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment research, salary benchmarking, and labor-market analysis. Job postings on No Fluff Jobs are published by employers for candidate discovery. Users are responsible for complying with applicable laws and No Fluff Jobs' Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data in line with GDPR and other applicable regulations.

# Actor input Schema

## `searchQueries` (type: `array`):

Job titles, roles, or technologies to search for, such as 'python', 'react', or 'data engineer'. A multi-word phrase like 'data engineer' is matched as one phrase. Each keyword runs a separate search. Leave empty to collect the broadest result set for the chosen country and filters. Up to 50 keywords per run.

## `startUrls` (type: `array`):

Paste full No Fluff Jobs search-result, category, or individual job URLs (e.g. https://nofluffjobs.com/jobs/backend) to scrape them directly. Useful when you already have a search dialed in on the website. When set, this takes priority over the keyword search above. Up to 50 URLs per run.

## `country` (type: `string`):

Which country edition of No Fluff Jobs to search. This sets the site locale and the jobs shown. Pick the country you want jobs in.

## `category` (type: `string`):

Limit results to one IT job category. Leave on 'Any' to include all categories.

## `seniority` (type: `string`):

Limit results to one experience level. Leave on 'Any' to include all levels.

## `employmentType` (type: `string`):

Filter by contract type. Pick one or leave on 'Any' for all types.

## `location` (type: `string`):

City to search in, such as 'Warsaw', 'Kraków', or 'Wrocław'. Leave empty to search anywhere in the selected country (including remote).

## `remoteOnly` (type: `boolean`):

Only show jobs that can be done fully remotely.

## `withSalaryOnly` (type: `boolean`):

Only show jobs that disclose a salary range.

## `salaryCurrency` (type: `string`):

Limit results to jobs advertised in one currency. Leave on 'Any' to include all currencies.

## `maxResultsPerQuery` (type: `integer`):

Maximum number of job listings to collect per search keyword (or per start URL). Set to 0 to collect all available results across pagination. Results are fetched in pages: the actor stops once your cap is reached but always keeps the whole final page, so a small cap can return up to a full page more than you asked for. Listings repeated across pages or regions are deduplicated, so the final count can also run slightly below your cap.

## `onlyUniqueJobs` (type: `boolean`):

When on, each job is returned once even if No Fluff Jobs lists it under several regions or URLs. Deduplicates by the listing's reference. Turn off to keep every regional copy.

## `includeDescription` (type: `boolean`):

Include the full job description text and HTML for each listing. Leave on for the most complete data. Turn off for lighter, faster records when you only need titles, companies, salaries, and tech stack.

## Actor input object example

```json
{
  "searchQueries": [
    "python"
  ],
  "startUrls": [],
  "country": "pl",
  "category": "",
  "seniority": "",
  "employmentType": "",
  "remoteOnly": false,
  "withSalaryOnly": false,
  "salaryCurrency": "",
  "maxResultsPerQuery": 100,
  "onlyUniqueJobs": true,
  "includeDescription": true
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped job listings with key fields.

## `detail` (type: `string`):

Complete job data including descriptions, parsed salary fields, tech stack, requirements, benefits, and metadata.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "python"
    ],
    "startUrls": [],
    "country": "pl",
    "category": "",
    "seniority": "",
    "employmentType": "",
    "location": "",
    "remoteOnly": false,
    "withSalaryOnly": false,
    "salaryCurrency": "",
    "maxResultsPerQuery": 100,
    "onlyUniqueJobs": true,
    "includeDescription": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/nofluffjobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["python"],
    "startUrls": [],
    "country": "pl",
    "category": "",
    "seniority": "",
    "employmentType": "",
    "location": "",
    "remoteOnly": False,
    "withSalaryOnly": False,
    "salaryCurrency": "",
    "maxResultsPerQuery": 100,
    "onlyUniqueJobs": True,
    "includeDescription": True,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/nofluffjobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "python"
  ],
  "startUrls": [],
  "country": "pl",
  "category": "",
  "seniority": "",
  "employmentType": "",
  "location": "",
  "remoteOnly": false,
  "withSalaryOnly": false,
  "salaryCurrency": "",
  "maxResultsPerQuery": 100,
  "onlyUniqueJobs": true,
  "includeDescription": true
}' |
apify call solidcode/nofluffjobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/nofluffjobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "No Fluff Jobs Scraper",
        "description": "[💰 $0.75 / 1K] Extract IT and tech job listings from No Fluff Jobs across 6 European countries. Search by keyword and filter by category, seniority, employment type, city, salary, and remote work to get structured jobs with salary ranges, tech stack, company, and apply links.",
        "version": "1.0",
        "x-build-id": "Qn2rxpVhhp2e3QO3C"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~nofluffjobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-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/solidcode~nofluffjobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-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/solidcode~nofluffjobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-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": {
                    "searchQueries": {
                        "title": "Search Keywords",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Job titles, roles, or technologies to search for, such as 'python', 'react', or 'data engineer'. A multi-word phrase like 'data engineer' is matched as one phrase. Each keyword runs a separate search. Leave empty to collect the broadest result set for the chosen country and filters. Up to 50 keywords per run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Direct No Fluff Jobs URLs",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Paste full No Fluff Jobs search-result, category, or individual job URLs (e.g. https://nofluffjobs.com/jobs/backend) to scrape them directly. Useful when you already have a search dialed in on the website. When set, this takes priority over the keyword search above. Up to 50 URLs per run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "country": {
                        "title": "Country / Site Edition",
                        "enum": [
                            "pl",
                            "nl",
                            "cz",
                            "sk",
                            "hu",
                            "ua"
                        ],
                        "type": "string",
                        "description": "Which country edition of No Fluff Jobs to search. This sets the site locale and the jobs shown. Pick the country you want jobs in.",
                        "default": "pl"
                    },
                    "category": {
                        "title": "Job Category",
                        "enum": [
                            "",
                            "backend",
                            "frontend",
                            "fullstack",
                            "mobile",
                            "devops",
                            "testing",
                            "data",
                            "ai",
                            "security",
                            "ux",
                            "architecture",
                            "embedded",
                            "sys-administrator",
                            "support",
                            "business-analyst",
                            "business-intelligence",
                            "project-manager"
                        ],
                        "type": "string",
                        "description": "Limit results to one IT job category. Leave on 'Any' to include all categories.",
                        "default": ""
                    },
                    "seniority": {
                        "title": "Seniority Level",
                        "enum": [
                            "",
                            "trainee",
                            "junior",
                            "mid",
                            "senior",
                            "expert"
                        ],
                        "type": "string",
                        "description": "Limit results to one experience level. Leave on 'Any' to include all levels.",
                        "default": ""
                    },
                    "employmentType": {
                        "title": "Employment Type",
                        "enum": [
                            "",
                            "b2b",
                            "permanent"
                        ],
                        "type": "string",
                        "description": "Filter by contract type. Pick one or leave on 'Any' for all types.",
                        "default": ""
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City to search in, such as 'Warsaw', 'Kraków', or 'Wrocław'. Leave empty to search anywhere in the selected country (including remote)."
                    },
                    "remoteOnly": {
                        "title": "Remote Only",
                        "type": "boolean",
                        "description": "Only show jobs that can be done fully remotely.",
                        "default": false
                    },
                    "withSalaryOnly": {
                        "title": "With Salary Only",
                        "type": "boolean",
                        "description": "Only show jobs that disclose a salary range.",
                        "default": false
                    },
                    "salaryCurrency": {
                        "title": "Salary Currency",
                        "enum": [
                            "",
                            "PLN",
                            "EUR",
                            "USD",
                            "GBP",
                            "CZK",
                            "HUF",
                            "UAH"
                        ],
                        "type": "string",
                        "description": "Limit results to jobs advertised in one currency. Leave on 'Any' to include all currencies.",
                        "default": ""
                    },
                    "maxResultsPerQuery": {
                        "title": "Max Results per Query",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of job listings to collect per search keyword (or per start URL). Set to 0 to collect all available results across pagination. Results are fetched in pages: the actor stops once your cap is reached but always keeps the whole final page, so a small cap can return up to a full page more than you asked for. Listings repeated across pages or regions are deduplicated, so the final count can also run slightly below your cap.",
                        "default": 100
                    },
                    "onlyUniqueJobs": {
                        "title": "Only Unique Jobs",
                        "type": "boolean",
                        "description": "When on, each job is returned once even if No Fluff Jobs lists it under several regions or URLs. Deduplicates by the listing's reference. Turn off to keep every regional copy.",
                        "default": true
                    },
                    "includeDescription": {
                        "title": "Fetch Full Job Descriptions",
                        "type": "boolean",
                        "description": "Include the full job description text and HTML for each listing. Leave on for the most complete data. Turn off for lighter, faster records when you only need titles, companies, salaries, and tech stack.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
