{
  "openapi": "3.0.1",
  "info": {
    "title": "StepStone Scraper — Jobs DE/AT/BE/NL, Salaries & Monitor (MCP)",
    "description": "StepStone jobs in Germany, Austria, Belgium & the Netherlands: title, company, salary (exact and estimated), benefits + full descriptions. Monitor mode: new jobs, salary updates & filled ads. $0.60 per 1 000 jobs.",
    "version": "0.0",
    "x-build-id": "XL6W7N25G9vPqmKMR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/amygraphics~stepstone-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-amygraphics-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/amygraphics~stepstone-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-amygraphics-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/amygraphics~stepstone-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-amygraphics-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "monitor"
            ],
            "type": "string",
            "description": "search = extract every matching job. monitor = compare with the previous run and only return what is new, changed (salary updates included) or gone — perfect for a daily schedule.",
            "default": "search"
          },
          "country": {
            "title": "Country",
            "enum": [
              "de",
              "at",
              "be",
              "nl"
            ],
            "type": "string",
            "description": "Which StepStone site to search. France is not covered: stepstone.fr is a corporate site with no job listings.",
            "default": "de"
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Job title / keywords, e.g. \"data engineer\", \"pflegekraft\", \"warehouse\".",
            "default": ""
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Optional city or region, e.g. Berlin, München, Wien, Amsterdam. Combined with Radius (km) below.",
            "default": ""
          },
          "searchUrl": {
            "title": "Search URL (optional)",
            "type": "string",
            "description": "Instead of keyword/location, paste any StepStone search-result URL — its filters (radius, age, salary, …) are reused.",
            "default": ""
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Search radius around the location. StepStone default is 30.",
            "default": 30
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "",
              "24h",
              "7d"
            ],
            "type": "string",
            "description": "Only jobs published recently — StepStone's own freshness filter (perfect for cheap daily runs).",
            "default": ""
          },
          "minSalary": {
            "title": "Minimum salary (EUR / year)",
            "type": "integer",
            "description": "Optional salary floor, e.g. 50000. Uses StepStone's salary filter (works where the site offers it)."
          },
          "workFromHome": {
            "title": "Home-office filter (raw StepStone code)",
            "enum": [
              "",
              "1",
              "2"
            ],
            "type": "string",
            "description": "Optional. StepStone's own code: 1 = home-office possible, 2 = partially home-office. Leave empty for any.",
            "default": ""
          },
          "contractType": {
            "title": "Contract type (raw StepStone code)",
            "type": "string",
            "description": "Advanced, optional. Example codes from the German site: 222 = Feste Anstellung (permanent contract).",
            "default": ""
          },
          "experience": {
            "title": "Experience (raw StepStone code)",
            "type": "string",
            "description": "Advanced, optional. Example codes: 90002 = with professional experience, 90001 = entry level.",
            "default": ""
          },
          "discipline": {
            "title": "Discipline (raw StepStone code)",
            "type": "string",
            "description": "Advanced, optional. Example: IT — matches StepStone's discipline facet value.",
            "default": ""
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "date",
              "relevance"
            ],
            "type": "string",
            "description": "date = newest postings first (recommended, required for cheap incremental runs). relevance = StepStone's default ranking.",
            "default": "date"
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Each page holds 25 jobs. 10 pages = up to 250 jobs. The Actor stops earlier when the results end.",
            "default": 10
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Global cap on rows returned (and billed).",
            "default": 100
          },
          "includeDetails": {
            "title": "Fetch full job descriptions",
            "type": "boolean",
            "description": "One extra request per job: adds the full description, employment type, industry, direct-apply flag and the hiring organisation's address.",
            "default": false
          },
          "onlyChanges": {
            "title": "Monitor: only new / changed / closed",
            "type": "boolean",
            "description": "In monitor mode, return only the deltas instead of the full list (unchanged jobs are not billed).",
            "default": true
          },
          "detectClosed": {
            "title": "Monitor: detect closed jobs",
            "type": "boolean",
            "description": "Flag jobs that disappeared from the search results as closed (filled or expired). Only done when the scan was complete and error-free.",
            "default": true
          },
          "stateKey": {
            "title": "Monitor state key",
            "type": "string",
            "description": "Optional name for this monitored search. Leave empty — it is derived from the search scope.",
            "default": ""
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Politeness delay. Leave 0 for the built-in value (~1.1 s between search pages) — do not lower it, StepStone blocks fast crawlers.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional — leave EMPTY. StepStone's Akamai layer hangs datacenter requests, so the Actor already uses Apify's Residential proxy by default (billed to your account as platform usage). Set this only if you want a specific proxy setup."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}