{
  "openapi": "3.0.1",
  "info": {
    "title": "solid.jobs Polish IT Jobs Scraper: Poland, Salary in PLN",
    "description": "IT job offers from solid.jobs, Poland. Salaries converted to PLN per month, contract tagged UoP or B2B. Filter by keyword, city, level, contract, remote and minimum salary. Only-new mode for scheduled alerts. Optional AI fit score. Pay per job after filters.",
    "version": "0.1",
    "x-build-id": "zeFTEV4zR3KNaqLej"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidfetch~poland-it-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidfetch-poland-it-jobs",
        "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/solidfetch~poland-it-jobs/runs": {
      "post": {
        "operationId": "runs-sync-solidfetch-poland-it-jobs",
        "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/solidfetch~poland-it-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-solidfetch-poland-it-jobs",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "jobs",
              "salaryReport"
            ],
            "type": "string",
            "description": "\"Job list\" saves one row per job offer (pay per job). \"Salary report\" reads the same offers with the same filters and saves one row per group instead, for example per technology and experience level: offer counts and PLN and EUR monthly salary percentiles, B2B (net) and UoP (gross) kept apart. Report rows are free until 4 November 2026 and charged per row from then on (see Pricing); the offers read for a report are not charged as jobs. Fields \"Max items\", \"Sort by\" and \"Include description\" are ignored in report mode: it reads every offer that passes the filters.",
            "default": "jobs"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "A job matches when its title or skills contain any of these words (OR). Spelling variants count as one: front-end and frontend, React.js and React, C# and csharp. Empty means all IT jobs.",
            "items": {
              "type": "string"
            }
          },
          "keywordsIn": {
            "title": "Match keywords in",
            "enum": [
              "titleAndSkills",
              "title",
              "everything"
            ],
            "type": "string",
            "description": "Where keywords must appear. \"Everything\" also searches the description.",
            "default": "titleAndSkills"
          },
          "excludeKeywords": {
            "title": "Exclude titles with",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words, for example Senior, Lead, Java.",
            "items": {
              "type": "string"
            }
          },
          "experienceLevels": {
            "title": "Experience levels",
            "type": "array",
            "description": "Keep jobs at any of these levels. Empty means all levels.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "lead"
              ],
              "enumTitles": [
                "Intern / trainee",
                "Junior",
                "Mid / regular",
                "Senior",
                "Lead / expert / manager"
              ]
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Keep jobs in these solid.jobs categories or specialisations, for example Developer, DevOps, DataScience, Tester, Analyst, Architect, ItManager, UXUIDesigner, Security, Support, or React, Java, Python, DotNet, Angular. Case and spaces do not matter. Each job shows its own category and subCategory. Empty means all.",
            "items": {
              "type": "string"
            }
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Polish or English names work: Warszawa or Warsaw, Kraków, Krakow or Cracow, Trójmiasto. Fully remote jobs always pass this filter; turn on \"Remote only\" to get just those.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only fully remote jobs. Hybrid jobs are dropped.",
            "default": false
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "UoP is an employment contract (umowa o pracę), B2B is a contract with your own company, other covers umowa zlecenie, o dzieło and internships. Jobs whose contract is not stated are dropped when you pick any.",
            "items": {
              "type": "string",
              "enum": [
                "UoP",
                "B2B",
                "other"
              ],
              "enumTitles": [
                "UoP (employment)",
                "B2B",
                "Other (zlecenie, o dzieło, internship)"
              ]
            }
          },
          "minSalaryPln": {
            "title": "Minimum salary (PLN per month)",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep jobs whose top of the salary range, for the chosen contract types, is at least this much per month in PLN. Hourly rates count 168 hours a month; other currencies use the National Bank of Poland rate. Jobs without a salary are dropped. B2B is usually net, UoP gross."
          },
          "withSalaryOnly": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Drop jobs that state no salary. Setting a minimum salary already does this.",
            "default": false
          },
          "publishedWithinDays": {
            "title": "Published in the last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep jobs published or refreshed by the board within this many days."
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Company names to skip, for example the ones you already applied to. Legal suffixes like sp. z o.o. do not matter.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after saving this many jobs. Newest jobs come first.",
            "default": 100
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "newest",
              "salary"
            ],
            "type": "string",
            "description": "Newest first (default), or best paid first by the top of the salary range in PLN per month. Best paid first reads every offer of the board before it picks the top ones, about four requests, so the run takes a few seconds longer.",
            "default": "newest"
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Add the job description (plain text, up to 6,000 characters). Turn off for smaller results.",
            "default": true
          },
          "onlyNewSinceLastRun": {
            "title": "Only new or changed since the last run",
            "type": "boolean",
            "description": "For scheduled runs: save only jobs this search has not returned before, or whose title, salary or contract changed. Unchanged jobs are skipped and not charged.",
            "default": false
          },
          "monitorName": {
            "title": "State name",
            "type": "string",
            "description": "Optional name for the memory of earlier runs. By default each different search keeps its own. Letters, digits and !-_.'() only."
          },
          "profile": {
            "title": "Your profile (turns on the AI fit score)",
            "type": "string",
            "description": "A few lines about the candidate: years of experience, stack, level, wanted salary and contract, city or remote, deal-breakers. Each job that passes the filters gets a 0-100 fit score, a verdict and short reasons. Up to 4,000 characters."
          },
          "llmProvider": {
            "title": "Your AI provider",
            "enum": [
              "anthropic",
              "openai",
              "gemini"
            ],
            "type": "string",
            "description": "Only if you bring your own key. Cheapest model of each: Claude Haiku, GPT-5 nano, Gemini Flash-Lite."
          },
          "llmApiKey": {
            "title": "Your API key",
            "type": "string",
            "description": "Needed for the AI fit score. Used only to call your provider during this run; it is stored encrypted by Apify and never written to the log or the results."
          },
          "maxAiScores": {
            "title": "Max AI scores per run",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Jobs after this many are saved without a score.",
            "default": 200
          },
          "groupBy": {
            "title": "Group salary report by",
            "type": "array",
            "description": "Salary report only. One row per combination of these keys. Technology is a required skill of the offer (an offer counts in each of its skills), city is any city of the offer, level is the experience level, contract is UoP, B2B or other, category is the solid.jobs category. Offers without a value for a chosen key are left out. Empty means technology and experience level.",
            "items": {
              "type": "string",
              "enum": [
                "technology",
                "city",
                "experienceLevel",
                "contractType",
                "category"
              ],
              "enumTitles": [
                "Technology (required skill)",
                "City",
                "Experience level",
                "Contract type",
                "Category"
              ]
            }
          },
          "minOffers": {
            "title": "Minimum offers per group",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Salary report only. Groups with fewer offers are left out and counted in the run summary. Empty means 3."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}