Method and variable documentation
Check the sources, calculations, data quality and changes behind Skolkoll's school statistics.
Quick check
Source, variable definition, SALSA interpretation, score calculation and citation support.
27 data entries from 20 data sources, with live status per source in settings.
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 / dataset | Publishing organisation | What we fetch | Sync frequency |
|---|---|---|---|
| Skolverket Planned Educations API v3 | Skolverket | School units, organisers, contacts, school forms, pupil counts | Daily |
| Merit scores (grade 9) | Skolverket | Average merit score per school unit | Yearly (autumn) |
| Certified teachers | Skolverket | Share of teachers with teaching licence per school unit | Yearly |
| Pupils per teacher | Skolverket | Teacher density per school unit | Yearly |
| National tests | Skolverket | Grade 6 and grade 9 results in Swedish, maths and English | Yearly |
| Upper-secondary graduation rate | Skolverket | Share of upper-secondary pupils graduating within 3 years | Yearly |
| Grade points (upper-secondary) | Skolverket | Average grade points at graduation | Yearly |
| University eligibility | Skolverket | Share with basic university eligibility | Yearly |
| School library | Skolverket | Access to a staffed school library per school unit | Yearly |
| SALSA — socioeconomic model | SIRIS/Skolverket | Expected vs actual merit score, residual per school unit | Yearly |
| Skolverket Statistics Database (PxWeb) | Skolverket | Preschool 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 statistics | Skolverket Statistics Database | Share of pupils with > 20 % absence per school unit | Yearly |
| School survey | Skolverket School Survey | Pupil and parent responses: wellbeing, safety, study calm | Every 2 years (spring + autumn) |
| SCB PxWeb (DeSO) | SCB | Child poverty, economic standard, household types, migration, housing per DeSO | Monthly |
| Socialstyrelsen Statistics Database | Socialstyrelsen | Injuries/incidents among ages 0-14 and 15-24 per municipality, 3-year averages per 100,000 residents | Yearly |
| SMHI Natmodluft | SMHI/Swedish EPA | Modelled air quality (NO2, PM2.5 and PM10) per school, sampled from the national model grid | On model update |
| SCB UF0551 — Teacher statistics | SCB | Educated teachers by employment and school form (national level) | Yearly |
| SCB UF0505 — Labour-market barometer | SCB | Shortage/balance per education group (national) | Yearly |
| SCB Population forecast | SCB | Population forecast per municipality by age group (preschool/compulsory/upper-secondary) | Yearly |
| Upper-secondary admission scores | Gymnasieantagningen | Cutoff scores per programme and school unit for previous school year | Yearly (after admissions) |
| Upper-secondary application pressure | Skolverket | Applications vs admitted seats per programme/school unit | Yearly |
| Skolinspektionen decisions | Skolinspektionen | Active injunctions, fines, criticism and rejection decisions per school unit/organiser | Weekly (scheduled) + manual trigger |
| Skolinspektionen — complaints | Skolinspektionen | Complaints and Child and Pupil Ombudsman decisions | Weekly |
| Inspection — open cases | Skolinspektionen | Ongoing inspection cases per organiser | Weekly |
| Discrimination cases | Diskrimineringsombudsmannen | DO complaints with school connection | Monthly |
| Annual reports — independent schools | Bolagsverket via corporate group crawler | Revenue, profit, solvency, employees per independent organiser | Weekly (when new filings exist) |
| Student health and public health in schools | Kolada | Municipal indicators on student health, safety and related health measures | Yearly |
| Higher-education link | UKÄ + SCB | Throughput and labour-market establishment after upper-secondary | Yearly |
| Election results | Valmyndigheten | Riksdag and municipal election results per municipality | After 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.
| # | Control | What it verifies | Stage |
|---|---|---|---|
| 1 | Missing critical field: totalPupils | Active school unit without pupil count — flagged critical | Post-sync |
| 2 | Missing critical field: schoolTypes | Active school unit without a school-form designation | Post-sync |
| 3 | Outlier — totalPupils | Value outside 1–3,000 | Post-sync |
| 4 | Outlier — studentsPerTeacher | Value outside 2–50 | Post-sync |
| 5 | Outlier — certifiedTeachersPercent | Value outside 0–100 % | Post-sync |
| 6 | Outlier — meritRating9 | Value outside 0–340 points | Post-sync |
| 7 | Outlier — eligibleYR9 | Value outside 0–100 % | Post-sync |
| 8 | Sudden change — totalPupils | ≥ 5 % warning, > 20 % critical vs previous period | Post-sync |
| 9 | Sudden change — studentsPerTeacher | ≥ 5 % warning, > 20 % critical | Post-sync |
| 10 | Sudden change — certifiedTeachersPercent | ≥ 5 % warning, > 20 % critical | Post-sync |
| 11 | Sudden change — meritRating9 | ≥ 5 % warning, > 20 % critical | Post-sync |
| 12 | Sudden change — eligibleYR9 | ≥ 5 % warning, > 20 % critical | Post-sync |
| 13 | Inconsistency — active school with 0 pupils | Status AKTIV but totalPupils = 0 | Post-sync |
| 14 | Inconsistency — certifiedTeachersPercent > 100 % | Value exceeds logical maximum | Post-sync |
| 15 | Reporting gap — compulsory school | Compulsory school with pupils missing both merit score and eligibility | Post-sync |
| 16 | Suspected duplicate | Same name + municipality + pupil count within ±30 % | Post-sync |
| 17 | Cross-source — school vs Kolada | School-level average merit differs > 10 % from Kolada value | Post-sync |
| 18 | Schema validation — schools.json | Required top-level keys (syncedAt, schools) + 4 field checks on 100-sample | Pre-upload |
| 19 | Schema validation — kolada.json | Required top-level keys (syncedAt, kommuner) | Pre-upload |
| 20 | Schema validation — koncern-lookup.json | Required top-level (meta, lookup) + orgnr/name on records | Pre-upload |
| 21 | Schema validation — salsa.json | Required top-level keys (syncedAt, schools) | Pre-upload |
| 22 | Schema validation — betygsfordelning.json | Required top-level keys (syncedAt, schools) | Pre-upload |
| 23 | Pre-upload count-drop guard | Blocks publication if record count drops > 20 % vs previous version | Pre-upload |
| 24 | School-count pre-upload | Blocks if total/active counts fall below 80 % of previous | Pre-upload |
| 25 | Confidentiality censoring (n < 15) | Censors values where pupil base falls below Skolverket's confidentiality threshold — applied across 13 comparison metrics | Build / render |
| 26 | Small sample (n < 30) | Flags small-sample values so rendering can de-emphasise them | Build / render |
| 27 | CI gate — data-sources consistency | Build 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.
See the statistics that use this method
Move directly from the documentation to the charts that rely on the same data sources and calculation logic.
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.
| Variable | Unit | Source | Description |
|---|---|---|---|
| Merit value year 9 | Points (0–340) | Skolverket | Average 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 | % | Skolverket | Share of teachers with a higher education teaching degree (teacher's exam or teaching licence) out of all active teachers. |
| Pupils per teacher | Ratio | Skolverket | Number of pupils per full-time equivalent teacher. A lower value means more teaching resources per pupil. |
| Cost per pupil | SEK/year | Skolverket Statistics DB | Total municipal cost per pupil per year, including teaching, premises, meals, student health and administration. |
| School's own contribution (SALSA residual) | Points | Calculated (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 score | 0–100 | Calculated (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 | % | Skolverket | Share 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 | % | Skolverket | Share of upper-secondary pupils who graduate (receive a final certificate) within 3 years of starting. |
| Grade points upper secondary | Points (0–22.5) | Skolverket | Average grade points for upper-secondary graduates. Calculated as the mean of all course grades. |
| Foreign background | % | SCB / Skolverket | Share 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 | % | SCB | Share 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-24 | per 100,000 | Socialstyrelsen | Municipality-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 | % | Skolverket | Share of upper-secondary graduates who achieve basic eligibility for higher education (universities). |
| School survey: safety | % | Skolverket | Share 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 | % | Skolverket | Share 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 | % | Skolverket | Share of pupils who passed (grade A–E) the national test in Swedish/Swedish as a second language. |
| NP Mathematics | % | Skolverket | Share of pupils who passed (grade A–E) the national test in mathematics. |
| NP English | % | Skolverket | Share of pupils who passed (grade A–E) the national test in English. |
| Economic standard | kSEK | SCB | Median disposable income per consumption unit (adjusted for household size), per DeSO area. Used as a socioeconomic indicator. |
| Parents with higher education | % | Skolverket | Share 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 | % | Skolverket | Share 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 | % | Skolverket | Share of year-9 pupils who achieved at least grade E in all subjects. |
| School library | Yes/No | Skolverket | Whether the school unit has access to a staffed school library. |
| Admission score | Points | Gymnasieantagningen | Lowest 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:
- Parents' education level — share of pupils whose parents lack upper-secondary education (%)
- Newly arrived pupils — share of pupils who immigrated to Sweden in the last four years (%)
- Gender — share of boys (%)
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- Positive residual — the outcome lies above the model's expected value given the variables included.
- Negative residual — the outcome lies below the model's expected value given the variables included.
- Residual near zero — the outcome lies close to what the model predicts.
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
- SALSA applies only to compulsory school year 9 — there is no equivalent model for upper secondary or preschool.
- The model controls for a limited set of background factors. Factors such as residential segregation, mental health and the school's resource allocation are not captured.
- The residual is an average for the school — it says nothing about individual pupils' results.
- Small schools with few pupils get unstable residuals that can vary considerably between years.
- SALSA measures relative performance, not absolute quality. A school can have a positive residual but still have low merit values in absolute terms.
- SALSA should be read together with merit value, teacher certification, safety, local rules and qualitative questions to the school.
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:
| Dimension | Weight | Variables included | Normalisation |
|---|---|---|---|
| Results | 30% | 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 |
| Staff | 25% | Share of certified teachers (teaching licence). | Percentile rank |
| Value-added | 20% | SALSA residual — the school's own contribution given its pupil composition (see SALSA method). | Linear scaling of the residual |
| Safety | 15% | Safety index — a weighted composite of school-survey responses (see below). | Already 0–100, used directly |
| Resources | 10% | 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 × 100This 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 × 100A 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:
- Safety — 40%
- Study environment — 30%
- Anti-bullying — 20%
- Staff-reported safety — 10%
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.10Neutral 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):
- Fewer than 10 pupils → hidden. The score is not shown.
- 10–24 pupils → limited confidence. The score is shown with a note that the base is small.
- 25 pupils or more (or unknown count) → normal. The score is shown as usual.
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
- The score is a relative ranking measure, not an absolute quality verdict. It does not capture pedagogical profile, distance, wellbeing or how well a school fits your particular child.
- Because the dimensions are percentile-ranked, a school's score depends on how the other schools perform in the same school year — absolute figures are therefore not directly comparable between years.
- SALSA exists only for compulsory-school year 9, so the value-added dimension rests on the neutral value 50 for upper secondary and for schools without a SALSA value.
- A score that rests largely on neutral values has lower informational value — check how many of the five dimensions use actual data.
- The safety dimension inherits the school survey's response-rate caveats (see Data quality).
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.
| Date | Category | Change |
|---|---|---|
| 2026-06 | Method change | Skolkoll score documented: new method section covering dimensions, weights, normalisation (percentile rank), confidence tiers and imputation rules, plus a variable-dictionary entry. |
| 2025-03 | Method change | Method page published with variable dictionary, SALSA documentation and citation guide. |
| 2025-02 | New data | Added school survey data (safety, study environment, stimulation) per school and year group. |
| 2025-01 | Method change | SALSA benchmarking: ability to compare schools with similar pupil compositions. |
| 2024-12 | New data | Expanded Kolada KPIs from 80 to 133 per municipality. |
| 2024-11 | New data | Added DeSO-based demographic data from SCB (child poverty, economic standard). |
| 2024-10 | New data | Launch of Skolkoll with base data from Skolverket API, Kolada and Bolagsverket. |