{
  "openapi": "3.0.1",
  "info": {
    "title": "Personio Jobs Scraper: Job Listings, Salaries, Departments",
    "description": "Job ads from any company's Personio careers feed: title, department, office, employment type, schedule, seniority, salary when published, keywords and the full description in the language you choose. Add company names or links, filter by office, department or date, pay per job. No personal data.",
    "version": "1.2",
    "x-build-id": "enbjDKmBUE2vDkgk7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowcraft~personio-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowcraft-personio-jobs-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/rowcraft~personio-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rowcraft-personio-jobs-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/rowcraft~personio-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rowcraft-personio-jobs-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": {
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Personio career pages: the name in the address (\"stark\" for stark.jobs.personio.de), the address itself (.de or .com), or any job link from it. One per line. Leave it empty when you pick a ready-made list below.",
            "items": {
              "type": "string"
            }
          },
          "lists": {
            "title": "Ready-made company lists",
            "type": "array",
            "description": "Personio companies we found on the public job feeds, refreshed with every release (by country of their open jobs, remote jobs, or every Personio company we know). Combine with the filters below to search across all of them in one run.",
            "items": {
              "type": "string",
              "enum": [
                "europe",
                "united-kingdom",
                "germany",
                "dach",
                "remote",
                "all-personio"
              ],
              "enumTitles": [
                "Europe (33 companies)",
                "United Kingdom (7 companies)",
                "Germany (24 companies)",
                "DACH (24 companies)",
                "Remote jobs (22 companies)",
                "Every Personio company we know (45 companies)"
              ]
            }
          },
          "language": {
            "title": "Description language",
            "enum": [
              "auto",
              "de",
              "en",
              "es",
              "fr",
              "it",
              "nl",
              "pt",
              "pl"
            ],
            "type": "string",
            "description": "The language you want the ad texts in. Personio sends German unless asked otherwise, and an ad the employer did not write in that language comes without text. Automatic (default) tries German first, then the other languages, until every ad has its text.",
            "default": "auto"
          },
          "languageFallback": {
            "title": "Use another language when an ad has no text in yours",
            "type": "boolean",
            "description": "On (default): an ad not written in your language comes in the language the employer wrote it in (the row's language field says which). Off: only your language; other ads come without text. Each extra language is one more request per company, made only when ads are still missing text.",
            "default": true
          },
          "includeDescription": {
            "title": "Include ad texts",
            "type": "boolean",
            "description": "The full description, as sections (title + text) and as one text. Off: only the structured fields, one request per company.",
            "default": true
          },
          "includeHtmlDescription": {
            "title": "Also include the HTML description",
            "type": "boolean",
            "description": "The description as HTML, with headings, for display on a website.",
            "default": false
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep jobs whose title or keywords contain any of these words, e.g. \"engineer\", \"Vertrieb\".",
            "items": {
              "type": "string"
            }
          },
          "keywordsInDescription": {
            "title": "Also search keywords in the description",
            "type": "boolean",
            "description": "Match keywords in the ad text as well as in the title.",
            "default": false
          },
          "offices": {
            "title": "Offices",
            "type": "array",
            "description": "Keep jobs in any of these offices (cities or sites as the company names them), e.g. \"Berlin\", \"Remote\".",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Keep jobs whose department contains any of these words.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only these employment types.",
            "items": {
              "type": "string",
              "enum": [
                "permanent",
                "fixed_term",
                "temporary",
                "intern",
                "trainee",
                "working_student",
                "freelance"
              ],
              "enumTitles": [
                "Permanent",
                "Fixed term",
                "Temporary",
                "Internship",
                "Trainee / apprenticeship",
                "Working student",
                "Freelance"
              ]
            }
          },
          "schedules": {
            "title": "Schedules",
            "type": "array",
            "description": "Keep only these schedules.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "full-or-part-time"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Full- or part-time"
              ]
            }
          },
          "seniorities": {
            "title": "Seniority",
            "type": "array",
            "description": "Keep only these seniority levels.",
            "items": {
              "type": "string",
              "enum": [
                "student",
                "entry-level",
                "experienced",
                "executive"
              ],
              "enumTitles": [
                "Student",
                "Entry level",
                "Experienced",
                "Executive"
              ]
            }
          },
          "withSalaryOnly": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Keep only jobs where the employer publishes a salary range.",
            "default": false
          },
          "postedAfter": {
            "title": "Created on or after",
            "type": "string",
            "description": "YYYY-MM-DD, or relative: \"today\", \"yesterday\", \"7 days\", \"2 weeks\"."
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many jobs in total. 0 = no limit.",
            "default": 1000
          },
          "maxItemsPerCompany": {
            "title": "Maximum jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no limit. The newest jobs of each company come first.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only new rows since the last run",
            "type": "boolean",
            "description": "Remember the rows already delivered to you (in a key-value store in your Apify account) and deliver only rows that appeared since the last run with the same state key. The first run delivers everything that matches; later runs cost only the new rows. Ideal for schedules.",
            "default": false
          },
          "stateName": {
            "title": "State name",
            "type": "string",
            "description": "Name of the memory used by \"Only new rows\". Use a different name for each schedule or search (for example `stockholm-python`) so they do not share one memory.",
            "default": "default"
          },
          "notifyUrl": {
            "title": "Notify this URL when the run ends",
            "type": "string",
            "description": "A webhook address that receives one JSON POST with the number of new rows and links to the dataset: a Slack or Discord incoming webhook, a Make, n8n or Zapier catch hook, or your own endpoint. The message is also in the `text` (Slack) and `content` (Discord) fields."
          },
          "notifyWhenEmpty": {
            "title": "Notify also when there are no new rows",
            "type": "boolean",
            "description": "By default the notification is sent only when at least one row was delivered.",
            "default": false
          },
          "requestIntervalMs": {
            "title": "Pause between requests (ms)",
            "minimum": 250,
            "maximum": 10000,
            "type": "integer",
            "description": "One request per second by default. Minimum 250.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}