{
  "openapi": "3.0.1",
  "info": {
    "title": "Fajn-brigady.cz & INwork.cz Scraper ($1.75/1K): Czech Jobs",
    "description": "Scrape temporary jobs (brigády) and job offers from Fajn-brigady.cz and INwork.cz: wage per hour and month, company, town, region, start date, positions, contract type, suitable for students or pensioners. Monitoring of new and removed jobs, market summary. Unofficial.",
    "version": "0.0",
    "x-build-id": "pW36qggUeYQSIWntj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tsutseisoftware~fajn-brigady-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tsutseisoftware-fajn-brigady-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/tsutseisoftware~fajn-brigady-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tsutseisoftware-fajn-brigady-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/tsutseisoftware~fajn-brigady-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tsutseisoftware-fajn-brigady-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": {
          "startUrls": {
            "title": "Listing or job URLs",
            "type": "array",
            "description": "Fajn-brigady.cz or INwork.cz job lists, e.g. https://www.fajn-brigady.cz/brigady/ (all temporary jobs), https://www.fajn-brigady.cz/brigady/brno/, https://www.fajn-brigady.cz/brigady/manualni/ or https://www.inwork.cz/prace/jihomoravsky-kraj/, or individual job URLs. Open the site, pick a category, town or region and copy the URL. An ad listed on both sites is returned once. You can leave this empty and use Locations, Regions, Categories or Search words below instead (or together with it). Pages of \"new jobs\" and the websites' filter pages are not supported; use the actor's filters.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Locations (towns)",
            "type": "array",
            "description": "Towns to read, e.g. Brno, Ostrava, Kuřim. Each town is its list on Fajn-brigady.cz (temporary jobs) and on INwork.cz (regular jobs); \"Job type\" picks one of the websites. A town the website has no list for is reported by name (the run never returns the whole country instead), and the page read for it is charged as an extra page. A town name used in several districts is read on Fajn-brigady.cz only.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Whole regions (kraje): the list of the region on Fajn-brigady.cz and on INwork.cz.",
            "items": {
              "type": "string",
              "enum": [
                "praha",
                "stredocesky-kraj",
                "jihocesky-kraj",
                "plzensky-kraj",
                "karlovarsky-kraj",
                "ustecky-kraj",
                "liberecky-kraj",
                "kralovehradecky-kraj",
                "pardubicky-kraj",
                "kraj-vysocina",
                "jihomoravsky-kraj",
                "olomoucky-kraj",
                "zlinsky-kraj",
                "moravskoslezsky-kraj"
              ],
              "enumTitles": [
                "Praha",
                "Středočeský kraj",
                "Jihočeský kraj",
                "Plzeňský kraj",
                "Karlovarský kraj",
                "Ústecký kraj",
                "Liberecký kraj",
                "Královéhradecký kraj",
                "Pardubický kraj",
                "Kraj Vysočina",
                "Jihomoravský kraj",
                "Olomoucký kraj",
                "Zlínský kraj",
                "Moravskoslezský kraj"
              ]
            }
          },
          "categories": {
            "title": "Categories (Fajn-brigady.cz)",
            "type": "array",
            "description": "Categories of temporary jobs as in the menu of Fajn-brigady.cz, by name or as in the URL: e.g. Skladník, Uklízečka, Prodavač, Číšník servírka, Administrativní pracovník, or a field such as manualni. Alone they are read for the whole country, with Locations or Regions for each of them. INwork.cz has other categories, so it is not read with Categories (paste its list URL if you need it).",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search words",
            "type": "array",
            "description": "Words to search for, e.g. skladník, řidič, Lidl. Alone they use the websites' own search over the whole country (Fajn-brigady.cz: position or company, INwork.cz: title; \"Job type\" picks one website). With Locations, Regions or Categories they keep the jobs of those lists whose title or company contains one of the words (the websites cannot combine a search with a place), and list pages read beyond the saved jobs are charged as extra pages.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs saved. You pay per saved job. 0 = no limit.",
            "default": 200
          },
          "includeDetails": {
            "title": "Include job details",
            "type": "boolean",
            "description": "Open each job page to add the wage, start date, number of positions, contract type, posting date and more. Without it you get only the title, company and city from the listing (and a wage if it's in the title).",
            "default": true
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Add the full job description (contacts removed). Descriptions are written by employers and may be protected by copyright; use them for analysis, not for republishing.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "With \"Include description\": plain text (default), clean HTML (headings, paragraphs, lists, bold, links) or Markdown. Contacts, the name of the person who posted the ad and the name of a private advertiser are removed in every format.",
            "default": "text"
          },
          "maxDescriptionLength": {
            "title": "Description length limit",
            "minimum": 0,
            "type": "integer",
            "description": "Cut the description at about this many characters (whole paragraphs, then \"…\"). 0 = the whole description.",
            "default": 0
          },
          "maxPages": {
            "title": "Max listing pages",
            "minimum": 0,
            "type": "integer",
            "description": "Safety limit for list pages per start URL (40 jobs per page). 0 = no limit. The whole Fajn-brigady.cz list has ~45 pages, a big INwork.cz region ~95.",
            "default": 20
          },
          "keywords": {
            "title": "Title must contain",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words (case and diacritics insensitive), e.g. 'sklad'.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Skip jobs whose title contains any of these words.",
            "items": {
              "type": "string"
            }
          },
          "jobTypes": {
            "title": "Job type",
            "type": "array",
            "description": "INwork.cz lists both regular jobs and temporary jobs; Fajn-brigady.cz only temporary jobs.",
            "items": {
              "type": "string",
              "enum": [
                "brigada",
                "job"
              ],
              "enumTitles": [
                "Temporary job (brigáda)",
                "Regular job"
              ]
            }
          },
          "onlyWithSalary": {
            "title": "Only jobs with a wage",
            "type": "boolean",
            "description": "Skip jobs with a negotiable wage ('Dle domluvy') and no amount in the title.",
            "default": false
          },
          "minHourlySalary": {
            "title": "Min hourly wage (CZK)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose wage (upper bound, converted to hourly at 160 h/month) is at least this. Without job details only wages from the title are known."
          },
          "minMonthlySalary": {
            "title": "Min monthly wage (CZK)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose wage (upper bound, converted to monthly) is at least this."
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days. Needs job details."
          },
          "employmentTypes": {
            "title": "Contract type",
            "type": "array",
            "description": "Keep only jobs with one of these types (INwork.cz). Needs job details.",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "temporary"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Temporary"
              ]
            }
          },
          "suitableFor": {
            "title": "Suitable for",
            "type": "array",
            "description": "Keep only jobs marked as suitable for one of these groups. Needs job details.",
            "items": {
              "type": "string",
              "enum": [
                "graduates",
                "parents",
                "pensioners",
                "disabled",
                "selfEmployed",
                "ukrainianRefugees"
              ],
              "enumTitles": [
                "Graduates",
                "Parents on leave",
                "Pensioners",
                "People with disabilities",
                "Self-employed",
                "Refugees from Ukraine"
              ]
            }
          },
          "jobPositions": {
            "title": "Position must contain",
            "type": "array",
            "description": "Keep only jobs whose position (e.g. 'Skladník', 'Číšník, servírka') contains one of these words. Needs job details.",
            "items": {
              "type": "string"
            }
          },
          "descriptionKeywords": {
            "title": "Title or description must contain",
            "type": "array",
            "description": "Keep only jobs whose title or description contains one of these words (e.g. \"VZV\", \"víkend\", \"home office\"); letter case and diacritics don't matter. The description is read for the filter even when \"Include description\" is off. Needs job details.",
            "items": {
              "type": "string"
            }
          },
          "excludeDescriptionKeywords": {
            "title": "Title or description must not contain",
            "type": "array",
            "description": "Skip jobs whose title or description contains any of these words (e.g. \"noční\", \"živnostenský list\"); letter case and diacritics don't matter. The description is read for the filter even when \"Include description\" is off. Needs job details.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Keep only jobs whose company name contains one of these words.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Skip jobs whose company name contains any of these words.",
            "items": {
              "type": "string"
            }
          },
          "excludeAgencies": {
            "title": "Exclude staffing agencies",
            "type": "boolean",
            "description": "Skip jobs posted by staffing agencies: where the site says so (INwork.cz) or where the company is a well-known staffing agency (Manpower, Randstad, Adecco, Grafton…). Needs job details.",
            "default": false
          },
          "onlyNewOrChanged": {
            "title": "Monitoring: only new or changed jobs",
            "type": "boolean",
            "description": "Return (and pay for) only jobs that are new since the previous run with the same Monitoring key, or whose title, company, city or wage in the list changed. Job pages are downloaded only for those. Unchanged jobs are not charged; every list page read is charged as \"Monitoring: listing page checked\" ($0.0007 per page of up to 40 jobs). Ideal for a daily schedule.",
            "default": false
          },
          "includeRemovedJobs": {
            "title": "Monitoring: include removed jobs",
            "type": "boolean",
            "description": "With \"Monitoring: only new or changed jobs\": also return jobs of the previous run that are no longer in the lists, as rows with changeType \"removed\" (their last known values, lastSeenAt and removedAt). Checked only when the run reads every list completely (Max jobs, Max listing pages, unread pages or rejected requests skip the check, and the status message says why). Use the same start URLs in every run. Removed rows are charged like any other job.",
            "default": false
          },
          "includeUnchangedJobs": {
            "title": "Monitoring: include unchanged jobs",
            "type": "boolean",
            "description": "With \"Monitoring: only new or changed jobs\": also return the jobs that did not change, as rows with changeType \"unchanged\" (charged like any other job, their job pages are read again). One run then gives the whole list with every job marked new, updated or unchanged. Off by default: only the changes are returned and paid.",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring: key",
            "type": "string",
            "description": "Name of the saved state. Use a different key for each set of lists you monitor (e.g. \"brno-sklad\"). Empty = \"default\". The value is stored encrypted."
          },
          "compact": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Keep only the core fields of every row: id, title, company, town, region, district, job type, category, position, wage (text, numbers, hourly and monthly), start, positions, contract type, suitable for, posting date, link and the monitoring fields (and the description when you ask for it).",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Leave out empty fields",
            "type": "boolean",
            "description": "Drop fields that are null or an empty list from every row (id, source, url, title and scrapedAt always stay).",
            "default": false
          },
          "slackWebhookUrl": {
            "title": "Notifications: Slack webhook URL",
            "type": "string",
            "description": "Incoming webhook of your Slack channel (https://hooks.slack.com/services/...). Stored encrypted."
          },
          "discordWebhookUrl": {
            "title": "Notifications: Discord webhook URL",
            "type": "string",
            "description": "Webhook of your Discord channel (https://discord.com/api/webhooks/...). Stored encrypted."
          },
          "telegramBotToken": {
            "title": "Notifications: Telegram bot token",
            "type": "string",
            "description": "Token of your Telegram bot (from @BotFather). Used with \"Telegram chat ID\". Stored encrypted."
          },
          "telegramChatId": {
            "title": "Notifications: Telegram chat ID",
            "type": "string",
            "description": "Chat, group or channel ID the bot writes to (e.g. -1001234567890)."
          },
          "webhookUrl": {
            "title": "Notifications: webhook URL",
            "type": "string",
            "description": "Any HTTPS URL (Zapier, Make, n8n, your server): gets a POST with JSON {title, summary, totalSaved, runUrl, datasetUrl, items}."
          },
          "notificationLimit": {
            "title": "Notifications: max jobs per message",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many jobs are listed in one notification (the rest as \"…and N more\").",
            "default": 10
          },
          "notifyOnlyChanges": {
            "title": "Notifications: only when something was saved",
            "type": "boolean",
            "description": "Send nothing when the run saved no job (e.g. a monitoring run without new jobs).",
            "default": true
          },
          "fastMode": {
            "title": "Fast mode (small extra charge)",
            "type": "boolean",
            "description": "Reads with up to 5 requests at a time and 120 per minute instead of 3 and 60, which helps most with job pages (\"Include job details\"). It stays polite: the moment a website answers \"too many requests\", shows a challenge or slows down, the run switches back to the normal speed for the rest of the run, and it never changes IP address to get around a limit. Extra charge \"Fast mode\" (see the Pricing tab) only for jobs saved while the fast speed was on.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Both websites are behind Cloudflare and reject requests from data-center IP addresses, so the default is Apify Proxy with residential IPs in the Czech Republic (included in the price). You can also use your own proxies.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "CZ"
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}