{
  "openapi": "3.0.1",
  "info": {
    "title": "AUBI-plus Scraper - Ausbildung, Duales Studium & Praktikum Jobs",
    "description": "Scrape apprenticeships (Ausbildung), dual study programs and internships from AUBI-plus (DE/AT/CH) by keyword, city + radius, or any URL. One clean row per job: title, company, location, start date, requirements, benefits, apply link, full description and contact emails.",
    "version": "0.0",
    "x-build-id": "0v11SaLQhxjOvoPvH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mangomarkets~aubi-plus-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mangomarkets-aubi-plus-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/mangomarkets~aubi-plus-scraper/runs": {
      "post": {
        "operationId": "runs-sync-mangomarkets-aubi-plus-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/mangomarkets~aubi-plus-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-mangomarkets-aubi-plus-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": "Start by URLs",
            "type": "array",
            "description": "Optional. AUBI-plus search/list URLs (e.g. a filtered /suchmaschine/suche/ URL, an /ausbildung/ort/berlin-33899/ city page) or direct job-detail URLs. When you add at least one URL here, Keyword, Country and Location are **not** used to build a URL — these links are crawled as-is (pagination is still followed). Examples: `https://www.aubi-plus.de/suchmaschine/suche/?mSuggest=Mechatroniker`, `https://www.aubi-plus.de/ausbildung/ort/berlin-33899/`, a single job URL, or `https://www.aubi-plus.de/sitemap/index.xml`.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Job title, study programme or company, e.g. Fachinformatiker. Ignored when Start URLs is filled in."
          },
          "country": {
            "title": "Country",
            "enum": [
              "de",
              "at",
              "ch"
            ],
            "type": "string",
            "description": "Which AUBI-plus country site to search with Keyword. Germany has by far the most offers. Ignored when Start URLs is non-empty (the URL's own domain is used then).",
            "default": "de"
          },
          "location": {
            "title": "Location (optional)",
            "type": "string",
            "description": "City or postal code (e.g. `Berlin`, `10115`). With Keyword it is converted to coordinates and searched within Radius, like on the AUBI-plus website. With Start URLs it is applied as a text filter on each job's postal code, city and region."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 5,
            "maximum": 100,
            "type": "integer",
            "description": "Search radius around Location, in km. Used with Keyword search.",
            "default": 25
          },
          "fullScrapeSource": {
            "title": "Full scrape source (no Keyword, Location or Start URLs)",
            "enum": [
              "sitemap",
              "search"
            ],
            "type": "string",
            "description": "How to collect *all* offers when Keyword, Location and Start URLs are empty. **All offers** (recommended) collects every offer listed on AUBI-plus. **Website search** goes through the search pages, which AUBI-plus cuts off after a certain number of pages, so it returns fewer offers.",
            "default": "sitemap"
          },
          "jobTypes": {
            "title": "Offer types",
            "type": "array",
            "description": "Keep only these offer types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "ausbildung",
                "duales-studium",
                "studium",
                "fernstudium",
                "schuelerpraktikum",
                "praktikum",
                "werkstudium",
                "trainee",
                "weiterbildung",
                "abschlussarbeitsthema"
              ],
              "enumTitles": [
                "Ausbildung",
                "Duales Studium",
                "Studium",
                "Fernstudium",
                "Schülerpraktikum",
                "Praktikum",
                "Werkstudium",
                "Trainee",
                "Weiterbildung",
                "Abschlussarbeit"
              ]
            }
          },
          "includeRelatedJobs": {
            "title": "Include related jobs from the same companies",
            "type": "boolean",
            "description": "AUBI-plus also returns related professions and, grouped under each company, that company's other openings. Leave off (default) to keep only postings whose title contains your keyword. Turn on to keep everything the AUBI-plus search returns. Has no effect without a keyword.",
            "default": false
          },
          "scrapeDetails": {
            "title": "Scrape full job details",
            "type": "boolean",
            "description": "Open every job page to extract description, benefits, training type, apply link, region and contact emails. Turn off for a fast run that only collects job URLs, titles and IDs from the result pages.",
            "default": true
          },
          "maxItems": {
            "title": "Maximum number of jobs",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of jobs to save in this run. To collect all offers, set this high enough, e.g. 100000.",
            "default": 10000
          },
          "maxPages": {
            "title": "Maximum result pages per start URL",
            "minimum": 1,
            "type": "integer",
            "description": "Safety limit on how many search result pages (`seite=N`) are followed per search.",
            "default": 500
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 20
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "minimum": 0,
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 10
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is used by default. Switch to Residential if you see blocks, or add your own proxy URLs.",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}