Method and variable documentation

Check the sources, calculations, data quality and changes behind Skolkoll's school statistics.

Quick check

Verify

Source, variable definition, SALSA interpretation, score calculation and citation support.

Data status

27 data entries from 20 data sources, with live status per source in settings.

Method status

Official sources first; Skolkoll-derived metrics and changes are documented openly.

Glossary

Skolkoll uses these five terms consistently. They refer to different layers of the data pipeline — from the agency's register, through each upstream API, down to the file you can download.

Data source
An upstream feed or API we sync from (e.g. Skolverket API, Skolverket Statistics, SCB DeSO, Kolada). One organisation often publishes several feeds — Skolkoll syncs 20 data sources from 10 organisations. Live sync status per data source is on the settings page.
Dataset
A distinct data type fetched within a data source (e.g. "Year 9 merit scores", "SALSA", "School Survey"). One data source can expose multiple datasets — Skolkoll documents 27 datasets in the table below.
Data file
A processed CSV/JSON you can download. Skolkoll publishes downloadable data files on the downloads page (the full metadata-rich portal is currently Swedish-only).
School unit
A school as defined in Skolverket's register. The raw register contains ~46,000 school units including dormant and discontinued ones; Skolkoll publishes only active units (~16,000).
Aggregate
The statistical population an analysis is based on (e.g. "all compulsory schools in a municipality" or "all pupils with grades above a threshold").

1. Data sources and datasets

Skolkoll aggregates 27 data entries from 20 data sources across 10 public-sector providers. The table below lists each data entry — some rows are whole data sources/APIs (e.g. "Skolverket Planned Educations API v3") that return multiple data types, others are individual datasets within a data source (e.g. "Year 9 merit scores"). Live sync status per data source is on the settings page.

In addition we fetch 143 municipality KPIs from Kolada (RKA) — the full list is on the settings page.

Data source / datasetPublishing organisationWhat we fetchSync frequency
Skolverket Planned Educations API v3SkolverketSchool units, organisers, contacts, school forms, pupil countsDaily
Merit scores (grade 9)SkolverketAverage merit score per school unitYearly (autumn)
Certified teachersSkolverketShare of teachers with teaching licence per school unitYearly
Pupils per teacherSkolverketTeacher density per school unitYearly
National testsSkolverketGrade 6 and grade 9 results in Swedish, maths and EnglishYearly
Upper-secondary graduation rateSkolverketShare of upper-secondary pupils graduating within 3 yearsYearly
Grade points (upper-secondary)SkolverketAverage grade points at graduationYearly
University eligibilitySkolverketShare with basic university eligibilityYearly
School librarySkolverketAccess to a staffed school library per school unitYearly
SALSA — socioeconomic modelSIRIS/SkolverketExpected vs actual merit score, residual per school unitYearly
Skolverket Statistics Database (PxWeb)SkolverketPreschool statistics per municipality and preschool unit (staff density, pedagogical higher education, etc.). For the staff measure, only pedagogical higher-education degrees recognised in Sweden are counted; unvalidated foreign qualifications are not included.1st and 15th of each month
Absenteeism statisticsSkolverket Statistics DatabaseShare of pupils with > 20 % absence per school unitYearly
School surveySkolverket School SurveyPupil and parent responses: wellbeing, safety, study calmEvery 2 years (spring + autumn)
SCB PxWeb (DeSO)SCBChild poverty, economic standard, household types, migration, housing per DeSOMonthly
Socialstyrelsen Statistics DatabaseSocialstyrelsenInjuries/incidents among ages 0-14 and 15-24 per municipality, 3-year averages per 100,000 residentsYearly
SMHI NatmodluftSMHI/Swedish EPAModelled air quality (NO2, PM2.5 and PM10) per school, sampled from the national model gridOn model update
SCB UF0551 — Teacher statisticsSCBEducated teachers by employment and school form (national level)Yearly
SCB UF0505 — Labour-market barometerSCBShortage/balance per education group (national)Yearly
SCB Population forecastSCBPopulation forecast per municipality by age group (preschool/compulsory/upper-secondary)Yearly
Upper-secondary admission scoresGymnasieantagningenCutoff scores per programme and school unit for previous school yearYearly (after admissions)
Upper-secondary application pressureSkolverketApplications vs admitted seats per programme/school unitYearly
Skolinspektionen decisionsSkolinspektionenActive injunctions, fines, criticism and rejection decisions per school unit/organiserWeekly (scheduled) + manual trigger
Skolinspektionen — complaintsSkolinspektionenComplaints and Child and Pupil Ombudsman decisionsWeekly
Inspection — open casesSkolinspektionenOngoing inspection cases per organiserWeekly
Discrimination casesDiskrimineringsombudsmannenDO complaints with school connectionMonthly
Annual reports — independent schoolsBolagsverket via corporate group crawlerRevenue, profit, solvency, employees per independent organiserWeekly (when new filings exist)
Student health and public health in schoolsKoladaMunicipal indicators on student health, safety and related health measuresYearly
Higher-education linkUKÄ + SCBThroughput and labour-market establishment after upper-secondaryYearly
Election resultsValmyndighetenRiksdag and municipal election results per municipalityAfter elections

1b. Quality controls

Every data update on Skolkoll passes 27 automated quality controlsbefore it reaches a public page. The table below lists each control, what it verifies and where in the pipeline it runs. The controls live infunctions/lib/data-quality-engine.js, functions/lib/schema-validator.js,functions/lib/sync-guard.js, functions/lib/upload-validation.js,functions/lib/compare-quality.js and functions/lib/validation.js.

#ControlWhat it verifiesStage
1Missing critical field: totalPupilsActive school unit without pupil count — flagged criticalPost-sync
2Missing critical field: schoolTypesActive school unit without a school-form designationPost-sync
3Outlier — totalPupilsValue outside 1–3,000Post-sync
4Outlier — studentsPerTeacherValue outside 2–50Post-sync
5Outlier — certifiedTeachersPercentValue outside 0–100 %Post-sync
6Outlier — meritRating9Value outside 0–340 pointsPost-sync
7Outlier — eligibleYR9Value outside 0–100 %Post-sync
8Sudden change — totalPupils≥ 5 % warning, > 20 % critical vs previous periodPost-sync
9Sudden change — studentsPerTeacher≥ 5 % warning, > 20 % criticalPost-sync
10Sudden change — certifiedTeachersPercent≥ 5 % warning, > 20 % criticalPost-sync
11Sudden change — meritRating9≥ 5 % warning, > 20 % criticalPost-sync
12Sudden change — eligibleYR9≥ 5 % warning, > 20 % criticalPost-sync
13Inconsistency — active school with 0 pupilsStatus AKTIV but totalPupils = 0Post-sync
14Inconsistency — certifiedTeachersPercent > 100 %Value exceeds logical maximumPost-sync
15Reporting gap — compulsory schoolCompulsory school with pupils missing both merit score and eligibilityPost-sync
16Suspected duplicateSame name + municipality + pupil count within ±30 %Post-sync
17Cross-source — school vs KoladaSchool-level average merit differs > 10 % from Kolada valuePost-sync
18Schema validation — schools.jsonRequired top-level keys (syncedAt, schools) + 4 field checks on 100-samplePre-upload
19Schema validation — kolada.jsonRequired top-level keys (syncedAt, kommuner)Pre-upload
20Schema validation — koncern-lookup.jsonRequired top-level (meta, lookup) + orgnr/name on recordsPre-upload
21Schema validation — salsa.jsonRequired top-level keys (syncedAt, schools)Pre-upload
22Schema validation — betygsfordelning.jsonRequired top-level keys (syncedAt, schools)Pre-upload
23Pre-upload count-drop guardBlocks publication if record count drops > 20 % vs previous versionPre-upload
24School-count pre-uploadBlocks if total/active counts fall below 80 % of previousPre-upload
25Confidentiality censoring (n < 15)Censors values where pupil base falls below Skolverket's confidentiality threshold — applied across 13 comparison metricsBuild / render
26Small sample (n < 30)Flags small-sample values so rendering can de-emphasise themBuild / render
27CI gate — data-sources consistencyBuild fails if data-sources.json diverges from actual data files (33 sources with gate=required)CI

In addition we run format validation on organisation number (Luhn checksum), school-unit code (8 digits or forsk-NNNNNN), municipality code (4 digits) and LEI (ISO 17442). The pre-upload guards are wired into prioritized sync flows via validateBeforeUpload or validateSchoolUploadCounts; remaining functions/sync-*.js functions are covered by post-sync and CI checks until the matching guard is wired in.

2. Variable dictionary

The table below documents the key variables displayed on Skolkoll. Each variable is described with its unit, source and a brief explanation. A complete machine-readable data catalogue with all 80+ metrics is available inmetric-definitions.json.

VariableUnitSourceDescription
Merit value year 9Points (0–340)SkolverketAverage merit value for pupils in year 9. Calculated as the sum of the 16 best grades (max 320 points, or 340 with a modern language), where each grade gives 0–20 points.
Qualified teachers%SkolverketShare of teachers with a higher education teaching degree (teacher's exam or teaching licence) out of all active teachers.
Pupils per teacherRatioSkolverketNumber of pupils per full-time equivalent teacher. A lower value means more teaching resources per pupil.
Cost per pupilSEK/yearSkolverket Statistics DBTotal municipal cost per pupil per year, including teaching, premises, meals, student health and administration.
School's own contribution (SALSA residual)PointsCalculated (Skolverket's model)Difference between actual and expected merit value given pupil composition. A positive value means the school performs better than expected. See SALSA method.
Skolkoll score0–100Calculated (Skolkoll)Weighted 0–100 composite of five dimensions (results 30%, staff 25%, value-added 20%, safety 15%, resources 10%) normalised against the national pool per school form, which lets it compare schools fairly across municipalities. See Skolkoll score.
Vocational programme eligibility%SkolverketShare of year-9 pupils who achieve eligibility for upper-secondary vocational programmes (pass in Swedish/Swedish as a second language, English, Mathematics plus 5 other subjects).
Graduation rate%SkolverketShare of upper-secondary pupils who graduate (receive a final certificate) within 3 years of starting.
Grade points upper secondaryPoints (0–22.5)SkolverketAverage grade points for upper-secondary graduates. Calculated as the mean of all course grades.
Foreign background%SCB / SkolverketShare of residents/pupils with a foreign background (born abroad or with two foreign-born parents). Available in two variants: DeSO-level from SCB (aggregated to municipality) and school-level from Skolverket's statistics database.
Child poverty%SCBShare of children (0–17 years) living in households with low economic standard, defined as below 60% of median income.
Injuries/incidents ages 0-14 and 15-24per 100,000SocialstyrelsenMunicipality-level data from Socialstyrelsen's statistics database: treated people per 100,000 residents, 3-year averages, both sexes, total injured people. See the method note.
Higher education eligibility%SkolverketShare of upper-secondary graduates who achieve basic eligibility for higher education (universities).
School survey: safety%SkolverketShare of pupils who agree that they feel safe at school, based on Skolverket's school survey. Reported by year group (year 5, year 8, upper-secondary year 2).
School survey: study environment%SkolverketShare of pupils who experience a good study environment in the classroom, based on Skolverket's school survey. Reported by year group (year 5, year 8, upper-secondary year 2).
NP Swedish%SkolverketShare of pupils who passed (grade A–E) the national test in Swedish/Swedish as a second language.
NP Mathematics%SkolverketShare of pupils who passed (grade A–E) the national test in mathematics.
NP English%SkolverketShare of pupils who passed (grade A–E) the national test in English.
Economic standardkSEKSCBMedian disposable income per consumption unit (adjusted for household size), per DeSO area. Used as a socioeconomic indicator.
Parents with higher education%SkolverketShare of pupils whose parents have post-secondary education. Related background variable — note that the SALSA model uses the inverted measure share without upper-secondary education.
Newly arrived pupils%SkolverketShare of pupils who immigrated to Sweden in the last four years. Used as a control variable in the SALSA model.
Pass in all subjects year 9%SkolverketShare of year-9 pupils who achieved at least grade E in all subjects.
School libraryYes/NoSkolverketWhether the school unit has access to a staffed school library.
Admission scorePointsGymnasieantagningenLowest merit value for admission to a given upper-secondary programme the previous school year.

3. The SALSA method

What is SALSA?

SALSA stands for Skolverkets Arbetsverktyg för Lokala SambandsAnalyser(Skolverket's Tool for Local Correlation Analyses). It is a statistical model developed by Skolverket to put schools' results in relation to their pupil composition. The purpose is to give a fairer picture of schools' performance by controlling for background factors that the school itself cannot influence.

Model specification

SALSA is a multiple linear regression model that estimates expected merit value based on the following independent variables:

Skolverket specifies and fits the model. Simplified, it can be expressed as:

Merit value = β₀ + β₁ × (parents without upper-sec. ed. %) + β₂ × (newly arrived %) + β₃ × (share boys %) + ε

It is Skolverket that estimates the coefficients (β values) by ordinary least squares on all compulsory schools with year 9 that report a sufficient pupil base, and that publishes the finished residual (deviation) per school unit via SIRIS.Skolkoll fits no regression of its own — we ingest Skolverket's published residual and rescale it into the value-added dimension. Skolverket's exact coefficients and variable transformations are not part of the data we fetch.

The residual — what it means

The SALSA residual is the difference between the school's actual merit value and the model-predicted value:

Residual = Actual merit value − Expected merit value

On Skolkoll, a threshold of −15 points is used to show a clear negative model deviation. Residuals below −25 points are marked with a higher attention level, but are still not a standalone quality grade.

Limitations

Reference: Skolverket's SALSA documentation

4. Skolkoll score

What is the Skolkoll score?

The Skolkoll score is a 0–100 composite that combines five dimensions into a single comparable number. Unlike a raw merit value, each dimension is normalised against the national pool per school form, so the score can compare schools fairly across municipalities. It is computed separately for compulsory schools (GR) and upper-secondary schools (GY) and is shown on the school pages and onSweden's best schools, among others.

The five dimensions and their weights

The score is a weighted sum of five dimensions. Each dimension is expressed as a 0–100 value before its weight is applied:

DimensionWeightVariables includedNormalisation
Results30%Merit value year 9 first. If missing, the following are used in order: grade points, vocational-programme eligibility (year 9), upper-secondary graduation rate (within 3 years) or higher-education eligibility.Percentile rank
Staff25%Share of certified teachers (teaching licence).Percentile rank
Value-added20%SALSA residual — the school's own contribution given its pupil composition (see SALSA method).Linear scaling of the residual
Safety15%Safety index — a weighted composite of school-survey responses (see below).Already 0–100, used directly
Resources10%Pupils per teacher (teacher density).Percentile rank, inverted

Normalisation — percentile rank

The results, staff and resources dimensions are normalised with a percentile rankagainst all schools of the same school form (GR or GY) for the current school year. We use a mid-rank percentile — the share of schools with a lower value plus half the share with exactly the same value:

percentile = (count below + ½ × count equal) / number of schools × 100

This means 100 = best in the country, 50 = neutral midpointand 0 = lowest. For pupils per teacher the scale is inverted, because fewer pupils per teacher is better — a low pupil-to-teacher ratio therefore yields a high percentile.

Value-added — scaling the SALSA residual

The SALSA residual (typically between −60 and +60 merit points) is clamped to the range −60…+60 and scaled linearly to 0–100:

value-added = (residual + 60) / 120 × 100

A residual of 0 (the school performs exactly as the model expects) gives 50. SALSA exists only for compulsory-school year 9; for upper secondary and for schools without a SALSA value, the value-added dimension is set to the neutral value 50 (see below).

Safety — the safety index

The safety dimension is its own 0–100 composite index from Skolverket's school survey, with the following weights:

The index uses the highest available year group in order: year 8 first, then year 5 and finally upper-secondary year 2. The value is already on the 0–100 scale and is used directly as the safety dimension.

Aggregation

The final score is the weighted sum, rounded to an integer and clamped to 0–100:

Skolkoll score = Results × 0.30
              + Staff × 0.25
              + Value-added × 0.20
              + Safety × 0.15
              + Resources × 0.10

Neutral value when data is missing

If a school lacks school-specific data in a dimension, that dimension is set to theneutral value 50 — percentile 50, SALSA residual 0, or safety 50 respectively. This way the mere absence of a value does not by itself lower a school. We report how many of the five dimensions rest on actual school-specific data (e.g. "3 of 5 dimensions use school-specific data"). A school is, however, only scored if it has either a real result value or real teacher certification — a score built purely on neutral values is never produced.

This explains why a school can have a score but no year-9 merit value. An F–6 school has no year 9 and therefore no merit value; its results dimension then falls back to grade points or eligibility if available, otherwise to the neutral value 50, while the staff, value-added, safety and resources dimensions reflect the school's actual data. A "–" in the merit-value column therefore means the school lacks a year-9 merit value — not that it lacks data in the other dimensions.

Confidence tiers

How reliable the score is depends on the pupil base. The classification follows Skolverket's censoring practice (groups below 10 pupils are hidden):

National top lists such as Sweden's best schools include only normal-tier schools, so that a small school on a thin base cannot top a national list.

Limitations

Canonical implementation: src/lib/scoring-core.ts(computeSkolkollScore, buildScorePercentiles, computeTrygghetsindex).

5. Data quality

All data shown on Skolkoll comes from official Swedish government agencies and open APIs. There are, however, important limitations to be aware of:

Confidentiality suppression

Skolverket does not publish statistics for school units where the pupil base is below15 pupils for the relevant variable. This is to protect individual pupils' privacy. Affected variables are shown as "–" or are missing entirely on Skolkoll.

School survey response rate

Skolverket's school survey is based on voluntary participation. The response rate varies considerably between schools and year groups, which affects reliability. Results with low response rates should be interpreted with caution.

Preschools — GPS positions

Skolverket's API does not always contain coordinates for preschools. Skolkoll matches preschool addresses against SCB's geodata, Bolagsverket's address register and OpenStreetMap's Nominatim service. Approximately 85% of preschools have been matched with GPS positions; the rest are displayed without a map.

Municipality aggregation

Demographic data at DeSO level (Demographic Statistical Areas) is aggregated to municipality level. Absolute counts (population, employment, housing, etc.) are summed and shares are then calculated from the summed values. Metrics that are already averages or medians (e.g. economic standard) are population-weighted so that more populous areas have proportionally greater influence.

Socialstyrelsen — injuries/incidents

Socialstyrelsen's injury/incidents measures are fetched at municipality level fromSkador och skadehändelser i Sveriges kommuner och län. Skolkoll usesmatt=2 (treated people per 100,000 residents), kon=3(both sexes), typ=9 (total injured people), vardform=SVOV(inpatient and/or specialised outpatient care), and age groups alder=1(0-14) and alder=2 (15-24). Values are 3-year averages and are shown as municipality context, not as school or DeSO measures.

Grade data

Merit values in Skolverket's statistics refer to pupils who received grades in at least one subject. Pupils who received no grades in any subject (for example newly arrived pupils without a grading base) are not included in the average.

Time lag

Some data has a natural time lag. Grade data for a school year is typically published in the autumn of the same year. Kolada data can have up to six months' delay depending on the KPI. Update dates for each data source are shown on thedata sources page.

Found an error in data or calculations? See our corrections policy for how to report it and how we handle corrections.

6. Citing Skolkoll

Data and analyses from Skolkoll may be freely cited with a source reference. Suggested citation format:

Skolkoll (2026). [Variable name]. Retrieved [date] from https://skolkoll.se/
Based on data from Skolverket, SCB, Kolada, Socialstyrelsen and SMHI/Natmodluft.

Example: Skolkoll (2026). Merit value year 9. Retrieved 2026-07-05 from https://skolkoll.se/en/school/example-school-12345678/. Based on data from Skolverket.

See also the versioning policy for information about archival, schema changes and licensing, and the method policy for how methodology is documented and changed. All numbers here are computed deterministically from source data — see How Skolkoll uses AI for where and how AI is used (and not used). Want to scrutinise the Skolkoll score yourself? Review our method provides the specification, the fixtures and a reproduction harness — plus our commitment to publish reviews in full.

7. Changelog

Important changes in data collection, calculation methods and variable definitions.

DateCategoryChange
2026-06Method changeSkolkoll score documented: new method section covering dimensions, weights, normalisation (percentile rank), confidence tiers and imputation rules, plus a variable-dictionary entry.
2025-03Method changeMethod page published with variable dictionary, SALSA documentation and citation guide.
2025-02New dataAdded school survey data (safety, study environment, stimulation) per school and year group.
2025-01Method changeSALSA benchmarking: ability to compare schools with similar pupil compositions.
2024-12New dataExpanded Kolada KPIs from 80 to 133 per municipality.
2024-11New dataAdded DeSO-based demographic data from SCB (child poverty, economic standard).
2024-10New dataLaunch of Skolkoll with base data from Skolverket API, Kolada and Bolagsverket.