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
LocalAuthorityFinancialtable 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
- The business context for DSG and S251 alignment is documented in the ADR DSG-S251 Alignment.
- Find all the ancillary data used in the S251 release in
get_s251_ancillary_data(). - There’s a guide to generating the sen2 file needed for ancillary data.
- There’s also a guide for getting s251 data early from SQL.
- S251 Test Plans