{
  "periods": [
    {
      "listings": 1,
      "listing_type": "apprenticeship",
      "salary_period": "hour",
      "positive_lower_count": 1
    },
    {
      "listings": 24,
      "listing_type": "apprenticeship",
      "salary_period": "year",
      "positive_lower_count": 14
    },
    {
      "listings": 2,
      "listing_type": "job",
      "salary_period": "day",
      "positive_lower_count": 2
    },
    {
      "listings": 341,
      "listing_type": "job",
      "salary_period": "hour",
      "positive_lower_count": 332
    },
    {
      "listings": 1,
      "listing_type": "job",
      "salary_period": "month",
      "positive_lower_count": 1
    },
    {
      "listings": 333,
      "listing_type": "job",
      "salary_period": "year",
      "positive_lower_count": 277
    },
    {
      "listings": 21,
      "listing_type": "job",
      "salary_period": null,
      "positive_lower_count": 0
    }
  ],
  "pay_classes": [
    {
      "listings": 1,
      "pay_class": "hour",
      "listing_type": "apprenticeship"
    },
    {
      "listings": 10,
      "pay_class": "no positive structured lower pay",
      "listing_type": "apprenticeship"
    },
    {
      "listings": 14,
      "pay_class": "year",
      "listing_type": "apprenticeship"
    },
    {
      "listings": 3,
      "pay_class": "commission",
      "listing_type": "job"
    },
    {
      "listings": 331,
      "pay_class": "hour",
      "listing_type": "job"
    },
    {
      "listings": 3,
      "pay_class": "invalid descending range",
      "listing_type": "job"
    },
    {
      "listings": 63,
      "pay_class": "no positive structured lower pay",
      "listing_type": "job"
    },
    {
      "listings": 3,
      "pay_class": "other or missing pay unit",
      "listing_type": "job"
    },
    {
      "listings": 21,
      "pay_class": "voluntary or volunteer-labelled",
      "listing_type": "job"
    },
    {
      "listings": 274,
      "pay_class": "year",
      "listing_type": "job"
    }
  ],
  "snapshot_utc": "2026-11-03T21:38:37.125262Z",
  "by_listing_type": [
    {
      "listings": 25,
      "employers": 7,
      "listing_type": "apprenticeship",
      "stated_openings": 124,
      "multiple_opening_ads": 1,
      "with_numeric_gbp_display": 24,
      "with_positive_structured_lower_pay": 15
    },
    {
      "listings": 55,
      "employers": 9,
      "listing_type": "course",
      "stated_openings": 55,
      "multiple_opening_ads": 0,
      "with_numeric_gbp_display": 0,
      "with_positive_structured_lower_pay": 0
    },
    {
      "listings": 698,
      "employers": 170,
      "listing_type": "job",
      "stated_openings": 5764,
      "multiple_opening_ads": 194,
      "with_numeric_gbp_display": 631,
      "with_positive_structured_lower_pay": 612
    },
    {
      "listings": 9,
      "employers": 9,
      "listing_type": "opportunity",
      "stated_openings": 137,
      "multiple_opening_ads": 4,
      "with_numeric_gbp_display": 1,
      "with_positive_structured_lower_pay": 1
    }
  ],
  "live_unexpired_total": 787,
  "missing_pay_displays": 49,
  "pay_structure_counts": [
    {
      "listings": 2,
      "listing_type": "apprenticeship",
      "pay_structure": "salary"
    },
    {
      "listings": 23,
      "listing_type": "apprenticeship",
      "pay_structure": null
    },
    {
      "listings": 3,
      "listing_type": "job",
      "pay_structure": "commission"
    },
    {
      "listings": 318,
      "listing_type": "job",
      "pay_structure": "salary"
    },
    {
      "listings": 18,
      "listing_type": "job",
      "pay_structure": "voluntary"
    },
    {
      "listings": 359,
      "listing_type": "job",
      "pay_structure": null
    }
  ],
  "structured_pay_cohorts": [
    {
      "listings": 1,
      "pay_class": "hour",
      "ranged_ads": 1,
      "listing_type": "apprenticeship",
      "employment_type": "Full Time",
      "multiple_opening_ads": 0,
      "lowest_quoted_lower_bound": 13.5,
      "highest_quoted_upper_bound": 16.5
    },
    {
      "listings": 14,
      "pay_class": "year",
      "ranged_ads": 6,
      "listing_type": "apprenticeship",
      "employment_type": "Full Time",
      "multiple_opening_ads": 1,
      "lowest_quoted_lower_bound": 11778,
      "highest_quoted_upper_bound": 52000
    },
    {
      "listings": 6,
      "pay_class": "hour",
      "ranged_ads": 2,
      "listing_type": "job",
      "employment_type": "Contract",
      "multiple_opening_ads": 2,
      "lowest_quoted_lower_bound": 12.75,
      "highest_quoted_upper_bound": 31
    },
    {
      "listings": 182,
      "pay_class": "hour",
      "ranged_ads": 146,
      "listing_type": "job",
      "employment_type": "Full Time",
      "multiple_opening_ads": 106,
      "lowest_quoted_lower_bound": 12.21,
      "highest_quoted_upper_bound": 60
    },
    {
      "listings": 132,
      "pay_class": "hour",
      "ranged_ads": 21,
      "listing_type": "job",
      "employment_type": "Part Time",
      "multiple_opening_ads": 10,
      "lowest_quoted_lower_bound": 12.7,
      "highest_quoted_upper_bound": 35
    },
    {
      "listings": 11,
      "pay_class": "hour",
      "ranged_ads": 8,
      "listing_type": "job",
      "employment_type": "Temporary",
      "multiple_opening_ads": 6,
      "lowest_quoted_lower_bound": 12,
      "highest_quoted_upper_bound": 20
    },
    {
      "listings": 3,
      "pay_class": "year",
      "ranged_ads": 3,
      "listing_type": "job",
      "employment_type": "Contract",
      "multiple_opening_ads": 1,
      "lowest_quoted_lower_bound": 26000,
      "highest_quoted_upper_bound": 38525
    },
    {
      "listings": 251,
      "pay_class": "year",
      "ranged_ads": 178,
      "listing_type": "job",
      "employment_type": "Full Time",
      "multiple_opening_ads": 50,
      "lowest_quoted_lower_bound": 5000,
      "highest_quoted_upper_bound": 110000
    },
    {
      "listings": 20,
      "pay_class": "year",
      "ranged_ads": 17,
      "listing_type": "job",
      "employment_type": "Part Time",
      "multiple_opening_ads": 4,
      "lowest_quoted_lower_bound": 18,
      "highest_quoted_upper_bound": 200000
    }
  ],
  "live_unexpired_employers": 189,
  "live_status_expired_by_date": 0,
  "numeric_display_without_structured_lower": 28,
  "definition": "Matches public board search: listing status live and expiration absent or later than snapshot, joined to employer. Advert count, not jobs filled, unique vacancies or representative wages. Structured pay cohorts exclude courses/opportunities, explicit commission/voluntary, volunteer-labelled titles, missing/zero lower bound, descending ranges and non-year/hour units.",
  "fields": {
    "salary_from": "Advertised lower bound, not earned wage",
    "salary_to": "Optional advertised upper bound",
    "salary_period": "Stored unit; year and hour kept separate",
    "salary_display": "Rendered display; may be unstructured or non-numeric",
    "pay_structure": "salary, commission, voluntary or null (legacy)",
    "employment_type": "Employer supplied type; not audited hours or FTE",
    "openings": "Employer stated positions per advert, not verified actual vacancies"
  },
  "cautions": [
    "Annual adverts and hourly adverts cannot be pooled without contracted-hours information.",
    "Even annual Full Time adverts are advertised bounds, not ASHE actual employee pay. No direct median or pay-gap inference is made.",
    "Multiple-opening ads each count once in advert measures. Stated openings are not weighted into pay disclosure rates.",
    "Unpriced legacy records remain in the denominator; current submission validation does not guarantee historical data completeness."
  ],
  "methodology_path": "/editorial/data/2027-bookings-november-2026/"
}
