{
  "dataset": "role-family-snapshot",
  "title": "Open postings by role family",
  "description": "A point-in-time count of open postings in each role family, with the observed population it came from and how much of that population could be placed into a family at all.",
  "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": 8,
  "columns": [
    "role_family",
    "open_postings",
    "total_open_postings",
    "classified_postings",
    "pct_of_observed_postings",
    "classification_coverage_pct",
    "postings_with_salary",
    "salary_disclosure_pct",
    "postings_with_location",
    "postings_remote",
    "postings_hybrid",
    "postings_onsite",
    "postings_remote_unknown",
    "supports_comparison",
    "small_sample_caveat",
    "computed_at"
  ],
  "rows": [
    {
      "role_family": "ANALYTICS_ENGINEER",
      "open_postings": 10,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 0.2,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 8,
      "salary_disclosure_pct": null,
      "postings_with_location": 9,
      "postings_remote": 5,
      "postings_hybrid": 0,
      "postings_onsite": 0,
      "postings_remote_unknown": 5,
      "supports_comparison": false,
      "small_sample_caveat": "Counted in full, but below 30 postings — too small to compare against another family or to read as a trend.",
      "computed_at": "2026-09-21T09:23:31.659Z"
    },
    {
      "role_family": "BI_DEVELOPER",
      "open_postings": 2,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 0,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 0,
      "salary_disclosure_pct": null,
      "postings_with_location": 2,
      "postings_remote": 2,
      "postings_hybrid": 0,
      "postings_onsite": 0,
      "postings_remote_unknown": 0,
      "supports_comparison": false,
      "small_sample_caveat": "Counted in full, but below 30 postings — too small to compare against another family or to read as a trend.",
      "computed_at": "2026-09-21T09:23:31.659Z"
    },
    {
      "role_family": "DATA_ANALYST",
      "open_postings": 32,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 0.5,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 13,
      "salary_disclosure_pct": 40.6,
      "postings_with_location": 30,
      "postings_remote": 16,
      "postings_hybrid": 0,
      "postings_onsite": 0,
      "postings_remote_unknown": 16,
      "supports_comparison": true,
      "small_sample_caveat": null,
      "computed_at": "2026-09-21T09:23:31.659Z"
    },
    {
      "role_family": "DATA_ARCHITECT",
      "open_postings": 1,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 0,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 0,
      "salary_disclosure_pct": null,
      "postings_with_location": 1,
      "postings_remote": 0,
      "postings_hybrid": 0,
      "postings_onsite": 0,
      "postings_remote_unknown": 1,
      "supports_comparison": false,
      "small_sample_caveat": "Counted in full, but below 30 postings — too small to compare against another family or to read as a trend.",
      "computed_at": "2026-09-21T09:23:31.659Z"
    },
    {
      "role_family": "DATA_ENGINEER",
      "open_postings": 32,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 0.5,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 12,
      "salary_disclosure_pct": 37.5,
      "postings_with_location": 26,
      "postings_remote": 7,
      "postings_hybrid": 0,
      "postings_onsite": 3,
      "postings_remote_unknown": 22,
      "supports_comparison": true,
      "small_sample_caveat": null,
      "computed_at": "2026-09-21T09:23:31.659Z"
    },
    {
      "role_family": "DATA_SCIENTIST",
      "open_postings": 64,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 1.1,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 27,
      "salary_disclosure_pct": 42.2,
      "postings_with_location": 52,
      "postings_remote": 29,
      "postings_hybrid": 3,
      "postings_onsite": 0,
      "postings_remote_unknown": 32,
      "supports_comparison": true,
      "small_sample_caveat": null,
      "computed_at": "2026-09-21T09:23:31.659Z"
    },
    {
      "role_family": "ML_ENGINEER",
      "open_postings": 89,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 1.5,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 38,
      "salary_disclosure_pct": 42.7,
      "postings_with_location": 74,
      "postings_remote": 47,
      "postings_hybrid": 3,
      "postings_onsite": 0,
      "postings_remote_unknown": 39,
      "supports_comparison": true,
      "small_sample_caveat": null,
      "computed_at": "2026-09-21T09:23:31.659Z"
    },
    {
      "role_family": "UNMATCHED",
      "open_postings": 5737,
      "total_open_postings": 5967,
      "classified_postings": 230,
      "pct_of_observed_postings": 96.1,
      "classification_coverage_pct": 3.9,
      "postings_with_salary": 2161,
      "salary_disclosure_pct": 37.7,
      "postings_with_location": 4418,
      "postings_remote": 1502,
      "postings_hybrid": 407,
      "postings_onsite": 31,
      "postings_remote_unknown": 3797,
      "supports_comparison": true,
      "small_sample_caveat": null,
      "computed_at": "2026-09-21T09:23:31.659Z"
    }
  ]
}
