Skip to main content
Financial Benchmarking and Insights Tool

S251

The S251 file is publicly released, but early extracts can be found in SQL.

Get the data

S251 data is published on gov.uk. The files which are expected are in the data sources page. (Note that budget and outturn are separate files.):

  • plannedexpenditure_schools_other_education_la_unrounded_data.csv
  • s251_alleducation_la_regional_national.csv
  • dedicated-schools-grant_2022-to-2023_published-16-03-2023.ods (the dates will change year to year)
  • 2018 SNPP Population persons.csv
  • sen2_estab_caseload.csv
  • High_needs_place_numbers_for_the_2022_to_2023_academic_year_September_2023_FINAL_v1.0.ods (the dates will change year to year)
  • High-needs-local-authority-benchmarking-tool.xlsm

The format of S251 data changed format in 2025. There is a small pivot script which converts the data to a form suitable for the data pipeline written in power query here.

Test the data pipeline runs locally

  • Set up the pipeline locally.
  • Add the new data to the relevant year folder in Azure
  • Configure the schemas for the new files in ../../../../data-pipeline/src/pipeline/input_schemas/local_authority.py.
  • Run the pipeline to test the new data. Debug and fix any issues, eg misconfigured schemas.
  • After configuration, run the pipeline successfully
  • Check that the pipeline has deposited rows in SQL by querying the database tables for LAs (fill in the year):
SELECT * FROM [dbo].[LocalAuthorityFinancial]
WHERE RunId like '<year>' AND RunType like 'default'
SELECT * FROM [dbo].[LocalAuthorityNonFinancial]
WHERE RunId like '<year>' AND RunType like 'default'

Check the outputs

To assure the quality of the S251 ingestion pipeline, specific logical checks targeting budget/outturn alignment, statistical neighbours, and EHCP mapping must be performed.

S251 Budget & Outturn Alignment

S251 processing merges planned expenditure (Budget) with actual regional/national spending (Outturn) data under a standard set of Local Authority (LA) codes.

  • Checks:

    • Select 3 Local Authorities and record their gross/net planned expenditures from the primary CSV files.
    • Query the LocalAuthorityFinancial table and confirm that these budget figures, alongside outturn figures, are written with exactly zero variance.
  • SQL Verification Query:

    -- Checking LA financial rows
    SELECT LocalAuthorityCode, OutturnPlannedExpenditure, BudgetPlannedExpenditure
    FROM [dbo].[LocalAuthorityFinancial]
    WHERE LocalAuthorityCode = '<LACode>' AND RunId = '<year>';
    

Completeness compared to last year check

-- Compare total local authority counts and coverage percentage of demographics/caseloads against the previous year's run
SELECT
    f_curr.RunId AS Run,
    Count(f_curr.LaCode) AS Total_LAs,
    Count(f_curr.Population2To18) * 100 / Count(*) AS Demographics_Population_coverage,
    Count(f_curr.EHCPTotal) * 100 / Count(*) AS EHCP_Total_coverage,
    Count(f_curr.TotalPupils) * 100 / Count(*) AS Pupils_coverage,
    Count(f_curr.SENSupport) * 100 / Count(*) AS SEN_Support_coverage
FROM [dbo].[LocalAuthorityNonFinancial] f_curr
WHERE f_curr.RunId = '2025' AND f_curr.RunType = 'default'
GROUP BY f_curr.RunId
UNION ALL
SELECT
    f_prev.RunId AS Run,
    Count(f_prev.LaCode) AS Total_LAs,
    Count(f_prev.Population2To18) * 100 / Count(*) AS Demographics_Population_coverage,
    Count(f_prev.EHCPTotal) * 100 / Count(*) AS EHCP_Total_coverage,
    Count(f_prev.TotalPupils) * 100 / Count(*) AS Pupils_coverage,
    Count(f_prev.SENSupport) * 100 / Count(*) AS SEN_Support_coverage
FROM [dbo].[LocalAuthorityNonFinancial] f_prev
WHERE f_prev.RunId = '2024' AND f_prev.RunType = 'default'
GROUP BY f_prev.RunId;

Gotchas