{
  "openapi": "3.0.1",
  "info": {
    "title": "StepStone Jobs Scraper - 18 Portals, Salary & Incremental",
    "description": "Scrape stepstone.de and 17 partner portals across DE, AT, BE, NL, and UK. Salary estimates, company profiles, contact details, and 29 search filters. Incremental mode detects new and changed listings. Compact output for AI agents and MCP workflows.",
    "version": "1.7",
    "x-build-id": "39724tPNNdGepId49"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~stepstone-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-stepstone-jobs-feed",
        "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/blackfalcondata~stepstone-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-stepstone-jobs-feed",
        "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/blackfalcondata~stepstone-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-stepstone-jobs-feed",
        "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 URLs",
            "type": "array",
            "description": "Direct StepStone search URLs to scrape. If provided, query/location/geo are ignored for URL building.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "query": {
            "title": "🔍 Search Term(s)",
            "type": "string",
            "description": "Job search keyword (e.g., 'software-developer', 'data-analyst'). Not required when startUrls is provided."
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "Location filter (e.g., 'Berlin', 'München')"
          },
          "geo": {
            "title": "Country / Portal",
            "enum": [
              "DE",
              "BE",
              "AT",
              "NL",
              "TOTALJOBS",
              "CWJOBS",
              "JOBSITE",
              "MILKROUND",
              "CATERER",
              "RETAILCHOICE",
              "CATERERGLOBAL",
              "CAREERSTRUCTURE",
              "CITYJOBS",
              "JUSTENGINEERS",
              "EMEDCAREERS",
              "NIJOBS",
              "JOBSIE",
              "PNET"
            ],
            "type": "string",
            "description": "Job portal to scrape. Some portals require a paid Apify plan with proxy access.",
            "default": "DE"
          },
          "sort": {
            "title": "Sort By",
            "enum": [
              "relevance",
              "date",
              "salary_low",
              "salary_high"
            ],
            "type": "string",
            "description": "Sort order for results",
            "default": "relevance"
          },
          "age": {
            "title": "Posted Within",
            "minimum": 1,
            "type": "integer",
            "description": "Only show jobs posted within this many days"
          },
          "remote": {
            "title": "Remote Only",
            "type": "boolean",
            "description": "Only show remote/home office positions"
          },
          "radius": {
            "title": "Radius (km)",
            "enum": [
              "5",
              "10",
              "20",
              "30",
              "40",
              "50",
              "75",
              "100"
            ],
            "type": "string",
            "description": "Search radius around location in km (requires location)"
          },
          "minSalary": {
            "title": "Minimum Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum annual salary filter (EUR)"
          },
          "contractType": {
            "title": "Contract Type",
            "enum": [
              "FULL_TIME",
              "PART_TIME",
              "CONTRACT",
              "TEMPORARY",
              "INTERNSHIP",
              "APPRENTICESHIP",
              "FREELANCE",
              "MINI_JOB",
              "WORKING_STUDENT",
              "VOLUNTEER",
              "THESIS",
              "DUAL_STUDY"
            ],
            "type": "string",
            "description": "Filter by contract/employment type"
          },
          "experience": {
            "title": "Experience Level",
            "enum": [
              "no",
              "required",
              "executive"
            ],
            "type": "string",
            "description": "Filter by experience level"
          },
          "workType": {
            "title": "Work Type",
            "enum": [
              "FULL_TIME",
              "PART_TIME"
            ],
            "type": "string",
            "description": "Filter by work schedule (full-time / part-time)"
          },
          "companyId": {
            "title": "Company ID",
            "minimum": 1,
            "type": "integer",
            "description": "Filter by StepStone company ID (numeric)"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Filter by job posting language (e.g., 'en', 'de')"
          },
          "applicationMethod": {
            "title": "Application Method",
            "enum": [
              "INTERNAL",
              "EXTERNAL"
            ],
            "type": "string",
            "description": "Filter by how to apply (e.g., INTERNAL = apply on company site only)"
          },
          "excludeSponsored": {
            "title": "Exclude Sponsored",
            "type": "boolean",
            "description": "Skip sponsored/promoted listings. Filters out items where isSponsored=true.",
            "default": false
          },
          "includeDetails": {
            "title": "📋 Include Full Details",
            "type": "boolean",
            "description": "Fetch each job's detail page for full description, ISO dates, salary, and geo coordinates. Slower but much richer data.",
            "default": true
          },
          "detailEngine": {
            "title": "Detail Page Mode",
            "enum": [
              "auto",
              "cheerio",
              "playwright"
            ],
            "type": "string",
            "description": "Controls how job detail pages are fetched. Auto (recommended) lets the actor choose the best method automatically. Lightweight is faster but may fail on protected portals. Enhanced is heavier but more reliable.",
            "default": "auto"
          },
          "descriptionFormat": {
            "title": "Description Format",
            "enum": [
              "html",
              "text",
              "markdown",
              "original"
            ],
            "type": "string",
            "description": "Format for job description text (requires Include Detail Pages)",
            "default": "html"
          },
          "maxResults": {
            "title": "💯 Max Results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of job listings to return (0 = unlimited)",
            "default": 25
          },
          "maxPages": {
            "title": "Max Pages",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum number of search result pages to scrape",
            "default": 10
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "full",
              "incremental"
            ],
            "type": "string",
            "description": "full = return all jobs found. incremental = only return jobs not seen in previous runs (requires stateStoreName).",
            "default": "full"
          },
          "stateStoreName": {
            "title": "State Store Name",
            "type": "string",
            "description": "KV store name for incremental state. Use same name across scheduled runs. State is scoped per query+location+geo combination.",
            "default": "stepstone-state"
          },
          "dedupStoreName": {
            "title": "Dedup Store Name",
            "type": "string",
            "description": "Named KV store for cross-run dedup. Same name across runs = only new jobs pushed."
          },
          "dedupKey": {
            "title": "Dedup Key",
            "type": "string",
            "description": "Field used as unique key for dedup (default: jobKey)",
            "default": "jobKey"
          },
          "datasetName": {
            "title": "Dataset Name",
            "type": "string",
            "description": "Custom dataset name. Supports masks: {DATE} = YYYYMMDD, {TIME} = HHMMSS"
          },
          "outputFields": {
            "title": "Output Fields",
            "type": "array",
            "description": "Select subset of output fields. Use dot notation for nested: 'ceSalary.min'. If empty: all fields returned."
          },
          "compact": {
            "title": "📦 Compact Output",
            "type": "boolean",
            "description": "When true, each result contains only the 11 most essential fields: jobKey, title, company, location, url, portalUrl, datePosted, workFromHome, unifiedSalary, geo, and description. Use this in AI-agent and MCP workflows where token budgets matter.",
            "default": false
          },
          "descriptionMaxLength": {
            "title": "✂️ Description Max Length",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Truncate the description field to this many characters, appending '...' if truncated. 0 means no truncation. Use in AI-agent workflows to control context window usage. Pairs well with compact mode.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy Configuration",
            "type": "object",
            "description": "Proxy configuration. Some portals require enhanced proxy (handled automatically). Your Apify plan must include proxy access.",
            "default": {
              "useApifyProxy": true
            }
          },
          "_benchDelayMs": {
            "title": "Bench Delay (ms)",
            "minimum": 0,
            "type": "integer",
            "description": "Internal: override request delay for benchmarking. Not for production use."
          },
          "_benchFreshSession": {
            "title": "Bench Fresh Session",
            "type": "boolean",
            "description": "Internal: force fresh session per request for benchmarking. Not for production use."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}