{
  "openapi": "3.0.1",
  "info": {
    "title": "StepStone Jobs Scraper – Germany, Austria, BE, NL & PNet",
    "description": "Scrape job listings from StepStone Germany, Austria, Belgium, Netherlands and PNet South Africa in one run: title, company, location, salary, home office, posting date, benefits and full description with address and coordinates.",
    "version": "1.0",
    "x-build-id": "wc4n5wnBDYvJ8jxOm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kirozhang~stepstone-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kirozhang-stepstone-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/kirozhang~stepstone-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-kirozhang-stepstone-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/kirozhang~stepstone-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-kirozhang-stepstone-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": {
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Job titles, skills or companies, e.g. \"data analyst\", \"Pflegefachkraft\", \"Buchhalter\", \"software engineer\". Each keyword runs on every selected job board. Leave empty to scrape all jobs (optionally in a location).",
            "items": {
              "type": "string"
            }
          },
          "sites": {
            "title": "Job boards",
            "type": "array",
            "description": "StepStone Germany, Austria, Belgium, Netherlands and PNet South Africa. All return the same clean output; each keyword runs on every selected board.",
            "items": {
              "type": "string",
              "enum": [
                "stepstone.de",
                "stepstone.at",
                "stepstone.be",
                "stepstone.nl",
                "pnet.co.za"
              ],
              "enumTitles": [
                "StepStone Germany (stepstone.de)",
                "StepStone Austria (stepstone.at)",
                "StepStone Belgium (stepstone.be)",
                "StepStone Netherlands (stepstone.nl)",
                "PNet South Africa (pnet.co.za)"
              ]
            },
            "default": [
              "stepstone.de"
            ]
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Optional city or region as you would type it on the site, e.g. \"Berlin\", \"München\", \"Wien\", \"Brussels\", \"Amsterdam\", \"Cape Town\"."
          },
          "radius": {
            "title": "Radius around location",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Optional search radius in km around the location. Leave empty for the site default."
          },
          "postedWithinDays": {
            "title": "Posted within",
            "enum": [
              "0",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Only jobs posted within this many days.",
            "default": "0"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Order of results.",
            "default": "relevance"
          },
          "maxJobsPerSearch": {
            "title": "Max jobs per keyword and board",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of jobs to save for each keyword on each board (and for each start URL).",
            "default": 100
          },
          "includeDescription": {
            "title": "Include full job description",
            "type": "boolean",
            "description": "Open every job ad and add the full description (text + HTML), employment type, industry, expiry date, street address and coordinates. Charged as an extra event only when the description is returned.",
            "default": false
          },
          "startUrls": {
            "title": "Search URLs (optional)",
            "type": "array",
            "description": "Paste search result URLs from StepStone or PNet with the site's own filters applied (contract type, experience, home office, industry, company, …). Each URL is paged through up to \"Max jobs\". When used without keywords, the job boards list above is ignored.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Usually not needed: the Actor connects directly and automatically switches a board to residential proxy if that board starts blocking. Set a proxy here only if you want to force one.",
            "default": {
              "useApifyProxy": false
            }
          },
          "onlyNew": {
            "title": "Only new jobs (monitoring mode)",
            "type": "boolean",
            "description": "Off by default. When on, the first run saves a baseline and every later run with the same Tracking name returns – and charges – only jobs that were not returned before. Results are sorted by date so new postings are found first. OUTPUT also lists postings that disappeared since the last run and new/closed jobs per company.",
            "default": false
          },
          "trackingId": {
            "title": "Tracking name",
            "type": "string",
            "description": "Used with Only new jobs: a stable name for this search (e.g. 'data-jobs-sydney'). Runs with the same name share history."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Optional. A Slack <a href=\"https://api.slack.com/messaging/webhooks\" target=\"_blank\">Incoming Webhook</a> URL (https://hooks.slack.com/services/…). After a run you get one summary message in that channel. Stored encrypted."
          },
          "webhookUrl": {
            "title": "Webhook URL (JSON)",
            "type": "string",
            "description": "Optional. Any https endpoint (Make, Zapier, n8n, a Microsoft Teams workflow or your own server). Receives one JSON POST per run with counts, items and the report link. Stored encrypted."
          },
          "notifyOn": {
            "title": "Send a notification when",
            "enum": [
              "alerts",
              "always"
            ],
            "type": "string",
            "description": "When the Slack / webhook message is sent.",
            "default": "alerts"
          },
          "publicReport": {
            "title": "Shareable report link",
            "type": "boolean",
            "description": "Off by default; needs Only new jobs. When on, an HTML report with new and closed jobs, hiring by company and 7/30-day trends is kept at one fixed link per Tracking name (OUTPUT.reportUrl) that updates after every run. Anyone with the link can open it.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}