Reykjavíkurborg (Reykjavík Municipality)

SkillDev tools

Reykjavík municipality CKAN + PX-Web — services, demographics, welfare. Opin Fjármál: vendor-level city spending 2014–2025.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Reykjavíkurborg (Reykjavík Municipality) skill

What this skill tells your AI

The instructions your AI receives, as published by jokull/icelandic-data in .agents/skills/reykjavik/SKILL.md and read by ahel’s review.

Open data from Reykjavík City via two APIs:

  1. CKAN API at gagnagatt.reykjavik.is - downloadable CSV files
  2. PX-Web API at velstat.reykjavik.is - welfare statistics (requires POST queries)

Data Scope

589 CKAN datasets + 293 PX-Web tables covering municipal operations, social services, demographics, and infrastructure.

Full catalog: data/reykjavik_catalog.md — browse this first to find the right dataset before querying APIs.

  • Financial: Annual accounts by department and fund (Ársuppgjör)
  • Education: School enrollment, music schools, after-school programs
  • Welfare: Home support services, elderly care, disability services
  • Infrastructure: Water quality, waste management, energy consumption
  • Demographics: Population by district, housing, families
  • Civic: Election data, website analytics, service usage

APIs

CKAN API (gagnagatt.reykjavik.is)

Base URL: https://gagnagatt.reykjavik.is/api/3/action/

No authentication required. Returns CSV files directly.

PX-Web API (velstat.reykjavik.is)

Base URL: https://velstat.reykjavik.is/PxWeb/api/v1/is/VELSTAT/

No authentication required. Returns JSON metadata (GET) or CSV data (POST).

Categories:

PathDescription
000. Lykiltölur/Key statistics
100. Manadarleg tolfraedi/Monthly statistics
200. Arsskyrsla/Annual reports

Subcategories (e.g., in 200. Arsskyrsla/):

  • 02 Fjarhagsadstod/ - Financial assistance
  • 07 Barnavernd Reykjavikur/ - Child protection
  • 10. Heimilisofbeldi/ - Domestic violence
  • 11 Mannfjoldi/ - Population

Fetch all data from a table:

curl -X POST "https://velstat.reykjavik.is/PxWeb/api/v1/is/VELSTAT/200.%20Arsskyrsla/11%20Mannfjoldi/VEL11008.px" \
  -H "Content-Type: application/json" \
  -d '{"query": [], "response": {"format": "csv"}}' \
  -o output.csv

# Convert encoding (output is Windows-1252)
iconv -f WINDOWS-1252 -t UTF-8 output.csv > output_utf8.csv

Fetching Data (CKAN)

List all datasets

curl -s "https://gagnagatt.reykjavik.is/api/3/action/package_list" | jq '.result[:10]'

Search datasets

# Search by keyword
curl -s "https://gagnagatt.reykjavik.is/api/3/action/package_search?q=mannfjoldi&rows=5" | jq

# Filter by organization
curl -s "https://gagnagatt.reykjavik.is/api/3/action/package_search?fq=organization:velferdarsvid&rows=10" | jq

# Filter by group (category)
curl -s "https://gagnagatt.reykjavik.is/api/3/action/package_search?fq=groups:ibuar&rows=10" | jq

Get dataset details

curl -s "https://gagnagatt.reykjavik.is/api/3/action/package_show?id=arsuppgjor-a-hluta-reykjavikurborgar" | jq

Download CSV resource

# Get resource URL from package_show, then download
curl -s "https://gagnagatt.reykjavik.is/api/3/action/package_show?id=arsuppgjor-a-hluta-reykjavikurborgar" | \
  jq -r '.result.resources[0].url' | \
  xargs curl -o data/raw/reykjavik/arsuppgjor.csv

Organizations (Departments)

IDNameDescription
thjonustu-og-nyskopunarsvidÞjónustu- og nýsköpunarsviðiðService & Innovation (111 datasets)
velferdarsvidVelferðarsviðiðWelfare Services (85 datasets)
skola-og-fristundasvidSkóla- og frístundasviðiðEducation & Recreation (44 datasets)
umhverfis-og-skipulagssvidUmhverfis- og skipulagssviðiðEnvironment & Planning
fjarmala-og-ahettusjornunarsvidFjármála- og áhættustjórnarsviðiðFinance & Risk Management
menningar-og-ithrottasvidMenningar- og íþróttasviðiðCulture & Sports
mannauds-og-starfsumhverfissvidMannauðs- og starfsumhverfissviðiðHR & Work Environment

Groups (Categories)

IDName
ibuarÍbúar (Residents)
lydheilsa_oryggi_lydraediLýðheilsa, öryggi, lýðræði
velferdarmalVelferðarmál (Welfare)
skolar-menntun-fraedslaSkólar, menntun, fræðsla
fjolskyldanFjölskyldan (Family)
husnaedismarkadur_og_skipulagsmalHúsnæðismarkaður og skipulagsmál
umhverfi_og_audlindirUmhverfi og auðlindir
samgongurSamgöngur (Transport)
menning_ferdamal_og_tomstundirMenning, ferðamál, tómstundir
vinnumarkadurVinnumarkaður (Labor market)
starfsemi_reykjavikurborgarStarfsemi Reykjavíkurborgar

Key Datasets

Financial — Opin Fjármál (Annual Accounts with Vendor Detail)

Use this for: "What does Reykjavík spend on X?", "Who are Reykjavík's biggest vendors?", "How much does Reykjavík pay Strætó/SORPA/etc?"

Dataset: arsuppgjor on gagnagatt — CSV files per year, semicolon-delimited, 2014–2025.

Coverage: A-part only (tax-funded). Three funds: Reykjavíkurborg (Aðalsjóður), Eignasjóður fasteignastofa, Bílastæðasjóður. B-part entities (OR, Strætó, Félagsbústaðir, SORPA, etc.) are not included as buyers — but they appear as vendors when the A-part pays them.

Download URLs (latest years):

# 2024 full year (~94k rows)
curl -sL 'https://gagnagatt.reykjavik.is/dataset/75521327-9d99-47d1-b1fd-a273057cbb4b/resource/54bb63af-1037-47e9-9a00-165b758f09a9/download/uppg202412_island.csv' \
  -o data/raw/reykjavik_accounts/uppg202412.csv

# 2025 Q1-Q3
curl -sL 'https://gagnagatt.reykjavik.is/dataset/75521327-9d99-47d1-b1fd-a273057cbb4b/resource/ccc2422a-63c1-4145-8579-7f4e383afbc6/download/uppg202509_island.csv' \
  -o data/raw/reykjavik_accounts/uppg202509.csv

# For other years, use CKAN API:
curl -s 'https://gagnagatt.reykjavik.is/api/3/action/package_show?id=arsuppgjor' | jq '.result.resources[] | {name, url}'

CSV Schema (semicolon-delimited, UTF-8):

ColumnDescriptionExample
uttakExtract IDUPPG202412
fyrirtaekiFund nameReykjavíkurborg, Eignasjóður fasteignastofa
samtala1Division (svið)Skóla- og frístundasvið
samtala2DepartmentGrunnskólar
samtala3Sub-departmentGrunnskólar
samtala4Category(often empty)
samtala0Unit/school/officeGrandaskóli
tegund1Expense type L1Rekstrargjöld
tegund2Expense type L2Skrifstofu- og stjórnunarkostnaður
tegund3Expense type L3Fjarskiptakostnaður
tegund4Expense type L4(often empty)
tegund0Expense type detailFjarskipti
vm_numerVendor ID (internal)60829
vm_nafnVendor nameSýn hf.
arYear2024
arsfjordungurQuarter (1-4)3
raunAmount ISK8262 (positive=expense, negative=revenue)

Key divisions (samtala1) in 2024:

  • Skóla- og frístundasvið — 80 bn (schools, kindergartens, recreation)
  • Velferðarsvið — 46 bn (welfare services)
  • Menningar- og íþróttasvið — 20 bn (culture, sports)
  • Umhverfis- og skipulagssvið — 12 bn (environment, planning)
  • Framlög til B-hluta — 5.5 bn (transfers to subsidiaries)

Top external vendors (2024): Strætó (5.6 bn), SORPA (2 bn), Veitur/OR (1.5 bn), Slökkvilið (1.5 bn), Skólamatur (817 m).

Note: Salary rows have empty vm_numer/vm_nafn (personal data excluded). Internal transfers (Reykjavíkurborg ↔ Eignasjóður) are the largest "vendor" entries.

DuckDB queries:

-- Top vendors for a division
SELECT vm_nafn, sum(raun) as total
FROM read_csv('data/raw/reykjavik_accounts/uppg202412.csv', delim=';', header=true)
WHERE samtala1 = 'Velferðarsvið' AND raun > 0 AND vm_nafn IS NOT NULL AND vm_nafn != ''
GROUP BY 1 ORDER BY 2 DESC LIMIT 20

-- Spending by division over time (load multiple years)
SELECT ar, samtala1, sum(raun) as total
FROM read_csv('data/raw/reykjavik_accounts/uppg*.csv', delim=';', header=true, union_by_name=true)
WHERE raun > 0
GROUP BY 1, 2 ORDER BY 1, 3 DESC

-- All payments to a specific vendor
SELECT ar, arsfjordungur, samtala1, samtala0, tegund1, tegund2, raun
FROM read_csv('data/raw/reykjavik_accounts/uppg202412.csv', delim=';', header=true)
WHERE vm_nafn ILIKE '%strætó%'
ORDER BY raun DESC
Dataset IDDescription
arsuppgjorAnnual accounts A-part with vendor detail (2014-2025)
arsuppgjor-b-hluta-reykjavikurborgarAnnual accounts section B (enterprises, no vendor detail)

Population & Demographics

Dataset IDDescriptionVerified
mannfjoldi_i_reykjavik_eftir_aldursbilumPopulation by age group (1998-2018)
mannfjoldi_i_reykjavik_eftir_hverfum_og_kyniPopulation by district and gender
mannfjoldi_og_ibudir_i_reykjavikPopulation and housing
midborgin-okkarCentral district housing and population
fjoldi-ibua-eftir-hverfi-og-aldriPopulation by district and age

Education

Dataset IDDescription
nemendur-i-tonlistarskola-*Music school enrollment
nemendafjoldi-i-fristundaheidmilumAfter-school program enrollment
grunnskolanemendur-*Primary school students

Welfare Services

Dataset IDDescription
heimastudningur-*Home support services
fjoldi-*-fatlads-folksDisability services
felags-og-fjolskylduthjonusta-*Social and family services

Infrastructure

Dataset IDDescription
neysluvatn-veitufra-rvk-efnamaelingarDrinking water quality
efnamaelingar-a-strondumog-i-sjorumCoastal water quality
rafmagn-og-heitavatn-og-kalt-vatnEnergy and water consumption
sorphirda-*Waste collection statistics

Elections

Dataset IDDescription
sveitarstjornarkosningar-*Municipal election results (1986-present)
kjorsokn-*Voter turnout data

Nationality/Citizenship (ríkisfang)

CKAN datasets:

Dataset IDDescription
erlendir_rikisborgarar_i_reykjavik_eftir_rikisfangi_med_ar_rikisfang_og_kyni_i_stafrofsrodForeign citizens by country, year, gender (1998-present)
erlendir_rikisborgarar_i_reykjavik_eftir_hverfumForeign citizens by district
erlendir_rikisborgarar_i_reykjavik_eftir_heimsalfumForeign citizens by continent
atvinnuleysi_i_reykjavik_eftir_manudum_rikisfangi_og_kyniUnemployment by nationality and gender
algengustu_thjoderni_barna_af_erlendum_uppruna_i_leikskolum_borgarinnarMost common nationalities in kindergartens
algengustu_thjoderni_nemenda_i_grunnskolum_sem_fengu_kennslu_i_islensku_sem_odru_tungumaliNationalities of students learning Icelandic as 2nd language
fjoldi_barna_af_erlendum_uppruna_i_leikskolum_reykjavikur_eftir_thjonustumidstodvumForeign-origin children in kindergartens by district
thjoderni_og_fjoldi_farthega_skemmtiferdaskipa_sem_fara_um_hafnir_faxafloahafnaCruise passenger nationalities

PX-Web tables (velstat.reykjavik.is):

TablePathDescription
VEL11008.px200. Arsskyrsla/11 Mannfjoldi/Population by district and nationality (2010-2022)
VEL11006.px200. Arsskyrsla/11 Mannfjoldi/Population by service center, age, nationality
VEL02009.px200. Arsskyrsla/02 Fjarhagsadstod/Financial assistance recipients by nationality
VST10006.px100. Manadarleg tolfraedi/10. Heimilisofbeldi/Domestic violence reports by nationality

Response Structure

{
  "success": true,
  "result": {
    "id": "6e0aca8d-4690-4209-a0e9-a87ebd2c412b",
    "name": "arsuppgjor-a-hluta-reykjavikurborgar",
    "title": "Ársuppgjör A-hluta Reykjávíkurborgar",
    "notes": "Dataset description...",
    "resources": [
      {
        "id": "60ab64ee-866a-4cd0-9b08-0d6ecda1b254",
        "name": "uppg202509_island.csv",
        "format": "CSV",
        "url": "https://gagnagatt.reykjavik.is/dataset/.../download/uppg202509_island.csv"
      }
    ],
    "organization": {...},
    "tags": [...]
  }
}

CSV Format

Reykjavík CSVs use Icelandic locale formatting:

SettingValue
Delimiter; (semicolon)
Decimal, (comma)
EncodingUTF-8

DuckDB

SELECT *
FROM read_csv('data/raw/reykjavik/file.csv',
  delim=';',
  decimal_separator=','
)

Python (polars)

import polars as pl
df = pl.read_csv('data/raw/reykjavik/file.csv',
  separator=';',
  decimal_comma=True
)

miller

mlr --icsv --ifs ';' --ocsv cat data/raw/reykjavik/file.csv

Data Caveats

  1. Icelandic CSV format: Semicolon delimiter, comma decimal separator (see CSV Format above).

  2. Naming conventions: Dataset IDs use Icelandic with hyphens or underscores. Years often appear at end (e.g., 2011-2022).

  3. Multiple resources: Datasets often contain multiple CSV files for different time periods. Check resources array for all files.

  4. License: Most datasets use "other-open" license allowing reuse.

  5. Time series: Historical data is often split across multiple dataset IDs by year range.

  6. Updates: Datasets are updated at varying frequencies. Check metadata_modified for last update.

Icelandic Terms

Common Column Headers

IcelandicEnglish
ÁrYear
AldurAge
KynGender
FjöldiCount/number
HlutfallShare/proportion
Heild / AllsTotal

Domain Terms

IcelandicEnglish
ÁrsuppgjörAnnual accounts
ÍbúarResidents
HverfiDistrict/neighborhood
ÞjónustaService
VelferðWelfare
SkólarSchools
FjölskyldaFamily
HeimastudningurHome support
SorphirðaWaste collection
NeysluvatnDrinking water
KosningarElections
MannfjöldiPopulation
RíkisfangCitizenship/nationality
Erlendur/ErlendirForeign
Íslenskur/ÍslensktIcelandic
ÞjóðerniNationality/ethnicity
UppruniOrigin
AtvinnuleysiUnemployment
FjárhagsaðstoðFinancial assistance
HeimilisofbeldiDomestic violence
GerandiPerpetrator
ÞolandiVictim
ÞjónustumiðstöðService center

Example queries (DuckDB)

Population time series from raw data:

SELECT
  Ár as year,
  Fjöldi as population
FROM read_csv('../data/raw/reykjavik/mannfjoldi_aldursbil.csv',
  delim=';',
  decimal_separator=','
)
WHERE Aldur = 'Alls'
ORDER BY year

-- Example: From processed data (standard CSV format)
SELECT *
FROM read_csv('../data/processed/reykjavik_population.csv')
ORDER BY year

Signals

GitHub stars
53
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
reykjavik
Source
github.com/jokull/icelandic-data