Open data for agents

AI guide to Skolkoll's open data

A compact reference for AI agents, browser agents and other programs that need to find, read and compare Swedish school data without manual navigation.

Machine-readable CSV download catalogue

The page's #ai-data-endpoints script contains the same open-data download catalogue as JSON: CSV URLs, file format, field descriptions, rights terms, row granularity and typical agent flows.

Format
CSV (UTF-8, semicolon, Swedish decimal comma)
Rights
Source- and field-specific terms; no blanket sublicence to third-party data
Schema
Schema.org DataCatalog with one Dataset per CSV endpoint and a DataDownload distribution
DCAT-AP SE
/data/catalog.jsonld with the complete machine-readable dataset catalog. The AI chat exposes the same catalog via /api/ai/dcat.
Recommended parsing
Read CSV with sep=";", encoding="utf-8-sig", decimal="," and comment="#"

CSV endpoints

EndpointRow granularityContentSource
/nedladdning/skolor.csv
Documentation
One row per school unitAll school units in Sweden with operator, school form, municipality, status, coordinates and key metrics.Skolverket
/nedladdning/kommuner.csv
Documentation
One row per municipalityAggregated compulsory-school statistics per municipality with results, teacher certification, pupil counts and finances.Kolada
/nedladdning/historik.csv
Documentation
One row per municipality and statistics yearTime series per municipality for compulsory school: results, cost per pupil, pupils per teacher and teacher certification.Kolada
/nedladdning/antagning.csv
Documentation
One row per school, upper-secondary programme and admissions year.Admissions scores per upper-secondary school, programme and specialisation, as time series per admissions year from Skolverket's admissions statistics. States whether each score is the lowest admitted or the average admissions score.Skolverket Planned Educations API v3

Agent flows

Top list within a municipality

Query: Find the top 10 compulsory schools in Uppsala by final-grade score and show teacher certification alongside.

Method: Filter skolor.csv on kommunNamn=Uppsala and skolformer containing GR, sort descending by meritvardeAk9.

Data files: School data

Municipality comparison

Query: Compare cost per pupil, teacher certification and final-grade score between Nacka, Uppsala and Lund.

Method: Use kommuner.csv for the latest values and historik.csv for trends over time per kommunKod.

Data files: Municipality data, History

Upper-secondary choice

Query: List Natural Sciences programmes in Gothenburg where the latest admission score is below 270.

Method: Filter antagning.csv on kommun=Göteborg and programkod=NA, convert antagningspoang to a number and sort.

Data files: Admissions

Fields to start with

School data
FieldDescription
skolenhetskodSkolverket's unique identifier for the school unit
skolenhetNamnOfficial name of the school unit
kommunNamn / kommunKodMunicipality name and four-digit municipality code
huvudmanNamnOperator or organisation running the school
skolformerSchool forms such as GR (compulsory), GY (upper-secondary) and FORSK (preschool)
lat / lngCoordinates in WGS84 when geocoding is available
meritvardeAk9Average final-grade score in Year 9
behorigaLararePctThe share of teachers (in full-time equivalents) who hold a Swedish teaching licence (lärarlegitimation) and are qualified to teach, where qualification covers the school type, subject and, in compulsory school, the grade band of the teaching they do. For preschools without a compulsory or upper-secondary school: the share of staff with pedagogical higher education.
Municipality data
FieldDescription
kommunKodFour-digit municipality code
kommunNamnMunicipality name
kostnadPerElev_krTotal compulsory-school cost per pupil
elevPerLararePupils per teacher
meritvardeSnittAverage final-grade score in Year 9
behorighetsgrad_pctShare of certified teachers in compulsory school in % (Kolada N15813, full-time equivalents, definition: https://skolkoll.se/en/glossary/larbehorighet/)
andelKommunalElever_pctShare of pupils in municipal schools
andelFristaendeElever_pctShare of pupils in independent schools
History
FieldDescription
kommunKod / kommunNamnMunicipality identifier and name
arStatistics year
meritvardeSnittAverage final-grade score in Year 9
kostnadPerElev_krTotal compulsory-school cost per pupil
elevPerLararePupils per teacher
behorighetsgrad_pctShare of certified teachers in compulsory school in % (Kolada N15813, full-time equivalents, definition: https://skolkoll.se/en/glossary/larbehorighet/)
Admissions
FieldDescription
schoolCodeSchool unit code
schoolNameSchool name
municipalityMunicipality name
programmeUpper-secondary programme name
programmeCodeUpper-secondary programme code
specialisationSpecialisation, if applicable
yearAdmissions year
admissionsScorePublished admissions score
scoreMeasureWhat the admissions score measures: lowest = lowest admitted score, average = average admissions score. Empty = the source does not state it.

Python example

import pandas as pd

schools = pd.read_csv(
    "https://skolkoll.se/nedladdning/skolor.csv",
    sep=";",
    encoding="utf-8-sig",
    decimal=",",
    comment="#",
)

uppsala_top10 = (
    schools[
        (schools["kommunNamn"] == "Uppsala")
        & schools["skolformer"].str.contains("GR", na=False)
    ]
    .sort_values("meritvardeAk9", ascending=False)
    .head(10)
)

print(uppsala_top10[["skolenhetNamn", "meritvardeAk9", "behorigaLararePct"]])

For more data files and historical versions, see downloadable data files(the metadata-rich portal is currently Swedish-only).