{
  "openapi": "3.0.1",
  "info": {
    "title": "StepStone Jobs Scraper - Germany job listings",
    "description": "Scrape StepStone.de job listings by keyword, location and radius, or from a search URL. Clean rows with company, location, date, salary estimate, remote flag. Filters before charging. Same schema as our ATS jobs actors. Public listings only.",
    "version": "0.1",
    "x-build-id": "HJb4c96nKewTMP1KF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapefy~stepstone-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapefy-stepstone-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/scrapefy~stepstone-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapefy-stepstone-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/scrapefy~stepstone-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapefy-stepstone-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": "StepStone search URLs",
            "type": "array",
            "description": "Optional. StepStone.de search-result addresses, for example https://www.stepstone.de/jobs/data-analyst/in-berlin. Open stepstone.de, search, set any filters you like and paste the address. Only stepstone.de/jobs/... pages are supported. Leave empty and use Keywords and Locations instead if you prefer.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Optional. Job titles or skills to search, one per line, for example 'data analyst' or 'pflegefachkraft'. Each keyword is searched in each location below. Leave empty to list all jobs of a location.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Optional. German cities or regions, one per line, for example 'Berlin' or 'München'. Leave empty for all of Germany (needs a keyword).",
            "items": {
              "type": "string"
            }
          },
          "radiusKm": {
            "title": "Radius around the location (km)",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Optional. Search radius around the location in kilometres, applied by StepStone itself (for example 10, 30, 50). Only used with Keywords/Locations or a start URL without a radius."
          },
          "postedSinceDays": {
            "title": "Posted in the last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Optional. Keep only jobs posted within the last N days. StepStone filters 1, 7 and 30 days itself; the exact cut-off is then applied to each job's posting date. Jobs older than the cut-off are not returned and not charged."
          },
          "remoteOnly": {
            "title": "Remote / home-office jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked as remote or home office by StepStone, or with remote / home office / mobiles Arbeiten in the title or location. Other jobs are not charged.",
            "default": false
          },
          "titleContains": {
            "title": "Title must contain",
            "type": "array",
            "description": "Optional. A job is kept only if its title contains ALL of these words (case-insensitive), for example 'senior' and 'python'. StepStone search is fuzzy, so this tightens the results. Filtered-out jobs are not charged.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Optional. Keep only these employment types (full time, part time, contract, temporary, internship). The type is only on the job page, so every candidate job needs one extra page load; the run is slower, jobs that do not match are not charged.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "CONTRACTOR",
                "TEMPORARY",
                "INTERN"
              ]
            }
          },
          "maxItems": {
            "title": "Max jobs in total",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Hard cap on jobs returned in this run, over all searches. You are charged per job returned, so this caps the cost of a run.",
            "default": 100
          },
          "maxPagesPerSearch": {
            "title": "Max result pages per search",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "StepStone shows 25 jobs per result page. The run stops at this many pages per search (20 pages = up to 500 jobs).",
            "default": 20
          },
          "includeDetails": {
            "title": "Include job description and employment type",
            "type": "boolean",
            "description": "Open every job page and add the description as plain text, the employment type (full time, part time...) and the industry. One extra page load per job, so the run is slower and an extra 'job-detail' event is charged per job.",
            "default": false
          },
          "descriptionMaxChars": {
            "title": "Max description length",
            "minimum": 200,
            "maximum": 50000,
            "type": "integer",
            "description": "Cut the description text after this many characters. Only used when 'Include job description' is on.",
            "default": 4000
          },
          "pacingSeconds": {
            "title": "Seconds between page loads",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Minimum pause between two StepStone page loads. 2 is polite and fast enough; raise it if you see many errors.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "StepStone does not answer plain requests from many cloud addresses. The default is Apify datacenter proxy (group BUYPROXIES94952), which worked in our tests and is included in your Apify plan. Do not switch to residential unless you see blocks: it costs far more.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "BUYPROXIES94952"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}