{
  "captured_at": "2026-09-17T19:55:44Z",
  "scope": {
    "berlin": "lower(location) like '%berlin%' (Pegel's shared scope rule)",
    "active": "status = 'active'",
    "source": "employer postings read from public ATS feeds; employer-disclosed salary figures only, no estimates"
  },
  "definitions": {
    "disclosed": "salary_min is not null or salary_max is not null",
    "full_range": "salary_min is not null and salary_max is not null",
    "comparable_set": "full_range and salary_currency = 'EUR' and salary_period = 'year'",
    "title_buckets": {
      "senior_lead": "lower(title) matches (senior|sr|lead|staff|principal|head of|director|vp|chief)",
      "junior": "lower(title) matches (junior|entry|graduate|trainee|associate), not matched above",
      "unlabeled": "no keyword match; title-keyword bucketing is approximate"
    }
  },
  "snapshot": {
    "active_berlin_roles": 2980,
    "with_disclosed_salary": 228,
    "companies_with_active_berlin_roles": 339,
    "companies_disclosing_on_at_least_one_role": 64,
    "companies_disclosing_on_90pct_or_more": 10,
    "companies_disclosing_on_90pct_or_more_with_5plus_roles": 1,
    "shape": {
      "full_range": 211,
      "floor_only": 10,
      "ceiling_only": 7,
      "currency": { "EUR": 222, "USD": 6 },
      "period": { "year": 192, "month": 21, "hour": 15, "day": 0 }
    }
  },
  "amounts_eur_year_full_range": {
    "n": 174,
    "floor": { "p25": 55000, "median": 68000, "p75": 85000 },
    "ceiling": { "p25": 68000, "median": 84000, "p75": 111486 },
    "median_band_width_ratio_of_floor": 0.25,
    "by_title_bucket": {
      "senior_lead": { "n": 53, "median_floor": 80000, "median_ceiling": 110000 },
      "junior": { "n": 9, "median_floor": 50000, "median_ceiling": 60000 },
      "unlabeled": { "n": 111, "median_floor": 65000, "median_ceiling": 76100 }
    }
  },
  "largest_disclosers_by_count": [
    { "slug": "thermondo", "roles": 32, "disclosed": 28 },
    { "slug": "almedia", "roles": 49, "disclosed": 27 },
    { "slug": "solaris", "roles": 21, "disclosed": 16 },
    { "slug": "planet-labs", "roles": 16, "disclosed": 13 },
    { "slug": "leapsome", "roles": 14, "disclosed": 10 }
  ],
  "zero_disclosure_examples": [
    { "slug": "zalando", "roles": 75, "disclosed": 0 },
    { "slug": "n26", "roles": 59, "disclosed": 0 },
    { "slug": "helsing", "roles": 46, "disclosed": 0 },
    { "slug": "getyourguide", "roles": 42, "disclosed": 0 },
    { "slug": "delivery-hero", "roles": 33, "disclosed": 0 },
    { "slug": "trade-republic", "roles": 8, "disclosed": 0 }
  ],
  "monthly_cohorts_by_first_seen": {
    "basis": "every Berlin posting first seen in the month, all statuses including expired and hidden; September 2026 is partial through the capture time",
    "rows": [
      { "month": "2026-05", "total": 2399, "disclosed": 133 },
      { "month": "2026-06", "total": 1678, "disclosed": 111 },
      { "month": "2026-07", "total": 1024, "disclosed": 83 },
      { "month": "2026-08", "total": 1264, "disclosed": 81 },
      { "month": "2026-09", "total": 629, "disclosed": 39 }
    ]
  },
  "notes": [
    "One active row reads EUR 400,000 yearly for a senior DevOps role; Pegel treats this as a parser misread of the posting and excludes it from the figures above. Quantile statistics are unaffected by it.",
    "A missing salary bound means Pegel has no extracted amount to show. It does not prove the employer omitted pay from every version of the posting."
  ]
}
