{
  "openapi": "3.0.1",
  "info": {
    "title": "Absolventa Germany Graduate Jobs Scraper",
    "description": "German graduate and young-professional jobs from Absolventa (absolventa.de): title, employer, city, salary when shown, permanent/internship/working student/trainee, home office, posted date. Keyword, city and field filters. No personal data. Unofficial; not affiliated with Absolventa.",
    "version": "0.1",
    "x-build-id": "d8H4wFX500fLxgYIm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jpopendata~germany-jobs-absolventa/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jpopendata-germany-jobs-absolventa",
        "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/jpopendata~germany-jobs-absolventa/runs": {
      "post": {
        "operationId": "runs-sync-jpopendata-germany-jobs-absolventa",
        "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/jpopendata~germany-jobs-absolventa/run-sync": {
      "post": {
        "operationId": "run-sync-jpopendata-germany-jobs-absolventa",
        "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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Job titles, skills or employer names, one per line, German or English, e.g. \"Controlling\", \"Werkstudent Marketing\", \"Data Scientist\", \"Ingenieur\". Each keyword is searched separately and every record carries its keyword. Use \"*\" for all jobs. Up to 50 per run. If empty, the Quick start keywords are used.",
            "default": [
              "Data Analyst",
              "Ingenieur"
            ],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Optional. One German city or postcode, as you would type it on absolventa.de, e.g. \"Berlin\", \"München\", \"Frankfurt am Main\", \"50667\". Leave empty for all of Germany.",
            "default": ""
          },
          "positionTypes": {
            "title": "Position types",
            "type": "array",
            "description": "Optional, any of: festanstellung (permanent job), praktikum (internship), werkstudent (working student), trainee (trainee programme), abschlussarbeit (thesis). English names work too. Sent as the site's own filter; when the site turns the search into one of its landing pages (which ignore this filter), the Actor checks each job page instead (needs includeDetails). Leave empty for all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Job fields",
            "type": "array",
            "description": "Optional. The site's job fields, e.g. it, softwareentwicklung, controlling, marketing, vertrieb, human-resources, maschinenbau, elektrotechnik, consulting, pflege. English names work too (software, finance, engineering, hr). Leave empty for all fields.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "withSalaryOnly": {
            "title": "Only jobs with salary information",
            "type": "boolean",
            "description": "Only jobs that show a salary. Sent as the site's own filter and re-checked on every job card (cards without a salary are dropped).",
            "default": false
          },
          "homeOfficeOnly": {
            "title": "Home office possible only",
            "type": "boolean",
            "description": "Keep only jobs tagged \"Homeoffice möglich\" / remote. Applied after fetching each list page, so it may need more requests.",
            "default": false
          },
          "includeDetails": {
            "title": "Open each job page (posted date, position type, end date)",
            "type": "boolean",
            "description": "true (default): one extra request per job reads the job page's structured data — posted date, position type (Festanstellung, Praktikum ...), employment type, industry, listing end date and all locations. false: list-page facts only (title, employer, city, salary if shown, home office, part-time), 20 jobs per request — much faster for large pulls.",
            "default": true
          },
          "maxItemsPerKeyword": {
            "title": "Max jobs per keyword",
            "type": "integer",
            "description": "Job records kept per keyword (1..2000; values outside are clamped).",
            "default": 5
          },
          "maxApiRequests": {
            "title": "Max requests (whole run)",
            "type": "integer",
            "description": "Hard budget of requests to absolventa.de for the whole run (1..1000; clamped), shared fairly between keywords. Each list page (20 jobs) is 1 request; with includeDetails each job page is 1 more. Requests are strictly serial with at least 1.5 s spacing. If the budget runs out the run still SUCCEEDS with the jobs found so far and complete=false in RUN_SUMMARY.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Default: Apify RESIDENTIAL proxy, country DE. absolventa.de answers Apify datacenter IPs with a \"Human Verification\" page (tested 2026-10-04), so a residential German IP is needed on the platform. The run keeps a single sticky session (one IP) — never rotation; verification pages are never solved.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "DE"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}