Denmark just had an election.
The day after, everyone had a theory.
Too much immigration talk.
Too little.
The economy.
The prime minister.
A protest vote.
A realignment.
Everyone had a story.
Almost nobody had numbers.
The numbers were already there.
In Danmarks Statistik.
Free to use.
Published in structured form.
Ignored almost immediately.
So I built a tool to read them.
One clarification before anything else:
The 2026 results are not in this tool yet.
Danmarks Statistik typically publishes municipal-level data three to four months after an election.
What this tool contains is the five most recent complete elections — 2007, 2011, 2015, 2019, and 2022.
That is the dataset. The patterns in it are real. The gap to 2026 is honest.
What it does
It takes municipal-level vote share per party across those five elections and cross-references them with socioeconomic data from the same 98 municipalities.
Income.
Education level.
Social assistance recipients.
Reported crime.
Passenger cars.
Divorces.
Employment.
Share of residents aged 65 and above.
For each pairing, it computes a Pearson correlation.
Not a theory.
Not a narrative.
Just whether two variables move together — and how strongly.
The output classifies the correlation as strong, moderate, weak, or none.
The threshold is the r value.
Not the political direction. Not the party. Not the result anyone was hoping for.
What it found
In the 2022 election, lower-income municipalities gave significantly more votes to the Social Democrats.
Pearson r = −0.71.
The 10 lowest-income municipalities gave 33.5% to the Social Democrats.
The 10 highest-income municipalities gave 19.1%.
A gap of 14.4 percentage points, consistent across all 98 municipalities.
Wealthier municipalities moved the other way for Liberal Alliance.
r = 0.61.
The Social-Liberal Party tracked municipal income even more tightly in 2015.
r = 0.73.
The strongest income correlation of any party in any year in the dataset.
These are not revelations.
They are measurements.
The difference matters.
What it does not do
It does not explain why a pattern exists.
A correlation between income and votes does not mean income causes voting behaviour.
It means they move together across municipalities.
That is a different claim. A smaller one. A more defensible one.
The tool labels it clearly on every result:
This is a correlation, not a cause.
It does not fill in missing data.
It does not editorialize.
It does not rank parties against each other.
It treats Venstre and Enhedslisten the same way.
If a combination shows no pattern, that result is shown — not hidden.
Who it is for
Someone about to write an explanation of an election
who should probably look at the data first.
Journalists who want to know what the numbers actually show before committing to a framing.
Researchers who want a fast entry point into municipal-level Danish political geography.
Anyone who has noticed that explanations offered after elections are usually assembled from instinct first
and evidence second —
if at all.
The tool does not replace reporting.
It replaces the part where you skip looking.
The data was already there.
It just needed somewhere to be read.
Danish Politics Data — open the tool
Source code and data on GitHub
— Dennis Hedegreen