{
  "openapi": "3.0.1",
  "info": {
    "title": "StepStone.de Jobs Scraper — German Job Listings & Leads",
    "description": "From $0.50 per 1,000 listings. Scrape StepStone.de by keyword, city, Bundesland, radius, sector, discipline, contract type, career level, home-office & date: employer name, company page, location, posted date, snippet, apply route. Incremental 'new mandates only' mode with Slack/webhook alerts.",
    "version": "0.1",
    "x-build-id": "3AMMnanWGh5Ci8Jv7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~stepstone-de-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-stepstone-de-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/scrapersdelight~stepstone-de-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-stepstone-de-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/scrapersdelight~stepstone-de-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-stepstone-de-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": {
          "searchQueries": {
            "title": "Search keywords (Was)",
            "type": "array",
            "description": "One StepStone search per keyword — exactly what you'd type in the 'Was' box (e.g. 'Vertrieb', 'SAP Berater', 'Pflegefachkraft'). Every filter below is applied to all of them. Broad terms are deep — corpus sizes measured 2026-09-06: vertrieb 22,138 · pflege 47,962 · einkauf 23,284 · logistik 14,583 · it 12,361 · maschinenbau 8,731 listings.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (paste a StepStone result page)",
            "type": "array",
            "description": "Paste any stepstone.de result URL verbatim — build the search in your browser, copy the address, drop it here. Its OWN filters are parsed back out and re-paged from page 1; the filter fields on this form apply to your keyword searches only, NOT to a pasted URL (the run logs a warning if you set both). Company pages (/cmp/de/…/jobs) work too. Runs alongside your keywords. A URL that is not on stepstone.de is refused and the run ends with zero rows and zero charge rather than quietly scraping something else.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location (Wo)",
            "type": "string",
            "description": "City ('Berlin'), postal code ('80331') or Bundesland name ('Bayern') — all three verified working. Leave empty for all of Germany."
          },
          "radius": {
            "title": "Search radius (km)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Radius around the location. StepStone's own options are 0, 5, 10, 20, 30, 50 and 100 km. Ignored when no location is set, and ignored (with a warning) on start URLs, which are re-paged exactly as pasted.",
            "default": 30
          },
          "bundesland": {
            "title": "Bundesland",
            "type": "array",
            "description": "Filter by German federal state — server-side, no radius maths. Combine several. (Uses StepStone's region ids internally; all 16 verified individually.)",
            "items": {
              "type": "string",
              "enum": [
                "Baden-Württemberg",
                "Bayern",
                "Berlin",
                "Brandenburg",
                "Bremen",
                "Hamburg",
                "Hessen",
                "Mecklenburg-Vorpommern",
                "Niedersachsen",
                "Nordrhein-Westfalen",
                "Rheinland-Pfalz",
                "Saarland",
                "Sachsen",
                "Sachsen-Anhalt",
                "Schleswig-Holstein",
                "Thüringen"
              ]
            }
          },
          "regionIds": {
            "title": "Region ids (fre) — advanced",
            "type": "array",
            "description": "Raw StepStone region ids for sub-state regions the Bundesland list doesn't cover (e.g. 200000063 Ruhrgebiet, 200000062 Rhein-Main-Gebiet, 200000061 Rheinland). Read them off the 'Region' facet links on any result page.",
            "items": {
              "type": "string"
            }
          },
          "cityIds": {
            "title": "City ids (fci) — exact city, ignores radius",
            "type": "array",
            "description": "Exact-city filter — unlike 'Location + radius' it does NOT spill into neighbouring towns. e.g. 419239 Berlin · 423640 Hamburg · 420876 München · 423047 Bremen. Read ids off the 'Stadt' facet links.",
            "items": {
              "type": "string"
            }
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "24h",
              "7d"
            ],
            "type": "string",
            "description": "Only listings published inside this window — StepStone's own 'Aktualität' filter, applied server-side. The fresh-mandates setting for a daily monitor.",
            "default": "any"
          },
          "contractTypes": {
            "title": "Contract type (Vertragsart)",
            "type": "array",
            "description": "Restrict to these contract types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "permanent",
                "temporary",
                "apprenticeship",
                "working_student",
                "internship",
                "staffing_agency",
                "trainee",
                "freelance",
                "sales_agent",
                "franchise",
                "thesis",
                "referendariat",
                "doctorate"
              ],
              "enumTitles": [
                "Feste Anstellung (permanent)",
                "Befristeter Vertrag (fixed term)",
                "Ausbildung, Studium",
                "Studentenjobs, Werkstudent",
                "Praktikum (internship)",
                "Arbeitnehmerüberlassung (staffing agency)",
                "Berufseinstieg/Trainee",
                "Freie Mitarbeit/Projektmitarbeit",
                "Handelsvertreter",
                "Franchise",
                "Bachelor-/Master-/Diplom-Arbeiten",
                "Referendariat",
                "Promotion/Habilitation"
              ]
            }
          },
          "workTypes": {
            "title": "Working hours (Arbeitszeit)",
            "type": "array",
            "description": "Vollzeit or Teilzeit. NOTE, measured: StepStone binds only ONE working-hours value server-side — if you pick both, the first is used and a warning is logged.",
            "items": {
              "type": "string",
              "enum": [
                "vollzeit",
                "teilzeit"
              ],
              "enumTitles": [
                "Vollzeit (full-time)",
                "Teilzeit (part-time)"
              ]
            }
          },
          "experienceLevels": {
            "title": "Career level (Karrierestufe)",
            "type": "array",
            "description": "Seniority band. 'manager' = mit Personalverantwortung — the decision-makers a recruiter or agency actually wants.",
            "items": {
              "type": "string",
              "enum": [
                "entry",
                "experienced",
                "manager"
              ],
              "enumTitles": [
                "Ohne Berufserfahrung (entry)",
                "Mit Berufserfahrung (experienced)",
                "Mit Personalverantwortung (manages people)"
              ]
            }
          },
          "homeOffice": {
            "title": "Home office",
            "enum": [
              "any",
              "partial",
              "only"
            ],
            "type": "string",
            "description": "StepStone's Home-Office filter, applied server-side. This is the ONLY reliable way to select fully-remote roles: the row-level `workFromHome` field says whether home office is offered but does not separate hybrid from remote-only (measured over 450 rows). It bites hard: \"vertrieb\" went 22,136 listings unfiltered to 112 with homeOffice:\"only\" — both read within the same hour on 2026-09-06 (runs OHj6iaW9j9X3bJmbC / kZ34fh3c6bKmDmYb4). The corpus itself drifts by a handful of rows an hour, which is why that pair reads 22,136 and the headline count above reads 22,138.",
            "default": "any"
          },
          "applicationMethod": {
            "title": "Application method",
            "enum": [
              "any",
              "EXTERNAL",
              "INTERNAL"
            ],
            "type": "string",
            "description": "High-value for agencies: EXTERNAL = the employer runs its own ATS (a direct mandate you can pitch), INTERNAL = StepStone quick-apply.",
            "default": "any"
          },
          "jobLanguage": {
            "title": "Advert language",
            "enum": [
              "any",
              "de",
              "en"
            ],
            "type": "string",
            "description": "Language StepStone detected for the advert. 'en' surfaces the international-hiring subset.",
            "default": "any"
          },
          "disciplines": {
            "title": "Discipline (Berufsfeld)",
            "type": "array",
            "description": "StepStone's job-family filter (Berufsfeld). Use one of StepStone's exact labels (case-insensitive): Vertrieb und Verkauf | Groß- und Einzelhandel | Kundenservice | Logistik | Handwerk | Management | Administration | Gastronomie, Hotellerie | IT | Ingenieurwesen | Marketing | Versicherungen | Personal | Beratung | Banken | Gesundheit | Fertigung, Produktion | Immobilien | Bauwesen | Finanzen. Anything else is named in a warning and dropped; if none of your values is valid the run stops rather than silently return — and bill — rows from job families you filtered out.",
            "items": {
              "type": "string"
            }
          },
          "sectorIds": {
            "title": "Sector ids (se) — the Branche filter",
            "type": "array",
            "description": "Industry segmentation, the way agencies buy. e.g. 15000 Groß- & Einzelhandel · 21000 IT & Internet · 12004 Maschinen-/Anlagenbau · 14001 Baugewerbe · 17000 Transport & Logistik · 29000 Gesundheit & soziale Dienste. Ids come off the 'Branche' facet links.",
            "items": {
              "type": "string"
            }
          },
          "skillIds": {
            "title": "Skill ids (fsk) — advanced",
            "type": "array",
            "description": "StepStone's extracted-skill filter (e.g. 668610). Read ids off the 'Kenntnisse' facet links on a result page.",
            "items": {
              "type": "string"
            }
          },
          "companyId": {
            "title": "Company id — scrape one employer's whole job list",
            "type": "string",
            "description": "Account-based selling: every open role at one employer. The numeric id at the end of a StepStone company URL (…/cmp/de/oms-pruefservice-gmbh-374729/jobs → 374729). Add 'Search keywords' and the two are INTERSECTED server-side into one search per keyword (measured 2026-09-06, run 64wRh1OSbv8CF59vZ: companyID 213579 + \"lager\" = 83 matches, 10/10 delivered rows owned by that employer). Every row is checked against the id and the run fails rather than deliver another employer's leads. On this route StepStone omits the row-level companyUrl (0/10 filled, run 64wRh1OSbv8CF59vZ) — use 'Company page URL' if you need that column."
          },
          "companyUrl": {
            "title": "Company page URL",
            "type": "string",
            "description": "Alternative to the id — paste the employer's StepStone jobs page (https://www.stepstone.de/cmp/de/<slug>-<id>/jobs). The whole page is swept: a company PAGE cannot be narrowed by a keyword or by the filters above (use 'Company id' for that, which can). The numeric id is read out of the slug and every row is checked against it. Measured 2026-09-06, run UtizOckyVXZN5JDgE: 10/10 rows owned by that employer, companyUrl 10/10 filled."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "'date' is the one to use for monitors — it puts the newest mandates on page 1 and makes 'Stop after N days' able to cut the crawl short.",
            "default": "relevance"
          },
          "startPage": {
            "title": "Start at page",
            "minimum": 1,
            "type": "integer",
            "description": "Resume or shard a big crawl. Page N covers results (N-1)×25 … N×25. If you start past the last page of the result set, the run tells you how many pages the search actually has and returns nothing — it never reports the search as empty.",
            "default": 1
          },
          "maxPagesPerQuery": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Ceiling on result pages fetched per keyword (25 listings a page). 0 = walk the whole result set, up to StepStone's own last page.",
            "default": 0
          },
          "maxItemsPerQuery": {
            "title": "Max listings per search",
            "minimum": 0,
            "type": "integer",
            "description": "Per-keyword cap, so one huge term can't eat the whole run. 0 = no per-keyword cap.",
            "default": 0
          },
          "maxItems": {
            "title": "Max listings this run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard total cap across every search — your cost guard. Defaults to 50 for a fast first run. Set 0 for an unlimited sweep (backstopped at 10,000 per keyword).",
            "default": 50
          },
          "stopAfterDays": {
            "title": "Stop after N days old",
            "minimum": 0,
            "type": "integer",
            "description": "Drop listings older than N days. With 'Sort by = date' it also STOPS paging as soon as a page is entirely older — the big cost saver for a daily monitor. 0 = off.",
            "default": 0
          },
          "deduplicate": {
            "title": "Deduplicate listings",
            "type": "boolean",
            "description": "Collapse repeats on StepStone's numeric listing id across pages AND across every keyword in the run, so overlapping searches never bill you twice for the same job.",
            "default": true
          },
          "incrementalMode": {
            "title": "Incremental mode (new listings only)",
            "type": "boolean",
            "description": "The recruiter's daily 'new mandates' feed: remembers every listing id it has seen (in a NAMED key-value store that survives between runs) and outputs only ones that are new since last time. Pair with an Apify Schedule + Sort by date + Posted within 24h.",
            "default": false
          },
          "skipJobIds": {
            "title": "Skip these listing ids",
            "type": "array",
            "description": "Listing ids you already have — excluded before delivery, so you are not charged for them.",
            "items": {
              "type": "string"
            }
          },
          "excludeSponsored": {
            "title": "Exclude paid placements (sponsored / TopJob)",
            "type": "boolean",
            "description": "Drops rows flagged isSponsored or isTopJob. HONEST NOTE: re-measured 2026-09-06 across 430 listings on 6 keywords, StepStone's logged-out result pages returned these flags false 430/430, so today this toggle has nothing to drop. It is wired and correct, and will take effect if StepStone starts flagging paid placements publicly — but do not expect it to change your row count right now.",
            "default": false
          },
          "excludeAnonymous": {
            "title": "Exclude anonymous postings",
            "type": "boolean",
            "description": "Drops rows flagged isAnonymous (no employer named = worthless as a lead). HONEST NOTE: re-measured 2026-09-06 across 430 listings on 6 keywords, this flag was false 430/430 on StepStone's public result pages, so today it has nothing to drop. Wired and correct, but it will not change your row count right now.",
            "default": false
          },
          "excludeStaffingAgencies": {
            "title": "Exclude staffing agencies (Arbeitnehmerüberlassung)",
            "type": "boolean",
            "description": "Drop Arbeitnehmerüberlassung postings — your own competitors reposting other people's mandates. Applied server-side by selecting every OTHER contract type (measured 2026-09-06: \"vertrieb\" 22,138 listings unfiltered vs 18,754 with staffing agencies excluded, runs 88I8ff2ju9nnwzgkk / saZiCgRWX3RbKQgu0). If Arbeitnehmerüberlassung is the ONLY contract type you also ticked above, the two settings contradict each other: this exclusion wins, a warning names the contradiction, and every other contract type is selected.",
            "default": false
          },
          "includeSimilarJobs": {
            "title": "Include StepStone's 'similar jobs' padding",
            "type": "boolean",
            "description": "Off by default, and you want it off. When a search is narrow StepStone pads the page with recommended/regional listings that do NOT match your filters (measured: a 1-result query returned 1 real + 24 padded). Off = you are only charged for real matches.",
            "default": false
          },
          "outputFields": {
            "title": "Output fields (column picker)",
            "type": "array",
            "description": "Keep only these fields, in this order — e.g. companyName, title, location, jobUrl, datePosted. Leave empty for the full record. A name this actor does not produce is ignored and named in a log warning, with the full field list, so a typo cannot silently cost you a column. If NONE of the names you list exists, the rows would be empty — those rows are dropped, not delivered and not billed, and the run says so instead of charging you for blank rows.",
            "items": {
              "type": "string"
            }
          },
          "compactOutput": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Drop StepStone's ad-tracking positions (positionOnPage, positionAbsolute) for a clean CSV.",
            "default": false
          },
          "includeRawJson": {
            "title": "Include raw JSON",
            "type": "boolean",
            "description": "Attach StepStone's untouched item object as `raw` on every row. For power users diffing against the source.",
            "default": false
          },
          "absoluteUrls": {
            "title": "Absolute, click-tracking-free URLs",
            "type": "boolean",
            "description": "Return full https://www.stepstone.de/… links with StepStone's ?rltr= tracking suffix stripped. Turn off to keep the raw relative path.",
            "default": true
          },
          "webhookUrl": {
            "title": "Webhook URL (new listings)",
            "type": "string",
            "description": "POST endpoint for new-listing alerts in incremental mode (Make / Zapier / n8n / your CRM). One JSON body per run."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Slack incoming-webhook URL for a formatted new-listings digest in incremental mode."
          },
          "alertOnNewListing": {
            "title": "Send alerts for new listings",
            "type": "boolean",
            "description": "In incremental mode, deliver each run's new listings to the webhook / Slack channels above.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxy is the default and the cheap path. Measured on the platform 2026-09-06 across 59 pages in 34 runs: 64.4% of pages landed first try, retries and the automatic RESIDENTIAL/DE rescue carried the rest, and 34 of 34 runs SUCCEEDED with 0 pages lost. If you would rather not spend the retries, switch this to RESIDENTIAL with country DE.",
            "default": {
              "useApifyProxy": true
            }
          },
          "residentialFallback": {
            "title": "Rescue failed pages with a residential proxy",
            "type": "boolean",
            "description": "If the datacenter proxy burns every retry on a page (measured: it happens during bad patches — one run lost page 1 across 8 consecutive fresh sessions), try that page once more through RESIDENTIAL / country DE instead of leaving a hole in your results. Only ever fires AFTER the datacenter attempts are exhausted, so it costs nothing on a healthy run. Ignored if you pin your own proxy groups above.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel page fetches. Each worker keeps its own sticky proxy session. Keep it modest to stay polite.",
            "default": 5
          },
          "maxRequestRetries": {
            "title": "Max retries per page",
            "minimum": 5,
            "maximum": 12,
            "type": "integer",
            "description": "Attempts per page before giving up on it. Each retry mints a FRESH proxy session — that is the reliability knob for this site, because a bad datacenter session fails every call it makes. Measured on the Apify platform 2026-09-06 over 59 pages in 34 runs: 64.4% of pages landed first try and the retries recovered every one of the rest (0 pages lost, 34/34 runs SUCCEEDED); one page needed all 8 datacenter attempts plus the RESIDENTIAL rescue. Default is 8; floor of 5 is enforced in code.",
            "default": 8
          },
          "sessionRotateAfter": {
            "title": "Rotate proxy session after N requests",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Voluntarily retire a healthy proxy session after this many pages, on top of the automatic retire-on-error.",
            "default": 40
          },
          "requestDelayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Politeness gap each worker waits before fetching the next page.",
            "default": 250
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}