This page offers a free download of the cleaned, harmonized school-level datasets we built from the Department of Education’s (DepEd) public files. They hold nine years of enrollment (SY 2017-18 to SY 2025-26) and the SY 2023-24 school inputs. They also hold the National Achievement Test (NAT), Early Language, Literacy, and Numeracy Assessment (ELLNA), and Comprehensive Rapid Literacy Assessment (CRLA) results. The files come in CSV and Parquet with a codebook, checksums, and terms of use that say how you may use them. Version 1.0 is 66.6 MB in total, and there is no sign-up. If you have read our data reports and wanted the files behind them, this page is for you.

The raw DepEd files are public, but they are not ready to analyze. Labels change between years, blanks mean three different things, and one year is encoded in two character sets. The modules also have to be joined on a school ID that a few hundred schools change. The data quality audit lists every issue in the raw files. These files are what you get after every documented rule is applied, so you can start from the same tables the reports use instead of repeating a week of cleaning.

What you get. Five cleaned datasets (343 documented columns), two helper tables, a codebook, the harmonization rules, SHA-256 checksums and a README. The data files follow DepEd’s terms of use; our code and documentation need our permission to reuse (terms of use). The original DepEd files were never edited; every change is reproducible from the published pipeline.

The files in the release

Each dataset comes as a gzip-compressed CSV, which opens in any tool, and as Parquet, which is smaller, typed, and faster in Python and R. The nine-year enrollment panel is one Parquet file or one CSV per school year.

Dataset File Format Rows Columns Size
School master file, SY 2023-24 school_master_2023.csv.gz CSV (gzip) 60,167 207 8.0 MB
School master file, SY 2023-24 school_master_2023.parquet Parquet 60,167 207 6.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2017-18.csv.gz CSV (gzip), SY 2017-18 61,563 69 2.7 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2018-19.csv.gz CSV (gzip), SY 2018-19 61,916 69 3.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2019-20.csv.gz CSV (gzip), SY 2019-20 61,923 69 3.7 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2020-21.csv.gz CSV (gzip), SY 2020-21 60,957 69 3.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2021-22.csv.gz CSV (gzip), SY 2021-22 60,429 69 3.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2022-23.csv.gz CSV (gzip), SY 2022-23 60,137 69 3.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2023-24.csv.gz CSV (gzip), SY 2023-24 60,167 69 3.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2024-25.csv.gz CSV (gzip), SY 2024-25 60,129 69 3.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_2025-26.csv.gz CSV (gzip), SY 2025-26 60,204 69 3.6 MB
Enrollment panel, SY 2017-18 to SY 2025-26 enrollment_panel_long.parquet Parquet 547,425 69 17.2 MB
School spine, SY 2017-18 to SY 2025-26 school_spine.csv.gz CSV (gzip) 66,967 24 882 KB
School spine, SY 2017-18 to SY 2025-26 school_spine.parquet Parquet 66,967 24 1.4 MB
CRLA reading levels, SY 2025-26 crla_2025_outcomes.csv.gz CSV (gzip) 6,121 33 228 KB
CRLA reading levels, SY 2025-26 crla_2025_outcomes.parquet Parquet 6,121 33 273 KB
Shrunk NAT and ELLNA school means, SY 2023-24 school_assessment_shrunk.csv.gz CSV (gzip) 6,840 10 261 KB
Shrunk NAT and ELLNA school means, SY 2023-24 school_assessment_shrunk.parquet Parquet 6,840 10 255 KB
Likely school-ID changes likely_id_changes.csv CSV 146 7 13 KB
Assessment coverage by division assessment_coverage_by_division.csv CSV 63 10 4 KB

Documentation in the same folder:

File Size What it is
codebook.csv 44 KB Every column of every dataset: type, block, non-blank rows and description
harmonisation_rules.csv 1 KB The label mappings applied to the source files
README.md 6 KB What is in the release and how to read it
LICENSE.txt 2 KB Terms of use and the suggested citation
CHECKSUMS.sha256 SHA-256 of every file
manifest.json The file list with sizes and checksums, for scripts

Every file is at https://data.nash.com.ph/deped-data/v1/. The folder name is the version, so the contents behind a URL never change. A future release will be a new folder, and this page will list what changed.

Quick start

Excel or Google Sheets. Download a .csv.gz file and unzip it. On Windows, use 7-Zip or tar -xzf in a terminal; on macOS, double-click the file. The school master has 60,167 rows and 207 columns, and each enrollment year has about 60,000 rows, so each fits in a sheet. Blank cells are missing values, not zeros. Keep school_id as text if your tool offers the choice, and do not let it drop leading digits.

Python. Parquet needs pyarrow; CSV needs nothing beyond pandas.

import pandas as pd
base = "https://data.nash.com.ph/deped-data/v1"
master = pd.read_parquet(f"{base}/school_master_2023.parquet")
panel = pd.read_parquet(f"{base}/enrollment_panel_long.parquet")
# Public elementary schools with a pupil-teacher ratio above 40, by region
high = master[master.is_public & master.offers_es & (master.ptr > 40)]
print(high.groupby("region_const").size().sort_values(ascending=False))
# National enrollment by year (schools that reported nothing are excluded by design)
print(panel.groupby("sy_label").enrol_total.sum())

R.

library(arrow)
library(dplyr)
base <- "https://data.nash.com.ph/deped-data/v1"
master <- read_parquet(file.path(base, "school_master_2023.parquet"))
panel <- read_parquet(file.path(base, "enrollment_panel_long.parquet"))
master |>
filter(is_public, offers_es) |>
group_by(region_const) |>
summarise(median_ptr = median(ptr, na.rm = TRUE))

Command line. Run curl -O https://data.nash.com.ph/deped-data/v1/school_master_2023.csv.gz, then run sha256sum -c CHECKSUMS.sha256 in the same folder to verify what you downloaded.

What the data covers

Source dataset family Source files Rows Coverage
Enrollment, SY 2017-18 to SY 2025-26 Nine files, one per school year 547,425 school-years, 66,967 school IDs Every school in the Learner Information System, all sectors
Learner types, personnel, facilities, ICT and WASH, SY 2023-24 Five files 60,167 schools All schools listed; the input modules are filled for 47,817 public schools only
NAT Grade 6, SY 2023-24 One file 6,636 schools Selected schools in 44 divisions of five regions (CAR, I, III, VIII, IX)
ELLNA Grade 3, SY 2023-24 One file 5,752 schools The same 44 divisions; public schools
CRLA Grades 1 to 3, SY 2025-26 One file 6,121 schools The same 44 divisions; public schools

The three assessment files are a selected set. They cover 44 of the 63 divisions in five regions (CAR, I, III, VIII, and IX) and about half of the public schools in those divisions. The schools were chosen by a rule DepEd has not published. Nothing in them describes learning outcomes elsewhere. The input modules are blank for private, SUC/LUC (state or local university or college), and overseas schools, because DepEd collects them for public schools only. These modules are personnel, facilities, water, sanitation, and hygiene (WASH), and information and communication technology (ICT). The enrollment files cover every school in the Learner Information System (LIS) each year, in all sectors.

Two line charts. Left: total enrollment in all sectors rising from 26.31 million in SY 2017-18 to 27.79 million in SY 2022-23 and falling to 25.94 million in SY 2025-26, with the two pandemic school years shaded. Right: enrollment by level, elementary falling from 15.8 to 14.3 million, junior high around 7.7 to 8.8 million, senior high rising from 2.7 to 3.8 million, kindergarten falling from 2.3 to 2.0 million.
Figure 1. Total enrollment and enrollment by level, SY 2017-18 to SY 2025-26, from the released enrollment panel. The same table is the first example in the quick start above. Chart: © 2026 Mark Anthony Llego, NASH Reviewer. Download the full-resolution chart (PNG).

How the data was cleaned

Every rule below is applied in code, never by hand, and is counted in the data quality report. The raw files were never edited.

  1. Encoding and headers. The SY 2025-26 enrollment file mixes UTF-8 and Windows-1252 text and uses a different header scheme. It is decoded, and every year is read into one set of column names.
  2. Labels harmonized. Whitespace is stripped, and SY 2025-26’s sector, management, and annex labels and its Yes/No flags are mapped to the coding the other eight years use. Division renames are mapped to the current name, and the CRLA file’s language spellings to the ELLNA technical-notes spelling. The full list is in harmonisation_rules.csv and in the table below.
  3. A constant-boundary region. region_const places every school-year row in its SY 2025-26 region. The ARMM to BARMM change, the Cotabato City and Sulu transfers, and the new Negros Island Region therefore do not break a time series. The published label is kept beside it.
  4. Blanks and zeros. A blank grade cell is 0 only when the school does not offer that level; a blank for a level it does offer is missing. SY 2025-26 writes blanks where earlier years wrote zeros. The 128 offered-but-blank levels in reporting schools are therefore read as 0, and the 46 schools that reported no enrollment at all are flagged as enrol_missing with blank totals. Nothing is imputed.
  5. Public-only modules. Personnel, facilities, WASH, and ICT rows for non-public schools are blank and stay blank. The *_has_data columns say whether a school has any data in a module.
  6. Implausible values flagged, not altered. The files have no negative counts, no scores outside 0 to 100, and no CRLA totals that fail to add up. Schools reporting more teachers or computers than learners are flagged. The only capped value is the derived comp_acad_w, which winsorizes academic computer counts at the 99th percentile because one school reports 15,699 tablets. The raw count is kept in comp_acad_total.
  7. School IDs never re-linked. The 146 schools that appear to change ID are listed in likely_id_changes.csv. The panel counts each as an exit plus an entry, because DepEd publishes no mapping.
  8. Types made consistent. Counts are integers (blank when missing), flags are true/false, shares are proportions from 0 to 1, and the same column has the same type in CSV and Parquet.

Harmonization rules

Field Source label Released label
sector SUCsLUCs SUC/LUC
school_management DepED Managed DepEd
school_management DepEd Managed DepEd
school_management SUC Managed SUC
school_management DOST Managed DOST
school_management Other GA Managed Other GA
school_management SCHOOL ABROAD PSO
school_management Local International School International School
annex_status School with no Annexes Standalone School
annex_status Mother school Mother School
annex_status Annex or Extension school(s) Annex/Extension School
annex_status Mobile School(s)/Center(s) Mobile School/Center
region ARMM BARMM
division Compostela Valley Davao De Oro
division San Jose del Monte City City of San Jose Del Monte
division Munoz Science City Science City of Muñoz
division Taguig Taguig City and Pateros
division Special Geographic Division Special Geographic Area Division
language (CRLA to ELLNA spelling) Ilocano Ilokano/Iloko
language (CRLA to ELLNA spelling) Sinugbuanong Binisaya Sinugbuanong Binisaya/Cebuano
language (CRLA to ELLNA spelling) Pangasinan Pangasinan/Pangasinense
language (CRLA to ELLNA spelling) Bahasa Sug Tausug
language (CRLA to ELLNA spelling) Chavacano Chavacano/Chabacano
offers_es / offers_jhs / offers_shs Yes True
offers_es / offers_jhs / offers_shs No False
offers_es / offers_jhs / offers_shs True True
offers_es / offers_jhs / offers_shs False False
region_const ARMM; Cotabato City (Region XII); Sulu (BARMM) BARMM; BARMM; Region IX
region_const 21 Negros Island Region divisions under Region VI or VII NIR

File-by-file guide to the columns

Columns are grouped as in codebook.csv. “Non-blank rows” is the number of rows with a value, which shows where a column applies; for example, personnel columns are filled for public schools only.

School master file, SY 2023-24

This file has one row per school in DepEd’s SY 2023-24 files: 60,167 schools in all sectors. Each row holds geography, enrollment by grade and sex, learner types, teachers, classrooms and buildings, toilets, water, electricity and internet, and computers and ICT equipment. It also holds the NAT, ELLNA, and CRLA results where they exist, and the derived ratios the report uses. Input modules are blank for non-public schools. Join the other SY 2023-24 files on school_id; the learners, personnel, facilities, ICT, and WASH files all contain the same 60,167 IDs.

Identification

Column Type Non-blank rows Description
school_id integer 60,167 DepEd six-digit school identifier, as published; unique within each file and the key for joining files. A minority of schools change ID between years (see likely_id_changes.csv).
school_name text 60,167 Official school name as published for that school year.

Geography

Column Type Non-blank rows Description
region text 60,167 Region label as published for that school year (ARMM becomes BARMM from SY 2019-20; NIR appears from SY 2024-25).
region_const text 60,167 Region under SY 2025-26 boundaries, for constant-boundary comparisons across years: ARMM and Cotabato City to BARMM, the 21 Negros Island Region divisions to NIR, Sulu to Region IX.
division text 60,167 Schools division as published, with renames mapped to the current name (for example Compostela Valley to Davao De Oro). Division names are not unique nationally; combine with region.
province text 60,167 Province; ‘PSO’ for Philippine Schools Overseas.
school_district text 60,167 School district; the overseas city for Philippine Schools Overseas. Blank in SY 2017-18, when the variable did not exist.
legislative_district text 60,167 Legislative district.
municipality text 60,167 Municipality or city.
barangay text 60,097 Barangay.

Classification

Column Type Non-blank rows Description
sector text 60,167 Public, Private, SUC/LUC (state or local university or college) or PSO (Philippine School Overseas). SY 2025-26’s ‘SUCsLUCs’ is mapped to ‘SUC/LUC’.
school_management text 60,167 Management type as published, harmonised to one label set: DepEd, Local Government, SUC, LUC, DOST, Other GA, Sectarian, Non-Sectarian, International School, PSO, Tahderiyyah (SY 2018-19 only).
annex_status text 60,167 Standalone School, Mother School, Annex/Extension School or Mobile School/Center; blank before SY 2019-20. SY 2025-26’s labels are mapped to these.
offers_es boolean 60,167 True when the school offers elementary (Kindergarten to Grade 6); SY 2025-26’s Yes/No mapped to True/False.
offers_jhs boolean 60,167 True when the school offers junior high school (Grades 7 to 10).
offers_shs boolean 60,167 True when the school offers senior high school (Grades 11 and 12).
offers_monograde boolean 49,152 True when the school reports monograde elementary classes (learners file).
offers_multigrade boolean 49,152 True when the school reports multigrade elementary classes (learners file).
is_public text 60,167 True when sector is Public.
is_annex text 60,167 True when annex_status is Annex/Extension School.

Enrollment

Column Type Non-blank rows Description
enrol_total integer 60,167 Total enrollment, Kindergarten to Grade 12 including non-graded learners: the sum of every sex-by-grade cell in the source file.
enrol_es integer 60,167 Elementary enrollment: Kindergarten, Grades 1 to 6 and elementary non-graded.
enrol_jhs integer 60,167 Junior high school enrollment: Grades 7 to 10 and junior high non-graded.
enrol_shs integer 60,167 Senior high school enrollment: Grades 11 and 12, all strands.
enrol_k integer 60,167 Kindergarten enrollment, both sexes.
enrol_g1 integer 60,167 Grade 1 enrollment, both sexes.
enrol_g2 integer 60,167 Grade 2 enrollment, both sexes.
enrol_g3 integer 60,167 Grade 3 enrollment, both sexes.
enrol_g4 integer 60,167 Grade 4 enrollment, both sexes.
enrol_g5 integer 60,167 Grade 5 enrollment, both sexes.
enrol_g6 integer 60,167 Grade 6 enrollment, both sexes.
enrol_g7 integer 60,167 Grade 7 enrollment, both sexes.
enrol_g8 integer 60,167 Grade 8 enrollment, both sexes.
enrol_g9 integer 60,167 Grade 9 enrollment, both sexes.
enrol_g10 integer 60,167 Grade 10 enrollment, both sexes.
enrol_g11 integer 60,167 Grade 11 enrollment, both sexes.
enrol_g12 integer 60,167 Grade 12 enrollment, both sexes.
enrol_male integer 60,167 Male learners, all grades.
enrol_female integer 60,167 Female learners, all grades.

Learner types

Column Type Non-blank rows Description
ip_total integer 60,167 Learners who are members of Indigenous Peoples, all grades.
balikaral_total integer 60,167 Balik-Aral (returning) learners, all grades.
alive_total integer 58,810 Learners in Arabic Language and Islamic Values Education (ALIVE), all grades.
adm_total integer 47,560 Learners in alternative delivery modes: distance education, e-IMPACT, MISOSA, the Open High School Program and other schooling arrangements.
mono_total integer 49,343 Elementary learners in monograde classes.
multi_total integer 49,343 Elementary learners in multigrade classes.
multigrade_share_es number 49,152 multi_total divided by (mono_total + multi_total); blank when both are zero.
ip_share number 60,052 ip_total divided by enrol_total.

Personnel

Column Type Non-blank rows Description
teachers_nat_es integer 39,329 Nationally funded teaching positions, elementary.
teachers_nat_jhs integer 9,966 Nationally funded teaching positions, junior high school.
teachers_nat_shs integer 7,530 Nationally funded teaching positions, senior high school.
teachers_loc_es integer 39,343 Locally funded teaching positions, elementary.
teachers_loc_jhs integer 10,560 Locally funded teaching positions, junior high school.
teachers_loc_shs integer 7,741 Locally funded teaching positions, senior high school.
teachers_es integer 39,343 Teaching positions, elementary, nationally and locally funded.
teachers_jhs integer 10,560 Teaching positions, junior high school, nationally and locally funded.
teachers_shs integer 7,741 Teaching positions, senior high school, nationally and locally funded.
teachers_nat integer 47,619 Nationally funded teaching positions, all levels: teachers, master teachers, SPED/SNED and special science teachers and instructors (the personnel file’s position columns).
teachers_loc integer 47,817 Locally funded teachers, all levels (LGU, PTA and other local funding).
teachers_total integer 47,817 teachers_nat + teachers_loc.
master_teachers integer 23,813 Master Teacher positions, all levels (nationally funded).
school_heads integer 47,817 School principal, assistant school principal and head teacher positions, all levels.
personnel_has_data boolean 60,167 True when any personnel column is filled; False for non-public schools, which the personnel file leaves blank.

Facilities

Column Type Non-blank rows Description
rooms_es integer 38,677 Instructional classrooms, elementary.
rooms_jhs integer 10,561 Instructional classrooms, junior high school.
rooms_shs integer 7,743 Instructional classrooms, senior high school.
rooms_total integer 47,210 Instructional classrooms, all levels.
rooms_noninstr_total integer 35,585 Non-instructional rooms, all levels.
buildings_total integer 47,817 School buildings in the inventory, all conditions.
buildings_major_repair_or_worse integer 47,817 Buildings needing major repair, for condemnation or for demolition.
buildings_bad_share number 47,185 buildings_major_repair_or_worse divided by buildings_total.
makeshift_rooms integer 47,817 Makeshift rooms, elementary and high school.
temporary_learning_spaces integer 47,817 Temporary learning spaces, elementary and high school.
es_covered_court boolean 39,345 Whether the elementary site has a covered court (as reported; blank when not reported).
hs_covered_court boolean 10,819 Whether the high school site has a covered court (as reported; blank when not reported).
es_gymnasium boolean 39,345 Whether the elementary site has a gymnasium (as reported; blank when not reported).
hs_gymnasium boolean 10,819 Whether the high school site has a gymnasium (as reported; blank when not reported).
es_perimeter_fence_permanent boolean 39,345 Whether the elementary site has a permanent perimeter fence (as reported; blank when not reported).
hs_perimeter_fence_permanent boolean 10,819 Whether the high school site has a permanent perimeter fence (as reported; blank when not reported).
es_playground boolean 39,345 Whether the elementary site has a playground (as reported; blank when not reported).
hs_playground boolean 10,819 Whether the high school site has a playground (as reported; blank when not reported).
es_solar_panel boolean 39,345 Whether the elementary site has solar panels (as reported; blank when not reported).
hs_solar_panel boolean 10,819 Whether the high school site has solar panels (as reported; blank when not reported).
es_road_paved boolean 2,347 Whether the elementary site has a paved access road (as reported; blank when not reported).
hs_road_paved boolean 9,468 Whether the high school site has a paved access road (as reported; blank when not reported).
es_accessible_private_4wheel boolean 2,347 Whether the elementary site has access by private four-wheeled vehicle (as reported; blank when not reported).
hs_accessible_private_4wheel boolean 10,090 Whether the high school site has access by private four-wheeled vehicle (as reported; blank when not reported).
es_accessible_boat boolean 2,347 Whether the elementary site has access by boat (as reported; blank when not reported).
hs_accessible_boat boolean 3,108 Whether the high school site has access by boat (as reported; blank when not reported).
es_accessible_walking_hiking boolean 2,347 Whether the elementary site has access only by walking or hiking (as reported; blank when not reported).
hs_accessible_walking_hiking boolean 9,962 Whether the high school site has access only by walking or hiking (as reported; blank when not reported).
facilities_has_data boolean 60,167 True when any facilities column is filled; False for non-public schools.

WASH

Column Type Non-blank rows Description
toilets_es integer 39,346 Toilet bowls, elementary: attached and standalone, male, female, PWD and shared.
toilets_nonfunc_es integer 39,346 Non-functional toilet bowls, elementary.
handwash_func_es integer 36,200 Functional handwashing facilities (with or without soap), elementary, group and individual.
handwash_soap_es integer 34,974 Functional handwashing facilities with soap, elementary, group and individual.
water_es boolean 39,343 Whether the elementary level has a water supply.
elec_grid_es boolean 39,345 Whether the elementary level has grid electricity.
elec_any_es boolean 39,345 Whether the elementary level has grid or off-grid electricity.
internet_es boolean 39,343 Whether the elementary level has an internet connection.
toilets_jhs integer 10,561 Toilet bowls, junior high school: attached and standalone, male, female, PWD and shared.
toilets_nonfunc_jhs integer 10,561 Non-functional toilet bowls, junior high school.
handwash_func_jhs integer 9,233 Functional handwashing facilities (with or without soap), junior high school, group and individual.
handwash_soap_jhs integer 8,498 Functional handwashing facilities with soap, junior high school, group and individual.
water_jhs boolean 10,560 Whether the junior high school level has a water supply.
elec_grid_jhs boolean 10,561 Whether the junior high school level has grid electricity.
elec_any_jhs boolean 10,561 Whether the junior high school level has grid or off-grid electricity.
internet_jhs boolean 10,560 Whether the junior high school level has an internet connection.
toilets_shs integer 7,743 Toilet bowls, senior high school: attached and standalone, male, female, PWD and shared.
toilets_nonfunc_shs integer 7,743 Non-functional toilet bowls, senior high school.
handwash_func_shs integer 6,585 Functional handwashing facilities (with or without soap), senior high school, group and individual.
handwash_soap_shs integer 6,002 Functional handwashing facilities with soap, senior high school, group and individual.
water_shs boolean 7,741 Whether the senior high school level has a water supply.
elec_grid_shs boolean 7,743 Whether the senior high school level has grid electricity.
elec_any_shs boolean 7,743 Whether the senior high school level has grid or off-grid electricity.
internet_shs boolean 7,741 Whether the senior high school level has an internet connection.
toilets_total integer 47,818 Toilet bowls, all levels: attached and standalone, male, female, PWD and shared.
toilets_nonfunc_total integer 47,818 Non-functional toilet bowls, all levels.
handwash_func_total integer 44,186 Functional handwashing facilities, all levels, group and individual, with or without soap.
water_any boolean 47,817 True when any reporting level has a water supply.
water_all boolean 47,817 True when every reporting level has a water supply.
elec_any_any boolean 47,817 True when any reporting level has grid or off-grid electricity.
elec_any_all boolean 47,817 True when every reporting level has grid or off-grid electricity.
internet_any boolean 47,817 True when any reporting level has an internet connection.
internet_all boolean 47,817 True when every reporting level has an internet connection.
wash_has_data boolean 60,167 True when any WASH column is filled; False for non-public schools.

ICT

Column Type Non-blank rows Description
comp_acad_es integer 39,343 Computers for academic use, elementary.
comp_admin_es integer 39,343 Computers for administrative use, elementary.
comp_acad_jhs integer 10,560 Computers for academic use, junior high school.
comp_admin_jhs integer 10,560 Computers for administrative use, junior high school.
comp_acad_shs integer 7,741 Computers for academic use, senior high school.
comp_admin_shs integer 7,741 Computers for administrative use, senior high school.
comp_acad_total integer 47,817 Computers for academic use, all levels: desktops, laptops, all-in-ones, tablets, tablet PCs and virtual terminals, as reported (see comp_acad_w for the capped version).
comp_admin_total integer 47,817 Computers for administrative use, all levels.
comp_acad_dcp integer 47,817 Academic computers provided through the DepEd Computerization Program.
projector_total integer 47,817 Projectors, all levels.
smart_tv_total integer 47,817 Smart TVs, all levels.
led_tv_total integer 47,817 LED TVs, all levels.
printer_total integer 47,817 Printers, all levels.
router_total integer 47,817 Routers, all levels.
ict_has_data boolean 60,167 True when any ICT column is filled; False for non-public schools.

Assessment: NAT

Column Type Non-blank rows Description
nat_n_test_takers integer 6,636 Grade 6 learners tested in the SY 2023-24 National Achievement Test (a sample, median six per school).
nat_filipino_mps number 6,636 School mean percentage score in Filipino, Grade 6 NAT SY 2023-24 (0 to 100).
nat_math_mps number 6,636 School mean percentage score in Mathematics, Grade 6 NAT SY 2023-24 (0 to 100).
nat_english_mps number 6,636 School mean percentage score in English, Grade 6 NAT SY 2023-24 (0 to 100).
nat_science_mps number 6,636 School mean percentage score in Science, Grade 6 NAT SY 2023-24 (0 to 100).
nat_araling_panlipunan_mps number 6,636 School mean percentage score in Araling Panlipunan, Grade 6 NAT SY 2023-24 (0 to 100).
nat_overall_mps number 6,636 School mean percentage score, NAT Grade 6 SY 2023-24, all subjects.

Assessment: ELLNA

Column Type Non-blank rows Description
ellna_language text 5,752 Language group of the school in the ELLNA file (technical-notes spelling).
ellna_n_test_takers integer 5,752 Grade 3 learners tested in the SY 2023-24 ELLNA.
ellna_english_mps number 5,752 School mean percentage score in English, Grade 3 ELLNA SY 2023-24 (0 to 100); blank where the component was not administered to the school’s language group.
ellna_filipino_mps number 5,752 School mean percentage score in Filipino, Grade 3 ELLNA SY 2023-24 (0 to 100); blank where the component was not administered to the school’s language group.
ellna_numeracy_mps number 5,598 School mean percentage score in Numeracy, Grade 3 ELLNA SY 2023-24 (0 to 100); blank where the component was not administered to the school’s language group.
ellna_mother_tongue_mps number 3,827 School mean percentage score in Mother Tongue, Grade 3 ELLNA SY 2023-24 (0 to 100); blank where the component was not administered to the school’s language group.
ellna_overall_mps number 5,752 School mean percentage score, ELLNA Grade 3 SY 2023-24, all components.

Assessment: CRLA

Column Type Non-blank rows Description
crla_language text 6,090 Declared language of instruction in the CRLA file, mapped to the ELLNA spelling where both files name the same language.
crla_n integer 6,090 Grade 1 to 3 learners assessed in the SY 2025-26 CRLA.
crla_region text 6,090 Region as given in the CRLA file (SY 2025-26).
crla_division text 6,090 Division as given in the CRLA file (SY 2025-26).
crla_low_emerging_n integer 6,090 Assessed Grade 1 to 3 learners reading at Low Emerging, all grades and languages.
crla_high_emerging_n integer 6,090 Assessed Grade 1 to 3 learners reading at High Emerging, all grades and languages.
crla_developing_n integer 6,090 Assessed Grade 1 to 3 learners reading at Developing, all grades and languages.
crla_transitioning_n integer 6,090 Assessed Grade 1 to 3 learners reading at Transitioning, all grades and languages.
crla_at_grade_level_n integer 6,090 Assessed Grade 1 to 3 learners reading at At Grade Level, all grades and languages.
crla_at_grade_share number 6,090 Share of assessed learners reading At Grade Level, as a proportion from 0 to 1 (the source’s *_percent column).
crla_low_emerging_share number 6,090 Share of assessed learners at Low Emerging, as a proportion from 0 to 1.
crla_g1_mt_n integer 6,090 Grade 1 learners assessed in Mother Tongue.
crla_g1_mt_at_grade_n integer 6,090 Grade 1 learners reading At Grade Level in Mother Tongue.
crla_g1_mt_low_emerging_n integer 6,090 Grade 1 learners reading at Low Emerging in Mother Tongue.
crla_g2_mt_n integer 6,090 Grade 2 learners assessed in Mother Tongue.
crla_g2_mt_at_grade_n integer 6,090 Grade 2 learners reading At Grade Level in Mother Tongue.
crla_g2_mt_low_emerging_n integer 6,090 Grade 2 learners reading at Low Emerging in Mother Tongue.
crla_g2_fil_n integer 6,090 Grade 2 learners assessed in Filipino.
crla_g2_fil_at_grade_n integer 6,090 Grade 2 learners reading At Grade Level in Filipino.
crla_g2_fil_low_emerging_n integer 6,090 Grade 2 learners reading at Low Emerging in Filipino.
crla_g3_mt_n integer 6,090 Grade 3 learners assessed in Mother Tongue.
crla_g3_mt_at_grade_n integer 6,090 Grade 3 learners reading At Grade Level in Mother Tongue.
crla_g3_mt_low_emerging_n integer 6,090 Grade 3 learners reading at Low Emerging in Mother Tongue.
crla_g3_fil_n integer 6,090 Grade 3 learners assessed in Filipino.
crla_g3_fil_at_grade_n integer 6,090 Grade 3 learners reading At Grade Level in Filipino.
crla_g3_fil_low_emerging_n integer 6,090 Grade 3 learners reading at Low Emerging in Filipino.
crla_g3_eng_n integer 6,090 Grade 3 learners assessed in English.
crla_g3_eng_at_grade_n integer 6,090 Grade 3 learners reading At Grade Level in English.
crla_g3_eng_low_emerging_n integer 6,090 Grade 3 learners reading at Low Emerging in English.

Assessment coverage

Column Type Non-blank rows Description
in_nat boolean 60,167 True when the school has a NAT result.
in_ellna boolean 60,167 True when the school has an ELLNA result.
in_crla boolean 60,167 True when the school has a CRLA result.
in_five_regions boolean 60,167 True when the school’s region is one of the five the assessments cover (CAR, I, III, VIII, IX).
in_covered_division boolean 60,167 True when the school’s division is one of the 44 with assessment results.

Derived indicators

Column Type Non-blank rows Description
nat_band text 6,636 Technical-notes proficiency band of the school’s NAT mean: Not Proficient (0-24), Low Proficient (25-49), Nearly Proficient (50-74), Proficient (75-89), Highly Proficient (90-100).
ellna_band text 5,752 Technical-notes proficiency band of the school’s ELLNA mean (same cut-offs as nat_band).
nat_proficient_school boolean 6,636 True when the school’s NAT overall mean is 75 or higher.
ellna_proficient_school boolean 5,752 True when the school’s ELLNA overall mean is 75 or higher.
ptr number 47,674 Pupil-teacher ratio: enrol_total / teachers_total, public schools with learners and at least one teacher; blank otherwise.
ptr_es number 39,334 Elementary pupil-teacher ratio: enrol_es / teachers_es, public schools offering elementary.
pcr number 46,939 Pupil-classroom ratio: enrol_total / rooms_total, public schools with learners and at least one instructional classroom.
pcr_es number 38,674 Elementary pupil-classroom ratio: enrol_es / rooms_es.
ltr number 46,454 Learner-toilet ratio: enrol_total / toilets_total, public schools with learners and at least one toilet bowl.
ltr_es number 38,162 Elementary learner-toilet ratio: enrol_es / toilets_es.
no_functional_toilet boolean 47,818 True when a public school reports zero toilet bowls.
handwash_per_100 number 44,186 Functional handwashing facilities per 100 learners, public schools.
comp_acad_w integer 47,817 comp_acad_total winsorised (capped) at the public-school 99th percentile, to limit obvious entry errors.
computers_per_100 number 47,813 comp_acad_w per 100 learners, public schools.
clr number 36,040 Computer-learner ratio: enrol_total / comp_acad_w, public schools with learners and at least one academic computer.
has_academic_computer boolean 47,817 True when a public school reports at least one academic computer.
log_enrol number 60,052 Natural logarithm of enrol_total (schools with learners).
teachers_outnumber_learners boolean 47,818 True when a public school reports more teachers than learners (an implausible value flagged by the audit).
computers_outnumber_learners boolean 47,818 True when a public school reports more academic computers than learners (flagged by the audit).

Enrollment panel, SY 2017-18 to SY 2025-26

This file has one row per school for each school year in which it appears: 547,425 rows. Each row holds enrollment by grade, level, sex, and senior-high strand, with harmonized labels, constant-boundary regions, and entry, exit, and year-on-year columns. The CSV is split by school year; the Parquet file holds all nine years. A school-year is one row, so a school present in every year has nine rows.

Identification

Column Type Non-blank rows Description
school_id integer 547,425 DepEd six-digit school identifier, as published; unique within each file and the key for joining files. A minority of schools change ID between years (see likely_id_changes.csv).
school_name text 547,425 Official school name as published for that school year.

Geography

Column Type Non-blank rows Description
region text 547,425 Region label as published for that school year (ARMM becomes BARMM from SY 2019-20; NIR appears from SY 2024-25).
region_const text 547,425 Region under SY 2025-26 boundaries, for constant-boundary comparisons across years: ARMM and Cotabato City to BARMM, the 21 Negros Island Region divisions to NIR, Sulu to Region IX.
division text 547,425 Schools division as published, with renames mapped to the current name (for example Compostela Valley to Davao De Oro). Division names are not unique nationally; combine with region.
province text 547,425 Province; ‘PSO’ for Philippine Schools Overseas.
school_district text 485,862 School district; the overseas city for Philippine Schools Overseas. Blank in SY 2017-18, when the variable did not exist.
legislative_district text 547,425 Legislative district.
municipality text 547,425 Municipality or city.
barangay text 542,833 Barangay.

Classification

Column Type Non-blank rows Description
sector text 547,425 Public, Private, SUC/LUC (state or local university or college) or PSO (Philippine School Overseas). SY 2025-26’s ‘SUCsLUCs’ is mapped to ‘SUC/LUC’.
school_management text 547,425 Management type as published, harmonised to one label set: DepEd, Local Government, SUC, LUC, DOST, Other GA, Sectarian, Non-Sectarian, International School, PSO, Tahderiyyah (SY 2018-19 only).
annex_status text 423,946 Standalone School, Mother School, Annex/Extension School or Mobile School/Center; blank before SY 2019-20. SY 2025-26’s labels are mapped to these.
offers_es boolean 547,425 True when the school offers elementary (Kindergarten to Grade 6); SY 2025-26’s Yes/No mapped to True/False.
offers_jhs boolean 547,425 True when the school offers junior high school (Grades 7 to 10).
offers_shs boolean 547,425 True when the school offers senior high school (Grades 11 and 12).
coc_2025 text 60,204 Modified Curricular Offering Classification, published only in SY 2025-26.

Time

Column Type Non-blank rows Description
sy integer 547,425 School year start: 2017 means SY 2017-18.
sy_label text 547,425 School year as text, for example ‘SY 2017-18’.

Enrollment

Column Type Non-blank rows Description
enrol_total integer 547,379 Total enrollment, Kindergarten to Grade 12 including non-graded learners: the sum of every sex-by-grade cell in the source file.
enrol_es integer 547,379 Elementary enrollment: Kindergarten, Grades 1 to 6 and elementary non-graded.
enrol_jhs integer 547,379 Junior high school enrollment: Grades 7 to 10 and junior high non-graded.
enrol_shs integer 547,379 Senior high school enrollment: Grades 11 and 12, all strands.
enrol_k integer 547,385 Kindergarten enrollment, both sexes.
enrol_g1 integer 547,385 Grade 1 enrollment, both sexes.
enrol_g2 integer 547,385 Grade 2 enrollment, both sexes.
enrol_g3 integer 547,385 Grade 3 enrollment, both sexes.
enrol_g4 integer 547,385 Grade 4 enrollment, both sexes.
enrol_g5 integer 547,385 Grade 5 enrollment, both sexes.
enrol_g6 integer 547,385 Grade 6 enrollment, both sexes.
enrol_g7 integer 547,396 Grade 7 enrollment, both sexes.
enrol_g8 integer 547,396 Grade 8 enrollment, both sexes.
enrol_g9 integer 547,396 Grade 9 enrollment, both sexes.
enrol_g10 integer 547,396 Grade 10 enrollment, both sexes.
enrol_g11 integer 547,305 Grade 11 enrollment, both sexes.
enrol_g12 integer 547,305 Grade 12 enrollment, both sexes.
enrol_esng integer 547,385 Elementary non-graded learners.
enrol_jhsng integer 532,296 Junior high non-graded learners; blank in SY 2018-19, when the variable did not exist.
enrol_male integer 547,379 Male learners, all grades.
enrol_female integer 547,379 Female learners, all grades.
enrol_es_male integer 547,388 Male learners, elementary.
enrol_es_female integer 547,388 Female learners, elementary.
enrol_jhs_male integer 547,412 Male learners, junior high school.
enrol_jhs_female integer 547,412 Female learners, junior high school.
enrol_shs_male integer 547,414 Male learners, senior high school.
enrol_shs_female integer 547,414 Female learners, senior high school.
shs_abm integer 547,305 Senior high enrollment in Accountancy, Business and Management (ABM), Grades 11 and 12, both sexes.
shs_arts integer 547,305 Senior high enrollment in Arts and Design, Grades 11 and 12, both sexes.
shs_gas integer 547,305 Senior high enrollment in General Academic Strand (GAS), Grades 11 and 12, both sexes.
shs_humss integer 547,305 Senior high enrollment in Humanities and Social Sciences (HUMSS), Grades 11 and 12, both sexes.
shs_maritime integer 547,305 Senior high enrollment in Maritime, Grades 11 and 12, both sexes.
shs_sports integer 547,305 Senior high enrollment in Sports, Grades 11 and 12, both sexes.
shs_stem integer 547,305 Senior high enrollment in Science, Technology, Engineering and Mathematics (STEM), Grades 11 and 12, both sexes.
shs_tvl integer 547,305 Senior high enrollment in Technical-Vocational-Livelihood (TVL), Grades 11 and 12, both sexes.
shs_unique integer 461,694 Senior high learners in unique or other programs; reported from SY 2024-25.
shs_sshs_acad integer 60,084 Special senior high school academic programs; reported from SY 2025-26.
shs_sshs_techpro integer 60,084 Special senior high school technical-professional programs; reported from SY 2025-26.

Data quality

Column Type Non-blank rows Description
enrol_missing boolean 547,425 True when the school left every grade cell blank that year (46 schools in SY 2025-26): its enrollment columns are blank, not zero.

Panel

Column Type Non-blank rows Description
present boolean 547,425 True: the school appears in this year’s enrollment file (every row of this long file).
first_sy integer 547,425 First school year (start year) in which the school ID appears, SY 2017-18 to SY 2025-26.
last_sy integer 547,425 Last school year (start year) in which the school ID appears.
n_gap_years integer 547,425 Years between first_sy and last_sy in which the school ID is absent (temporary non-reporting).
present_prev_year boolean 547,425 True when the school ID appears in the previous school year’s file.
present_next_year boolean 547,425 True when the school ID appears in the next school year’s file.
is_entry boolean 547,425 True when the school ID is absent in the previous year (not computed for SY 2017-18).
is_exit boolean 547,425 True when the school ID is absent in the next year (not computed for SY 2025-26).
enrol_total_prev integer 480,458 enrol_total in the school’s previous row (its previous year present).
sy_prev integer 480,458 School year of the previous row.
yoy_growth number 478,992 enrol_total / enrol_total_prev - 1, only when the previous row is the immediately preceding year; blank otherwise.

School spine

This file has one row per school ID ever observed in the nine enrollment files: 66,967 IDs. Each row holds the first and last year, gaps, entry and exit flags, and the sector and location in the last year present. Use it to pick a balanced panel (present_all_years) or to see when a school entered or left the files.

Identification

Column Type Non-blank rows Description
school_id integer 66,967 DepEd six-digit school identifier, as published; unique within each file and the key for joining files. A minority of schools change ID between years (see likely_id_changes.csv).
school_name_last text 66,967 School name in the school’s last year present.

Panel

Column Type Non-blank rows Description
first_sy integer 66,967 First school year (start year) in which the school ID appears.
last_sy integer 66,967 Last school year (start year) in which the school ID appears.
n_years_present integer 66,967 Number of school years (of nine) in which the school ID appears.
n_gap_years integer 66,967 Years between first_sy and last_sy in which the ID is absent.
present_all_years boolean 66,967 True when the ID appears in all nine years.
entered_after_2017 boolean 66,967 True when first_sy is later than 2017.
exited_before_2025 boolean 66,967 True when last_sy is earlier than 2025.
re_entered boolean 66,967 True when the ID is absent in some year between first_sy and last_sy and reappears.
present_2017 boolean 66,967 True when the school ID appears in SY 2017-18.
present_2018 boolean 66,967 True when the school ID appears in SY 2018-19.
present_2019 boolean 66,967 True when the school ID appears in SY 2019-20.
present_2020 boolean 66,967 True when the school ID appears in SY 2020-21.
present_2021 boolean 66,967 True when the school ID appears in SY 2021-22.
present_2022 boolean 66,967 True when the school ID appears in SY 2022-23.
present_2023 boolean 66,967 True when the school ID appears in SY 2023-24.
present_2024 boolean 66,967 True when the school ID appears in SY 2024-25.
present_2025 boolean 66,967 True when the school ID appears in SY 2025-26.

Classification

Column Type Non-blank rows Description
sector_first text 66,967 Sector in the school’s first year present.
sector_last text 66,967 Sector in the school’s last year present.
sector_changed text 66,967 True when sector_first differs from sector_last.

Geography

Column Type Non-blank rows Description
region_const_last text 66,967 region_const in the school’s last year present.
division_last text 66,967 Division in the school’s last year present.

CRLA reading levels, SY 2025-26

This file has one row per assessed school: 6,121 schools. Each row holds the learners at each CRLA reading level by grade and language, the school-level shares as proportions, and the SY 2025-26 Grade 1 to 3 enrollment. The source README calls the share columns percentages; they are proportions from 0 to 1 and are released as such.

Identification

Column Type Non-blank rows Description
school_id integer 6,121 DepEd six-digit school identifier, as published; unique within each file and the key for joining files. A minority of schools change ID between years (see likely_id_changes.csv).

Assessment: CRLA

Column Type Non-blank rows Description
crla_language text 6,121 Declared language of instruction in the CRLA file, mapped to the ELLNA spelling where both files name the same language.
crla_n integer 6,121 Grade 1 to 3 learners assessed in the SY 2025-26 CRLA.
crla_region text 6,121 Region as given in the CRLA file (SY 2025-26).
crla_division text 6,121 Division as given in the CRLA file (SY 2025-26).
crla_low_emerging_n integer 6,121 Assessed Grade 1 to 3 learners reading at Low Emerging, all grades and languages.
crla_high_emerging_n integer 6,121 Assessed Grade 1 to 3 learners reading at High Emerging, all grades and languages.
crla_developing_n integer 6,121 Assessed Grade 1 to 3 learners reading at Developing, all grades and languages.
crla_transitioning_n integer 6,121 Assessed Grade 1 to 3 learners reading at Transitioning, all grades and languages.
crla_at_grade_level_n integer 6,121 Assessed Grade 1 to 3 learners reading at At Grade Level, all grades and languages.
crla_at_grade_share number 6,121 Share of assessed learners reading At Grade Level, as a proportion from 0 to 1 (the source’s *_percent column).
crla_low_emerging_share number 6,121 Share of assessed learners at Low Emerging, as a proportion from 0 to 1.
crla_g1_mt_n integer 6,121 Grade 1 learners assessed in Mother Tongue.
crla_g1_mt_at_grade_n integer 6,121 Grade 1 learners reading At Grade Level in Mother Tongue.
crla_g1_mt_low_emerging_n integer 6,121 Grade 1 learners reading at Low Emerging in Mother Tongue.
crla_g2_mt_n integer 6,121 Grade 2 learners assessed in Mother Tongue.
crla_g2_mt_at_grade_n integer 6,121 Grade 2 learners reading At Grade Level in Mother Tongue.
crla_g2_mt_low_emerging_n integer 6,121 Grade 2 learners reading at Low Emerging in Mother Tongue.
crla_g2_fil_n integer 6,121 Grade 2 learners assessed in Filipino.
crla_g2_fil_at_grade_n integer 6,121 Grade 2 learners reading At Grade Level in Filipino.
crla_g2_fil_low_emerging_n integer 6,121 Grade 2 learners reading at Low Emerging in Filipino.
crla_g3_mt_n integer 6,121 Grade 3 learners assessed in Mother Tongue.
crla_g3_mt_at_grade_n integer 6,121 Grade 3 learners reading At Grade Level in Mother Tongue.
crla_g3_mt_low_emerging_n integer 6,121 Grade 3 learners reading at Low Emerging in Mother Tongue.
crla_g3_fil_n integer 6,121 Grade 3 learners assessed in Filipino.
crla_g3_fil_at_grade_n integer 6,121 Grade 3 learners reading At Grade Level in Filipino.
crla_g3_fil_low_emerging_n integer 6,121 Grade 3 learners reading at Low Emerging in Filipino.
crla_g3_eng_n integer 6,121 Grade 3 learners assessed in English.
crla_g3_eng_at_grade_n integer 6,121 Grade 3 learners reading At Grade Level in English.
crla_g3_eng_low_emerging_n integer 6,121 Grade 3 learners reading at Low Emerging in English.

Geography

Column Type Non-blank rows Description
region_const text 6,113 Region under SY 2025-26 boundaries, for constant-boundary comparisons across years: ARMM and Cotabato City to BARMM, the 21 Negros Island Region divisions to NIR, Sulu to Region IX.

Enrollment

Column Type Non-blank rows Description
enrol_g1to3_2025 integer 6,113 Grade 1 to 3 enrollment in SY 2025-26, from the enrollment file, as the denominator for coverage.

Classification

Column Type Non-blank rows Description
sector_2025 text 6,113 Sector in SY 2025-26.

Shrunk NAT and ELLNA school means

This file has one row per school with a NAT or ELLNA result: 6,840 schools. Each row holds the published school mean, the number of test-takers, and the empirical-Bayes estimate shrunk toward the division mean, for any school-level use. A NAT school mean rests on a median of six sampled learners, so its 95 percent margin is about six points. The shrunk estimate pulls small-sample schools toward their division mean and is the one to use for any school-level comparison. The guide How to Read DepEd Data explains the method.

Identification

Column Type Non-blank rows Description
school_id integer 6,840 DepEd six-digit school identifier, as published; unique within each file and the key for joining files. A minority of schools change ID between years (see likely_id_changes.csv).

Geography

Column Type Non-blank rows Description
div_key text 6,840 Division key as ’region

Assessment: NAT

Column Type Non-blank rows Description
nat_overall_mps number 6,636 School mean percentage score, NAT Grade 6 SY 2023-24, all subjects.
nat_n_test_takers integer 6,636 Grade 6 learners tested in the SY 2023-24 National Achievement Test (a sample, median six per school).

Derived indicators

Column Type Non-blank rows Description
nat_overall_mps_shrunk number 6,636 Empirical-Bayes estimate of the school’s NAT mean: the school mean pulled toward its division mean with weight nat_shrink_weight.
nat_shrink_weight number 6,636 Weight on the school’s own NAT mean, n / (n + sigma^2 / tau^2), with sigma^2 = 54 (within-school per-learner variance) and tau^2 = 146 (between-school variance).
ellna_overall_mps_shrunk number 5,752 Empirical-Bayes estimate of the school’s ELLNA mean, shrunk toward its division mean with weight ellna_shrink_weight.
ellna_shrink_weight number 5,752 Weight on the school’s own ELLNA mean, n / (n + sigma^2 / tau^2), with sigma^2 = 98 and tau^2 = 164.

Assessment: ELLNA

Column Type Non-blank rows Description
ellna_overall_mps number 5,752 School mean percentage score, ELLNA Grade 3 SY 2023-24, all components.
ellna_n_test_takers integer 5,752 Grade 3 learners tested in the SY 2023-24 ELLNA.

Helper tables

likely_id_changes.csv. This table lists 146 cases where a school that leaves the files reappears the next year under a new ID with the same name, municipality, and barangay. DepEd publishes no mapping, so the panel counts each as an exit plus an entry; this table lets you link them.

assessment_coverage_by_division.csv. For each of the 63 divisions in the five assessed regions, this table gives how many public schools with Grade 3 or Grade 6 learners have NAT, ELLNA, and CRLA results, and the share covered. Nineteen of the 63 divisions have no assessed schools.

Before you use the numbers

  • Test results describe 44 divisions, not the country. State that in anything you publish. Do not compare NAT or ELLNA means across years, because the technical notes say difficulty is not equated.
  • Do not rank schools on a six-learner mean. Use school_assessment_shrunk and report the number of test-takers beside any school figure.
  • Ratios are undefined where the denominator is zero. 139 public schools report learners but no teachers, and 267 report no instructional classroom. Their ptr and pcr are blank, not infinite.
  • Annex schools are separate rows. The technical notes compute pupil-teacher ratios with annexes merged into their mother schools; no mapping is published, so they are not merged here.
  • Division names repeat. San Carlos City and San Fernando City each exist in two regions; group by region and division together.
  • A school’s region can change. Use region_const for time series and region to match a year’s published tables.

Education Data, Transparency and Research covers DepEd’s own rules for using its assessment data and what EDCOM II found about DepEd’s data systems.

Terms of use and citation

Two sets of terms apply to this release.

The data files. The five cleaned datasets and the two helper tables are built from DepEd’s public datasets, which DepEd publishes under its Terms of Use and Fair Use Policy. Those terms require anything built on DepEd’s data to be distributed under the same terms, and they do not allow added restrictions, so the data files are distributed under DepEd’s terms, not ours. If you use them:

  • credit the Department of Education as the source of the data;
  • do not suggest that DepEd is involved in, associated with, or endorses your work;
  • follow DepEd’s guidelines on assessment data: do not compare test scores across school years, and do not rank schools;
  • read DepEd’s full terms before you publish anything built on the files.

DepEd’s terms also say its materials may not be modified beyond editorial changes without its approval. The original DepEd files were never edited, and every change in this release is listed in the harmonization rules and the codebook. If DepEd asks us to change or withdraw the release, we will.

Our own work. The cleaning pipeline, the codebook, the harmonization rules, the README and this documentation are © 2026 Mark Anthony Llego, NASH Reviewer. All rights reserved. To reuse, republish or adapt any of them, email support@nash.com.ph for written permission first, saying who you are, what you want to use and how.

NASH Reviewer is not affiliated with DepEd.

Suggested citation:

Mark Anthony Llego (2026). Cleaned DepEd school-level datasets, SY 2017-18 to SY 2025-26 (version 1.0) [data set]. NASH Reviewer. https://nash.com.ph/blog/download-cleaned-deped-school-data. Source data: Department of Education (Philippines) public datasets.

If you find an error, send us a note through the contact page with the file, column, and school_id. Corrections go into the next version with a note here.

Versions

  • 1.0 (2026-10-25). First release: five datasets, two helper tables, codebook, harmonization rules, checksums, and README. Built from the enrollment files for SY 2017-18 to SY 2025-26, the SY 2023-24 learner, personnel, facilities, ICT, and WASH files, the SY 2023-24 NAT and ELLNA files, and the SY 2025-26 CRLA file.

Frequently asked questions

Is this official DepEd data?

The figures are DepEd’s, from its publicly released datasets, but the cleaned files are not an official DepEd release. The cleaning, the harmonized labels, and the derived columns are ours and are documented column by column, so you can trace any value to the source file. For official figures, cite DepEd’s own releases.

Can I use these DepEd data files in a thesis, a report, or an app?

Yes, under DepEd’s terms of use: credit DepEd as the source, do not suggest DepEd’s involvement, and follow its rules on assessment data (no comparison of test scores across school years, no ranking of schools). Please also cite this release. To reuse our cleaning code, codebook or documentation, email support@nash.com.ph for permission first. The terms of use have the details.

Why are so many cells blank in the DepEd school data?

There are three reasons, and the codebook’s non-blank counts show which one applies. The variable may not apply to the school, such as a level it does not offer or a public-only module for a private school. The variable may not have existed that year, such as the shs_unique column (unique or other senior-high programs) before SY 2024-25 or districts in SY 2017-18. Or the school did not report, as 46 schools in SY 2025-26 did not. Blanks are never zeros.

Why are the files in both CSV and Parquet?

CSV opens anywhere but loses types and compresses less well. Parquet keeps integers, booleans, and text as they are, loads in seconds in pandas, R, or DuckDB, and is a third smaller. The values are identical.

How do I follow one DepEd school across school years?

Filter the enrollment panel on school_id, or start from the school spine, which has one row per ID with its first and last year. Check likely_id_changes.csv for the 146 schools that seem to have changed ID.

Can I rank schools by NAT score with these files?

No, not on the published means. Each rests on a median of six sampled learners, and a six-point difference is within noise. Use the shrunk means and show the number of test-takers. The guide How to Read DepEd Data explains why.

Will the cleaned DepEd data be updated?

Yes, when DepEd releases new files. We will rebuild the datasets as a new version folder and list the changes here. The pipeline that produced this release is deterministic, so the checksums above will reproduce.

More in this series

Guides for aspiring school heads

Data preparation and documentation by Mark Anthony Llego for NASH Reviewer. Charts in the series carry the same credit.