{
  "dataset": "compensation-snapshot",
  "title": "Disclosed compensation by role family",
  "description": "Percentiles of stated pay for postings that disclosed it, kept separate by currency and period because neither can be combined without an assumption the postings never made.",
  "release": "2026-09-21.1",
  "generatedAt": "2026-09-21T09:23:41.687Z",
  "license": "CC-BY-4.0",
  "attribution": "Analytics Engineering Observatory",
  "notes": [
    "Figures describe an observed sample of open postings, not the whole job market.",
    "Permitted claim class for this release: SNAPSHOT_ONLY."
  ],
  "rowCount": 31,
  "columns": [
    "role_family",
    "comp_currency",
    "comp_period",
    "disclosed_posting_count",
    "open_postings",
    "disclosing_postings",
    "salary_disclosure_pct",
    "p25",
    "median",
    "p75",
    "lowest_stated_min",
    "highest_stated_max",
    "is_suppressed",
    "supports_quartiles",
    "suppression_reason",
    "required_caveat",
    "computed_at"
  ],
  "rows": [
    {
      "role_family": "ANALYTICS_ENGINEER",
      "comp_currency": "CAD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 3,
      "open_postings": 10,
      "disclosing_postings": 8,
      "salary_disclosure_pct": 80,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 3 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "ANALYTICS_ENGINEER",
      "comp_currency": "EUR",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 1,
      "open_postings": 10,
      "disclosing_postings": 8,
      "salary_disclosure_pct": 80,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "ANALYTICS_ENGINEER",
      "comp_currency": "PLN",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 2,
      "open_postings": 10,
      "disclosing_postings": 8,
      "salary_disclosure_pct": 80,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 2 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "ANALYTICS_ENGINEER",
      "comp_currency": "PLN",
      "comp_period": "MONTHLY",
      "disclosed_posting_count": 2,
      "open_postings": 10,
      "disclosing_postings": 8,
      "salary_disclosure_pct": 80,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 2 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ANALYST",
      "comp_currency": "CAD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 2,
      "open_postings": 32,
      "disclosing_postings": 13,
      "salary_disclosure_pct": 40.6,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 2 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ANALYST",
      "comp_currency": "EUR",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 2,
      "open_postings": 32,
      "disclosing_postings": 13,
      "salary_disclosure_pct": 40.6,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 2 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ANALYST",
      "comp_currency": "GBP",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 1,
      "open_postings": 32,
      "disclosing_postings": 13,
      "salary_disclosure_pct": 40.6,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ANALYST",
      "comp_currency": "SEK",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 1,
      "open_postings": 32,
      "disclosing_postings": 13,
      "salary_disclosure_pct": 40.6,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ANALYST",
      "comp_currency": "USD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 7,
      "open_postings": 32,
      "disclosing_postings": 13,
      "salary_disclosure_pct": 40.6,
      "p25": null,
      "median": 175592,
      "p75": null,
      "lowest_stated_min": 83000,
      "highest_stated_max": 234500,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "7 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ENGINEER",
      "comp_currency": "CAD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 4,
      "open_postings": 32,
      "disclosing_postings": 12,
      "salary_disclosure_pct": 37.5,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 4 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ENGINEER",
      "comp_currency": "PLN",
      "comp_period": "MONTHLY",
      "disclosed_posting_count": 1,
      "open_postings": 32,
      "disclosing_postings": 12,
      "salary_disclosure_pct": 37.5,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_ENGINEER",
      "comp_currency": "USD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 7,
      "open_postings": 32,
      "disclosing_postings": 12,
      "salary_disclosure_pct": 37.5,
      "p25": null,
      "median": 213750,
      "p75": null,
      "lowest_stated_min": 115400,
      "highest_stated_max": 310000,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "7 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_SCIENTIST",
      "comp_currency": "CAD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 1,
      "open_postings": 64,
      "disclosing_postings": 27,
      "salary_disclosure_pct": 42.2,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_SCIENTIST",
      "comp_currency": "PLN",
      "comp_period": "MONTHLY",
      "disclosed_posting_count": 1,
      "open_postings": 64,
      "disclosing_postings": 27,
      "salary_disclosure_pct": 42.2,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "DATA_SCIENTIST",
      "comp_currency": "USD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 25,
      "open_postings": 64,
      "disclosing_postings": 27,
      "salary_disclosure_pct": 42.2,
      "p25": null,
      "median": 236000,
      "p75": null,
      "lowest_stated_min": 123200,
      "highest_stated_max": 376000,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "25 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "ML_ENGINEER",
      "comp_currency": "CAD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 6,
      "open_postings": 89,
      "disclosing_postings": 38,
      "salary_disclosure_pct": 42.7,
      "p25": null,
      "median": 185000,
      "p75": null,
      "lowest_stated_min": 154000,
      "highest_stated_max": 230000,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "6 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "ML_ENGINEER",
      "comp_currency": "USD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 32,
      "open_postings": 89,
      "disclosing_postings": 38,
      "salary_disclosure_pct": 42.7,
      "p25": 203498,
      "median": 233875,
      "p75": 276000,
      "lowest_stated_min": 94300,
      "highest_stated_max": 409500,
      "is_suppressed": false,
      "supports_quartiles": true,
      "suppression_reason": null,
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "AUD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 6,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": 295275,
      "p75": null,
      "lowest_stated_min": 135000,
      "highest_stated_max": 350000,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "6 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "CAD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 188,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": 162812,
      "median": 180995,
      "p75": 205005,
      "lowest_stated_min": 63896,
      "highest_stated_max": 340000,
      "is_suppressed": false,
      "supports_quartiles": true,
      "suppression_reason": null,
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "CAD",
      "comp_period": "HOURLY",
      "disclosed_posting_count": 2,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 2 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "CHF",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 2,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 2 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "EUR",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 223,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": 79275,
      "median": 103600,
      "p75": 129805,
      "lowest_stated_min": 36000,
      "highest_stated_max": 380000,
      "is_suppressed": false,
      "supports_quartiles": true,
      "suppression_reason": null,
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "EUR",
      "comp_period": "MONTHLY",
      "disclosed_posting_count": 1,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "GBP",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 29,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": 125000,
      "p75": null,
      "lowest_stated_min": 58000,
      "highest_stated_max": 319250,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "29 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "ILS",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 2,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 2 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "PLN",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 44,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": 364675,
      "median": 387700,
      "p75": 413750,
      "lowest_stated_min": 128000,
      "highest_stated_max": 584300,
      "is_suppressed": false,
      "supports_quartiles": true,
      "suppression_reason": null,
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "PLN",
      "comp_period": "MONTHLY",
      "disclosed_posting_count": 9,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": 36000,
      "p75": null,
      "lowest_stated_min": 18500,
      "highest_stated_max": null,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "9 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "SEK",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 15,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": 1096500,
      "p75": null,
      "lowest_stated_min": 760000,
      "highest_stated_max": 2546000,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "15 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "SGD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 1,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": null,
      "p75": null,
      "lowest_stated_min": null,
      "highest_stated_max": null,
      "is_suppressed": true,
      "supports_quartiles": false,
      "suppression_reason": "Only 1 postings disclosed salary in this currency and period; 5 are needed to publish a median.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "USD",
      "comp_period": "ANNUAL",
      "disclosed_posting_count": 1633,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": 162000,
      "median": 202350,
      "p75": 232500,
      "lowest_stated_min": 45000,
      "highest_stated_max": 605000,
      "is_suppressed": false,
      "supports_quartiles": true,
      "suppression_reason": null,
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    },
    {
      "role_family": "UNMATCHED",
      "comp_currency": "USD",
      "comp_period": "HOURLY",
      "disclosed_posting_count": 6,
      "open_postings": 5737,
      "disclosing_postings": 2161,
      "salary_disclosure_pct": 37.7,
      "p25": null,
      "median": 56,
      "p75": null,
      "lowest_stated_min": 21,
      "highest_stated_max": 80.3,
      "is_suppressed": false,
      "supports_quartiles": false,
      "suppression_reason": "6 postings disclosed salary here. Enough for a median, not for quartiles, which need 30.",
      "required_caveat": "Observed from postings that disclosed pay. Not adjusted, converted, or annualized. Disclosure is not random, so this describes disclosing employers rather than the market.",
      "computed_at": "2026-09-21T09:23:31.655Z"
    }
  ]
}
