{
  "openapi": "3.0.1",
  "info": {
    "title": "StepStone Jobs Scraper",
    "description": "Scrape StepStone job offers in Germany, Austria, Belgium and the Netherlands by keyword, location or search URL: title, company, salary, remote work, plus optional contract type, full description and recruiter contacts. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "uhWerP7feffrcI4EM"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~stepstone-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-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/nice_dev~stepstone-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-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/nice_dev~stepstone-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-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": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "StepStone URLs from any of the 4 countries: search-result pages (every filter set on the site is kept, pagination is automatic, e.g. `https://www.stepstone.de/jobs/data-analyst/in-berlin?radius=30&wfh=1`), company pages (`https://www.stepstone.de/cmp/de/targobank-2672/jobs` = all its job ads) or single job ads (`https://www.stepstone.de/stellenangebote--Data-Analyst--14659293-inline.html`). When this list is not empty, the search fields below (keywords, locations, countries, site filters) are ignored; filters, caps and monitoring still apply. Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "companyIds": {
            "title": "Employer numbers",
            "maxItems": 200,
            "uniqueItems": true,
            "type": "array",
            "description": "All job ads of these employers, by StepStone company number (the companyId column of the results, e.g. `2672`). Digits only, max 200. Each employer is read on every selected country; a Search keyword narrows each employer's job ads (clear the keyword to get all of them). The site filters below apply; the Location does not. Handy with **New job ads only** to monitor employers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "jobIds": {
            "title": "Job ad numbers",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "Read known job ads again by StepStone job ad number (the id column of the results, e.g. `14740497`). Digits only, max 1 000. A number belongs to one country: the first selected country is used. Each job ad is read from its own page, as a job ad URL in Start URLs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "query": {
            "title": "Search keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Job title, skill or company, exactly as typed in the StepStone search box (e.g. `Software Entwickler`, `Pflegefachkraft`, `SAP`). Empty = every job ad of the country (capped by Max job ads, default 100)."
          },
          "searchQueries": {
            "title": "More search keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: one search per keyword (times each location and each country). Added to **Search keyword**; a job ad found by several searches is saved once.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "maxLength": 200,
            "type": "string",
            "description": "City or postcode, as typed on StepStone (e.g. `Berlin`, `München`, `Wien`, `Amsterdam`). Empty = every job ad of the country (capped by Max job ads, default 100). Not used with Employer numbers or Job ad numbers."
          },
          "locations": {
            "title": "More locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several locations in one run: every keyword is searched in every location (3 keywords × 4 locations = 12 searches per country, max 500 searches). Added to **Location**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "radius": {
            "title": "Radius (km)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Distance around the location, in kilometres, passed to StepStone as on its site. Used only with a location. It mostly changes the nearby job ads added by Include related job ads: the job ads that match the search can stay the same.",
            "default": 30
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "StepStone sites to search. Each keyword × location (or employer) is searched on each selected site. Ignored for Start URLs (the country is read from the URL); Job ad numbers use the first one.",
            "items": {
              "type": "string",
              "enum": [
                "de",
                "at",
                "be",
                "nl"
              ],
              "enumTitles": [
                "Germany (stepstone.de)",
                "Austria (stepstone.at)",
                "Belgium (stepstone.be)",
                "Netherlands (stepstone.nl)"
              ]
            },
            "default": [
              "de"
            ]
          },
          "belgiumLanguage": {
            "title": "Language of stepstone.be",
            "enum": [
              "fr",
              "nl",
              "en"
            ],
            "type": "string",
            "description": "stepstone.be runs in 3 languages: the search pages, URLs and site texts (contract type, work type) follow this language. Used only when Belgium is selected.",
            "default": "fr"
          },
          "maxItems": {
            "title": "Max job ads",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of job ads to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max job ads per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for EACH search (keyword × location × country, or start URL), so that the first search cannot use up the whole **Max job ads** budget. 0 = no per-search cap.",
            "default": 0
          },
          "includeRelatedJobs": {
            "title": "Include related job ads",
            "type": "boolean",
            "description": "StepStone pads its results with job ads that do not match the search exactly: nearby places (`regional`) and similar job titles (`semantic`), often several times more ads (Software-Entwickler in Berlin: 454 matching ads, 2 857 with the related ones). Off = only the ads that match the keyword and location (`main`). On = the related ones too, each tagged in the `section` field. Ads that StepStone recommends outside the search are never returned.",
            "default": false
          },
          "includeSearchStats": {
            "title": "Search statistics",
            "type": "boolean",
            "description": "For each search, saves in the key-value store (record `SEARCH_STATS`) the total number of job ads and how they split by city, region, sector, discipline, contract type, experience, work from home, working time, application method, language, skill, category and salary step. These are the figures StepStone shows for the search, at no extra charge. The `id` of a skill, city or category can be used in **Skill IDs**, **City IDs** and **Category IDs**.",
            "default": false
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Only job ads published in the last 24 hours, 3, 7, 14 or 30 days. 1, 3, 7 and 14 are StepStone filters; 30 days is applied by the Actor on the publication date, like **Posted after** (a later Posted after wins). For any other date, use **Posted after** below.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Order of the results, as on StepStone. Newest first: StepStone then sends neither the salary nor the end of publication in the results list — they come only from the job ad page (Full job ad or Recruiter contacts), and the salary filters need it.",
            "default": "relevance"
          },
          "workFromHome": {
            "title": "Home office",
            "enum": [
              "",
              "partial",
              "full"
            ],
            "type": "string",
            "description": "Only job ads that allow working from home partly, or fully remote ones.",
            "default": ""
          },
          "workType": {
            "title": "Working hours",
            "enum": [
              "",
              "fullTime",
              "partTime"
            ],
            "type": "string",
            "description": "Full-time or part-time job ads only.",
            "default": ""
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Keep only these contract types (several = any of them). Not every type exists on every site: a type a site does not have is left out for that site (the run log says so), and a site with none of them is not searched.",
            "items": {
              "type": "string",
              "enum": [
                "permanent",
                "fixedTerm",
                "internship",
                "workingStudent",
                "apprenticeship",
                "trainee",
                "freelance",
                "temporaryAgency",
                "salesAgent",
                "franchise",
                "thesis",
                "legalClerkship",
                "doctorate"
              ],
              "enumTitles": [
                "Permanent",
                "Fixed-term",
                "Internship",
                "Working student / student job",
                "Apprenticeship / dual studies",
                "Graduate / trainee",
                "Freelance / project",
                "Temporary agency work",
                "Commercial agent",
                "Franchise",
                "Bachelor / master thesis",
                "Legal clerkship (Referendariat, stepstone.de only)",
                "Doctorate / habilitation (stepstone.de only)"
              ]
            },
            "default": []
          },
          "experience": {
            "title": "Experience",
            "type": "array",
            "description": "Keep only these experience levels (several = any of them).",
            "items": {
              "type": "string",
              "enum": [
                "noExperience",
                "experienced",
                "managerial"
              ],
              "enumTitles": [
                "No experience needed",
                "With professional experience",
                "With staff responsibility"
              ]
            },
            "default": []
          },
          "applicationMethod": {
            "title": "Application method",
            "enum": [
              "",
              "quick",
              "external"
            ],
            "type": "string",
            "description": "Quick application on StepStone, or application on the employer's website.",
            "default": ""
          },
          "jobLanguage": {
            "title": "Language of the job ad",
            "enum": [
              "",
              "de",
              "en",
              "fr",
              "nl"
            ],
            "type": "string",
            "description": "Only job ads written in this language (StepStone detects it), e.g. English job ads in Germany.",
            "default": ""
          },
          "bundesland": {
            "title": "German state (Bundesland)",
            "enum": [
              "",
              "baden-wuerttemberg",
              "bayern",
              "berlin",
              "brandenburg",
              "bremen",
              "hamburg",
              "hessen",
              "mecklenburg-vorpommern",
              "niedersachsen",
              "nordrhein-westfalen",
              "rheinland-pfalz",
              "saarland",
              "sachsen",
              "sachsen-anhalt",
              "schleswig-holstein",
              "thueringen"
            ],
            "type": "string",
            "description": "Germany only: job ads in this federal state. Can be combined with a location or used without one. With several countries it applies to the stepstone.de searches only; Countries must include stepstone.de.",
            "default": ""
          },
          "disciplines": {
            "title": "Disciplines",
            "type": "array",
            "description": "Keep only job ads of these fields of work (several = any of them), e.g. IT and Marketing. `advertising` exists on stepstone.de only: on a site that lacks a discipline it is left out (the run log says so), and a site with none of them is not searched.",
            "items": {
              "type": "string",
              "enum": [
                "skilledTrades",
                "sales",
                "health",
                "logistics",
                "construction",
                "it",
                "retail",
                "engineering",
                "management",
                "accountancy",
                "administration",
                "manufacturing",
                "catering",
                "education",
                "socialCare",
                "marketing",
                "customerService",
                "consulting",
                "cleaning",
                "finance",
                "banking",
                "science",
                "property",
                "humanResources",
                "legal",
                "design",
                "media",
                "security",
                "insurance",
                "travel",
                "sportAndFitness",
                "artsAndEntertainment",
                "farmingAndAgriculture",
                "pr",
                "publicSector",
                "animalCare",
                "military",
                "thirdSector",
                "advertising",
                "policing"
              ],
              "enumTitles": [
                "Skilled trades",
                "Sales",
                "Health",
                "Logistics",
                "Construction",
                "IT",
                "Retail",
                "Engineering",
                "Management",
                "Accountancy",
                "Administration",
                "Manufacturing",
                "Catering and hospitality",
                "Education",
                "Social care",
                "Marketing",
                "Customer service",
                "Consulting",
                "Cleaning",
                "Finance",
                "Banking",
                "Science",
                "Property",
                "Human resources",
                "Legal",
                "Design",
                "Media",
                "Security",
                "Insurance",
                "Travel",
                "Sport and fitness",
                "Arts and entertainment",
                "Farming and agriculture",
                "PR",
                "Public sector",
                "Animal care",
                "Military",
                "Third sector",
                "Advertising (stepstone.de only)",
                "Policing"
              ]
            },
            "default": []
          },
          "sectors": {
            "title": "Employer sectors",
            "type": "array",
            "description": "Keep only job ads of employers in these sectors (several = any of them). stepstone.de and stepstone.at have the full list; stepstone.be and stepstone.nl have a shorter one with other cuts, so only the sectors they share with stepstone.de are sent there (a sector without an equivalent is left out, the run log says so).",
            "items": {
              "type": "string",
              "enum": [
                "agricultureForestryAndFishing",
                "mining",
                "foodAndBeverages",
                "textilesAndApparel",
                "media",
                "chemicalsAndPetrochemicals",
                "pharmaceuticals",
                "metalIndustry",
                "automotive",
                "aerospace",
                "consumerGoods",
                "printPaperAndPackaging",
                "mechanicalEngineering",
                "electronicsAndPrecisionEngineering",
                "otherManufacturing",
                "energyWaterAndWaste",
                "construction",
                "craftsAndTrades",
                "wholesaleAndRetail",
                "hospitalityAndCatering",
                "transportAndLogistics",
                "telecommunications",
                "banking",
                "financialServices",
                "insurance",
                "realEstate",
                "itAndInternet",
                "scienceAndResearch",
                "consultingAuditAndLegal",
                "advertisingMarketingAndPr",
                "staffingAndRecruitment",
                "otherServices",
                "publicSectorAndAssociations",
                "educationAndTraining",
                "healthAndSocialServices",
                "leisureTourismCultureAndSport",
                "otherIndustries",
                "medicalTechnology"
              ],
              "enumTitles": [
                "Agriculture, forestry and fishing",
                "Mining",
                "Food and beverages",
                "Textiles, clothing and leather",
                "Media (film, radio, TV, publishing)",
                "Chemicals and petrochemicals",
                "Pharmaceuticals",
                "Metal industry",
                "Automotive and suppliers",
                "Aerospace",
                "Consumer goods",
                "Printing, paper and packaging",
                "Machinery and plant engineering",
                "Electrical, precision engineering and optics",
                "Other manufacturing",
                "Energy, water supply and waste disposal",
                "Construction",
                "Crafts and trades",
                "Wholesale and retail",
                "Hotels, restaurants and catering",
                "Transport and logistics",
                "Telecommunications",
                "Banks",
                "Financial services",
                "Insurance",
                "Real estate",
                "IT and internet",
                "Science and research",
                "Consulting, auditing and legal",
                "Agency, advertising, marketing and PR",
                "Staffing and recruitment",
                "Other services",
                "Public sector and associations",
                "Education and training",
                "Health and social services",
                "Leisure, tourism, culture and sport",
                "Other industries",
                "Medical technology"
              ]
            },
            "default": []
          },
          "austriaState": {
            "title": "Austrian state",
            "enum": [
              "",
              "wien",
              "oberoesterreich",
              "niederoesterreich",
              "tirol",
              "steiermark",
              "salzburg",
              "kaernten",
              "vorarlberg",
              "burgenland"
            ],
            "type": "string",
            "description": "Austria only: job ads in this state. Can be combined with a location or used without one. With several countries it applies to the stepstone.at searches only; Countries must include stepstone.at.",
            "default": ""
          },
          "belgiumProvince": {
            "title": "Belgian province",
            "enum": [
              "",
              "antwerp",
              "east-flanders",
              "west-flanders",
              "flemish-brabant",
              "limburg",
              "brussels",
              "hainaut",
              "liege",
              "walloon-brabant",
              "namur",
              "luxembourg"
            ],
            "type": "string",
            "description": "Belgium only: job ads in this province, Brussels included. Can be combined with a location or used without one. With several countries it applies to the stepstone.be searches only; Countries must include stepstone.be.",
            "default": ""
          },
          "netherlandsProvince": {
            "title": "Dutch province",
            "enum": [
              "",
              "noord-holland",
              "noord-brabant",
              "zuid-holland",
              "utrecht",
              "zeeland",
              "drenthe",
              "overijssel",
              "gelderland",
              "friesland",
              "groningen",
              "limburg",
              "flevoland"
            ],
            "type": "string",
            "description": "The Netherlands only: job ads in this province. Can be combined with a location or used without one. With several countries it applies to the stepstone.nl searches only; Countries must include stepstone.nl.",
            "default": ""
          },
          "skillIds": {
            "title": "Skill codes",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only job ads that ask for these skills (several = any of them). The codes are the numbers in the address of a search filtered by skill on StepStone (`673826`): set the filter on the site, copy the number. Digits only. Codes belong to one country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "cityIds": {
            "title": "City codes",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only job ads in these cities (several = any of them). The codes are the numbers in the address of a search filtered by city on StepStone (`419239`): set the filter on the site, copy the number. Digits only. Codes belong to one country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "categoryIds": {
            "title": "Job category codes",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only job ads of these job categories (several = any of them). The codes are the numbers in the address of a search filtered by job category on StepStone: set the filter on the site, copy the number. Digits only. Codes belong to one country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "extractDetails": {
            "title": "Full job ad and company profile",
            "type": "boolean",
            "description": "Open each job ad: full description (tasks, profile, benefits, contact sections), contract type, working hours, street address and GPS, end of publication, cover-letter badge, and the company profile (size, industries, address, About us, benefits, rating and number of reviews). Off = the result-list fields only (title, company, location, salary range, home office, snippet, benefits).",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "Format of the `description` field and of each `descriptionSections` text (with **Full job ad**).",
            "default": "text"
          },
          "descriptionMaxLength": {
            "title": "Max description length",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cut `description` and each text of `descriptionSections` after this many characters (smaller exports, LLM prompts). 0 = the whole text.",
            "default": 0
          },
          "extractContacts": {
            "title": "Recruiter contacts",
            "type": "boolean",
            "description": "Read the recruiter's name, e-mail addresses and phone numbers written by the employer in the job ad (found in about 1 job ad in 5). Opens the job ad page of every job ad you get: each one is charged **Full job ad**, and the contacts option is added only where an e-mail address or a phone number is found.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only job ads published on or after this date (the StepStone publication date, `publishedAt`): `2026-09-01`, or a period before now such as `7 days`, `2 weeks`, `1 month` (API: `24 hours` and full ISO date-times work too). Job ads without a publication date are dropped. With Sort by Newest first, StepStone dates the results up to about 20 hours before the job ad page, or days after it for a job ad its employer re-publishes: the date of a row is the page's when it is read (Full job ad or Recruiter contacts), else the list's."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only job ads published on or before this date (the whole day is included), or older than a period such as `30 days`."
          },
          "includeKeywords": {
            "title": "Title must contain",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the job ads whose title contains at least one of these words (case and accents ignored), e.g. `Senior`, `Werkstudent`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the job ads whose title contains one of these WHOLE words (case and accents ignored): `art` drops \"Art deco\" but keeps \"Smart watch\". Several words in one entry (`hand made`) must appear together, in that order. Chinese, Japanese, Korean, Thai, Lao, Khmer and Burmese words are found anywhere in the title (no spaces there).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the job ads of these companies (part of the company name, case and accents ignored), e.g. staffing agencies.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeCompanies": {
            "title": "Only these companies",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the job ads of these companies (part of the company name, case and accents ignored), e.g. `SAP`, `Bosch`. Job ads that show no company name are dropped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minSalary": {
            "title": "Min yearly salary",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep only the job ads whose salary range reaches at least this yearly amount, in the ad's currency (monthly × 12, hourly × 2 080; StepStone's estimates count, see `salaryIsEstimate`). Only stepstone.de gives salaries: on the other sites every job ad is dropped. With Sort by Newest first, the salary is read on the job ad page and needs Full job ad or Recruiter contacts (ignored when neither is on). Job ads without a salary are dropped. 0 = off.",
            "default": 0
          },
          "maxSalary": {
            "title": "Max yearly salary",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Drop the job ads whose salary range starts above this yearly amount, in the ad's currency (monthly × 12, hourly × 2 080; StepStone's estimates count, see `salaryIsEstimate`). Job ads without a salary are KEPT (add Only job ads with a salary to drop them). Only stepstone.de gives salaries. With Sort by Newest first, the salary is read on the job ad page and needs Full job ad or Recruiter contacts (ignored when neither is on). 0 = off.",
            "default": 0
          },
          "onlyWithSalary": {
            "title": "Only job ads with a salary",
            "type": "boolean",
            "description": "Drop the job ads that show no salary figure (a range or an amount). Only stepstone.de gives salaries. With Sort by Newest first, it is judged on the job ad page and needs Full job ad or Recruiter contacts (ignored when neither is on).",
            "default": false
          },
          "excludeSponsored": {
            "title": "Exclude sponsored job ads",
            "type": "boolean",
            "description": "Drop the job ads that StepStone marks as sponsored. Top and highlighted job ads are kept.",
            "default": false
          },
          "excludeAnonymous": {
            "title": "Exclude anonymous employers",
            "type": "boolean",
            "description": "Drop the job ads whose employer hides its name or gives none (often staffing agencies).",
            "default": false
          },
          "excludePartnerJobs": {
            "title": "Exclude partner job ads",
            "type": "boolean",
            "description": "Drop the job ads that StepStone marks as partner, cross-posted or backfilled (copies of ads published on other job boards).",
            "default": false
          },
          "excludeRecruitmentAgencies": {
            "title": "Exclude recruitment agencies",
            "type": "boolean",
            "description": "Drop the job ads of employers that StepStone files as a recruitment agency (read on the job ad page: needs Full job ad or Recruiter contacts, ignored when neither is on). Job ads whose employer profile says nothing are kept.",
            "default": false
          },
          "descriptionIncludeKeywords": {
            "title": "Description must contain",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the job ads whose whole text contains at least one of these WHOLE words (case and accents ignored), e.g. `Führerschein`. Read on the job ad page: needs Full job ad or Recruiter contacts (ignored when neither is on). The whole text is searched, even when Max description length cuts the text you get. Job ads without a text are dropped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "descriptionExcludeKeywords": {
            "title": "Description must not contain",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the job ads whose whole text contains one of these WHOLE words (case and accents ignored), e.g. `Schichtdienst`. Read on the job ad page: needs Full job ad or Recruiter contacts (ignored when neither is on). The whole text is searched, even when Max description length cuts the text you get.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyWithContacts": {
            "title": "Only job ads with contacts",
            "type": "boolean",
            "description": "Keep only the job ads where an e-mail address or a phone number was found (a recruiter name alone is not enough). Needs Recruiter contacts: the run is refused without it.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new job ads",
            "type": "boolean",
            "description": "Skip the job ads that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and their page is not even opened. First run = everything is new.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new job ads**. Give each schedule / task its own key (e.g. `berlin-data-jobs`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every job ad again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests to StepStone in any 60 seconds, all of them counted: result pages and job ad pages. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the site answers HTTP 429 / 403 in the log.",
            "default": 120
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}