Open data
Every night we work out which energy offers are cheapest for five standard households. We give the result away: the five cheapest per day, roughly what that amount is made of, figures for the whole market, and the day an offer appeared and disappeared.
The tariffs themselves, the full ranking and a calculation for your own home are not in it. That is what we sell, for €2.99.
Right now we price 130 contracts from 31 suppliers. Every figure is an estimate: the tariffs as the supplier publishes them, worked out for the stated consumption. The binding offer comes from the supplier itself.
Using it
The licence is CC BY 4.0. Use the files freely, commercially too, as long as you name the source: "Switchje, switchje.nl/data".
How the ranking is made is explained under how we rank.
Files
| file | rows | period | download |
|---|---|---|---|
| cheapestThe five cheapest offers per day, with the cost split. One file per household and one with everything. | |||
| cheapest_all | 975 | 7 September to 15 October 2026 | csvjson |
| cheapest_median | 195 | 7 September to 15 October 2026 | csvjson |
| cheapest_solar | 195 | 7 September to 15 October 2026 | csvjson |
| cheapest_heatpump | 195 | 7 September to 15 October 2026 | csvjson |
| cheapest_hybrid-heatpump | 195 | 7 September to 15 October 2026 | csvjson |
| cheapest_ev | 195 | 7 September to 15 October 2026 | csvjson |
| market_dailyThe whole market per day: how many offers there are per contract type, the median, the spread, cashbacks, what was added or withdrawn, and how many offers were repriced. | |||
| market_daily | 195 | 7 September to 15 October 2026 | csvjson |
| market_by_contractPer day and contract type the cheapest, the median and the priciest offer, unnamed, and how many were estimated on the reference price. | |||
| market_by_contract | 1170 | 7 September to 15 October 2026 | csvjson |
| market_hoursThe exchange price per month and hour of the day over the past twelve full months, and the gas price per month. JSON only. | |||
| market_hours | 288 | 1 October 2025 to 30 September 2026 | json |
| market_reference_historyThe weighted twelve-month average exchange price (four figures) for every window that ended on a month boundary since 2020: the range behind the dynamic and hybrid estimate; the last window is the twelve-month average shown beside it. JSON only. | |||
| market_reference_history | 74 | 1 September 2020 to 1 October 2026 | json |
| market_monthlyThe exchange price per calendar month since September 2019: bare (electricity hourly mean, gas daily mean) and weighted like the reference price. JSON only. | |||
| market_monthly | 86 | 1 September 2019 to 1 October 2026 | json |
| market_recentToday's reference price: the exchange price of the past 30 days, with that window's place in the monthly series. Refreshed nightly. JSON only. | |||
| market_recent | 1 | 15 September to 14 October 2026 | json |
| offer_lifecycleFor each offer, the day we first saw it and the day it disappeared. | |||
| offer_lifecycle | 133 | csvjson | |
Last updated: 15 October 2026 at 08:41. A missing date means we had no valid run that day. We add rows and never rewrite them. If the meaning of a column changes, the schema gets a new number and the old file stays for a year.
The five households
Usage comes from CBS table 85140NED (2025), the median per type of home. For the heat pump and the electric car we add a typical extra usage to the median, following Milieu Centraal and ANWB. Grid fees differ in another region.
| electricity kWh | gas m³ | feed-in kWh | |
|---|---|---|---|
| median | 1910 | 870 | 0 |
| solar | 2360 | 1000 | 2190 |
| heatpump | 4900 | none | 0 |
| hybrid-heatpump | 3800 | 350 | 0 |
| ev | 4000 | 870 | 0 |
The same for all five: registers single, meter smart, grid region stedin.
Where the numbers come from
- median
- CBS 85140NED 2025, cv zonder zonnestroom, percentiel 50 (https://opendata.cbs.nl/#/CBS/nl/dataset/85140NED)
- solar
- CBS 85140NED 2025, cv met zonnestroom, percentiel 50; feed-in = P50 levering - P50 netto (https://opendata.cbs.nl/#/CBS/nl/dataset/85140NED)
- heatpump
- median household (CBS) + 3000 kWh all-electric heat pump (Milieu Centraal: 2750-3440 kWh, well-insulated tussen/hoek/2-onder-1 woning); no gas connection
- hybrid-heatpump
- median household (CBS) + 1900 kWh hybrid heat pump (Milieu Centraal: 1600-2200 kWh), gas reduced by 60%
- ev
- median household (CBS) + 2100 kWh for an EV charged at home (ANWB: 15-20 kWh/100 km x 12,000 km)
Dynamic contracts
A dynamic contract has no fixed rate. To compare them anyway, we price every supplier on the same market price: the exchange price of the past 30 days, refreshed nightly. Only the markup, the feed-in deduction and the standing charges then differ per supplier. In the files you recognise those rows by basis = reference. On a day that is not possible, the offer still counts in the market figures but is not in the top 5.
The market price in force
- electricity, household without solar
- 15.99 ct/kWh
- electricity, household with solar
- 17.72 ct/kWh
- feed-in
- 9.70 ct/kWh
- gas
- 75.7 ct/m³
- weighted by the standard profile (MFFBAS E1A, gas G1A) over
- 15 September to 14 October 2026
trailing 30 days of EPEX NL day-ahead hourly prices, bare, weighted by the MFFBAS standard profiles: delivery = sum(price x E1A afname fraction, household without PV) / sum(fraction); delivery_pv = the same with the E1A afname profile of a household with PV; feed_in = weighted by the E1A invoeding profile of a household with PV; gas = the daily day-ahead gas price weighted by G1A. The flat figures (time-weighted mean of all hours; mean over 10:00-15:59 Europe/Amsterdam; mean of the daily gas price) are given beside them
What the columns mean
| column | meaning |
|---|---|
| cheapest | |
| date | day of the calculation |
| profile | standard household |
| rank | position, 1 is cheapest, never below 5 |
| supplier | supplier code |
| supplier_name | supplier |
| product | the supplier's product name |
| contract_type | fixed, variable, dynamic or hybrid |
| duration_months | term in months, empty is open-ended (in market_by_contract: the term for fixed_*, else empty) |
| yearly_cost_eur | yearly cost including VAT, averaged over the term |
| supply_eur | what the supplier charges for the energy itself |
| taxes_levies_eur | energy tax minus the tax credit |
| network_eur | grid operator fees |
| feed_in_credit_eur | feed-in credit and feed-in fees, negative is a credit |
| one_off_eur | one-off amounts such as cashback or setup fees, spread over the term |
| basis | quoted is the stated rate, reference is priced on the market price above |
| retrieved_at | the date the tariff was taken on |
| schema_version | version of this schema |
| feed_in_income_eur | what the fed-in kWh earn (net metering and the feed-in rate), negative |
| feed_in_cost_eur | feed-in fees; income plus cost is feed_in_credit_eur |
| market_daily | |
| date | day of the calculation |
| profile | standard household |
| offers_priced | offers we could price for this household |
| offers_fixed | of which fixed |
| offers_variable | of which variable |
| offers_dynamic | of which dynamic |
| offers_hybrid | of which hybrid |
| median_yearly_cost_eur | median yearly cost |
| spread_eur | difference between the cheapest and the priciest |
| offers_with_cashback | offers with a cashback |
| offers_added | offers we first saw that day |
| offers_withdrawn | offers that disappeared that day |
| schema_version | version of this schema |
| offers_repriced | offers priced differently from the previous exported day (empty before 19 September 2026) |
| market_by_contract | |
| date | day of the calculation |
| profile | standard household |
| contract_type | fixed, variable, dynamic or hybrid |
| duration_months | term in months, empty is open-ended (in market_by_contract: the term for fixed_*, else empty) |
| offers | offers of this contract type |
| offers_reference | of which estimated on the reference price |
| cheapest_eur | cheapest yearly cost |
| median_eur | median yearly cost |
| priciest_eur | priciest yearly cost |
| schema_version | version of this schema |
| estimate_low_eur | the cheapest estimated offer on the lowest reference price of the past years (market_reference_history) |
| estimate_high_eur | the same offer on the highest |
| estimate_year_eur | |
| group | contract type as the usage map has them: fixed_12, fixed_24, fixed_36 (fixed 1, 2, 3 years), variable, dynamic, hybrid; a term on a dynamic contract stays dynamic |
| offer_lifecycle | |
| supplier | supplier code |
| supplier_name | supplier |
| product | the supplier's product name |
| contract_type | fixed, variable, dynamic or hybrid |
| duration_months | term in months, empty is open-ended (in market_by_contract: the term for fixed_*, else empty) |
| first_seen | first day seen |
| withdrawn_on | first day no longer seen, empty is still on sale |
| schema_version | version of this schema |
For AI assistants
The same data is also available as an MCP server. It is read-only and needs no login.
https://switchje.nl/mcp