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 endpoint catalogue
The page's #ai-data-endpoints script contains the same catalogue as JSON:
endpoint URLs, CSV format, field descriptions, license, row granularity and typical agent flows.
- Format
- CSV (UTF-8, semicolon, Swedish decimal comma)
- License
- CC BY 4.0 with attribution to Skolkoll and the original source
- Schema
- Schema.org DataCatalog with one Dataset per CSV endpoint and a DataDownload distribution
- Recommended parsing
- Read CSV with
sep=";", encoding="utf-8-sig", decimal="," and comment="#"
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
| Field | Description |
skolenhetskod | Skolverket's unique identifier for the school unit |
skolenhetNamn | Official name of the school unit |
kommunNamn / kommunKod | Municipality name and four-digit municipality code |
huvudmanNamn | Operator or organisation running the school |
skolformer | School forms such as GR (compulsory), GY (upper-secondary) and FORSK (preschool) |
lat / lng | Coordinates in WGS84 when geocoding is available |
meritvardeAk9 | Average final-grade score in Year 9 |
behorigaLararePct | Share of teachers with certification, in percent |
Municipality data
| Field | Description |
kommunKod | Four-digit municipality code |
kommunNamn | Municipality name |
kostnadPerElev_kr | Total compulsory-school cost per pupil |
elevPerLarare | Pupils per teacher |
meritvardeSnitt | Average final-grade score in Year 9 |
behorighetsgrad_pct | Share of certified teachers, in percent |
andelKommunalElever_pct | Share of pupils in municipal schools |
andelFristaendeElever_pct | Share of pupils in independent schools |
History
| Field | Description |
kommunKod / kommunNamn | Municipality identifier and name |
ar | Statistics year |
meritvardeSnitt | Average final-grade score in Year 9 |
kostnadPerElev_kr | Total compulsory-school cost per pupil |
elevPerLarare | Pupils per teacher |
behorighetsgrad_pct | Share of certified teachers, in percent |
Admissions
| Field | Description |
skolkod / skolnamn / kommun | School identification and location |
program / programkod | Programme name and programme code |
inriktning | Specialisation when available |
ar | Admission year |
antagningspoang | Lowest admission score or cutoff |
antagna | Number of admitted pupils when source data is available |
sokande / forsthandssokande | Demand when source data is available |
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).