Challenge Project

Cheapest Charging Around

Weiterentwicklung der BfE-Info-Plattform; «Ich tanke»; Verbesserung der Transparenz

Github repo:

(English below)

Günstigste Lademöglichkeit in der Umgebung (#4)


Weiterentwicklung der GIS-Plattform vom Bundesamt für Energie (BFE): Preisinformationen integrieren und die günstigste Lademöglichkeit in der Nähe für Elektroautofahrer finden.


Ein Charge Point Operator (CPO) ist eine Firma, die einen Ladestationen-Pool betreibt. Der CPO stellt smarte Ladestationen den E-Mobility Service Providern zur Verfügung (EMPs). Ein EMP ist eine Firma, die Ladeleistungen den Elektroautofahrern anbietet, z. B. mit einer Zugangskarte zur Identifizierung und Aktivierung des Ladenvorgangs und entsprechenden Ladeabonnements. Der EMP ermöglicht dem User den Zugang zu einer Auswahl von Ladestationen in einer bestimmten Region. Eine Firma kann beides CPO und EMP sein. Unterschiedliche EMPs haben unterschiedliche Preise für das Laden an der gleichen Ladestation. Die Idee ist, die günstigste Lademöglichkeit für den Kunden eines bestimmten oder mehrerer EMPs zu finden.


Grosse Preisunterschiede existieren heute zwischen den unterschiedlichen EMP Preisen für das Laden an der gleichen Ladestation. Diese Lösung soll die Kunden besser informieren und ihnen helfen, die beste Preisoption auszuwählen. Die Transparenz ist erhöht und die Market Performance ist verbessert.


Cheapest charging around

E-Mobility - further development of


Further development of the GIS platform of the Swiss Federal Office of Energy (SFOE): Add price information to the charging stations and find the cheapest option around for electric car drivers.


A Charge Point Operator (CPO) is a company operating a pool of charging points. A CPO provides value by connecting smart charging devices to E-Mobility Service Providers (EMPs). An EMP is a company offering an EV charging service to EV drivers. EMPs provide value by enabling access to a variety of charging points around a geographic area. One company can be CPO and EMP at the same time.

As a result, at each charging station of a certain CPO pool, different EMPs have different prices. The idea is to find the cheapest charging station around a user according to their EMP subscription(s).

Big picture:

Big differences in EMP prices exist at certain charging stations. This solution should help users to choose the best pricing options. Transparency and market performance is increased and the user/consumer is better informed.


Update: Removed old not continued documentation:

28.08.2020 19:11


Challenge goal

Further development of the GIS platform of the Swiss Federal Office of Energy (SFOE): Add price information to the charging stations and find the cheapest option around for electric car drivers.

Compile the price information: not so easy at it may seem

Finding the prices

What we needed was of course the list of the prices for every provider coherently compiled and available for comparison. At the very beginning we toyed a little with the idea of scraping the provider's websites to harvest the price information. This approach was quickly proved as unfeasible since for many providers the price structure is not even clearly published and, even when it is, each provider present it in its own way or only through their proprietary mobile app. Public APIs are not available and we had to scrap that approach too.

At the end, we resorted to manually look for and extract the pricing information from the various websites. For time reasons we limited ourselves to three of the biggest providers.

Price structure consolidation

KWh, per minute, per hour, monthly abo, yearly abo, one-time fee per plug-in, flatrates, roaming... and many permutations of all that. The pricing landscape is obscure and confusing. We thus spent quite a lot of time looking for a way to model this variety and compile it in a single table.

We settled for the concept of "tariff plan" as our object. Discriminating parameters are the tariff provider, the roaming partner, time of the day, power type and KW at the plug. With such a structure we are able to filter for the chosen plug paramenters and present the user the tariff plans available for that particular plug. As far as pricing information goes, we could not really consolidate it to a single measurement unit (ex: chf per KWh) because of the diversity in the pricing structures. Therefore, for each tariff plan we show the price in the same measurement units given by the provider. Because of this, it was also not possible to give the final charge price to the user to fill the battery. In addition, this would require a lot of information about the vehicle that are here out of scope.

Main problems

As already stated, we faced several problems during our data collection and consolidation process. * The pricing data is not publicly available, or very hard to find. * Some pricing information is available only to registered customers. * There is no common denominator across the tariff plans across different providers. And even within the same provider we found often huge differences in price calculations. Comparing the various tariff plans is therefore almost impossible. * We did not manage to harvest the price structures programmatically and had to resort to manual work. * The price also depends on the car type (max. kW input, battery volume etc.)

Our solution

To allow a user to compare the available tariff plans for a given charging station we combined the following elements: * A leaflet webmap. The map uses the publicly available geoJSON from the Federal Spatial Data Infrastructure (FSDI) to visualize the charging stations. * The freely accessible FSDI API at to retrieve the full station and plug informations * Our static table (filled as a google sheet then transformed to JSON for the webapp) with the tariff plans information.

When the user picks a charging station, the application retrieves the ID from the geoJSON and then uses it to make an API call to This retrieves all the needed information about the available plugs at the station. The app then filters the tariff table to present the valid plans and the pricing information.

Filter parameters are:

API result attribute Tariff table attribute
This looks for al the tariff plans valid for the selected station's operator
OperatorName tariffprovier
Some tariff plans depend on the available power at the plug.
QueryChargingFacilities validkw
Time of the day
Some tariff plans depend on the time of the day.
- start
Power time
Some tariff plans depend on power type (AC or DC).
QueryChargingFacilities powertype

Data model of the tariff table

You can find the table here

Variable name Description
tariffprovier String
Name of the provider offering this tariff
roamingpartner String
Name of the roaming partner for this tariff. Is the same as tariffprovider if not a roaming tariff
tariffname String
Name of the tariff
validkw String
Comma-separated list of the plug powers using this tariff
start hh:mm:ss
Validity start for this tariff plan
end hh:mm:ss
Validity end for this tariff plan
powertype String
"AC", "DC" or "AC, DC" where the info is not available
flatrate Boolaen
Informs if the tariff is a flatrate one (pay once, charge unlimited without additional costs)
chfplug-in Float
Base fee just to plug-in the car, in Swiss Francs for this tariff
chfminute Float
Fee in Swiss Francs per minute plugged in
chfkwh Float
Fee in Swiss Francs per KWh delivered by the plug
chfmonth Integer
Cost in Swiss Francs of the monthly subscription
chfyear Integer
Cost in Swiss Francs of the yearly subscription

Known problems and possible ameliorations

Ours is a rudimentary solution that must be considered as an early-stage POC.

The main issues are:

  • A static and still rudimentary tariff "database"
  • Incomplete tariff data
  • Data model has to be optimized
  • Filter to be revised
  • Not integrated with
  • Impossible to calculate the total cost of a charge
  • Still almost impossible for a user to make meaningful comparisons because of the different price calculations
  • Car parking costs are not considered

Outlook and needed ameliorations

  • Include more operators
  • Automatic fetching of updated tariff information
  • Integration of the data into
  • Integration user data such as car type, battery status, ...
  • Integration of parking costs
  • Develop a real webapp :smile:

Lessons learned

  • The data needs to be open, easily and freely accessible in order to develop such an applications
  • There is a need for a standard way to describe the costs ot make a meaningful comparison possible
  • It is a pleasure to work with the freely available DIEMO data (both the static JSON than via the FSDI API)
  • Open Data is nice!
This content is a preview from an external site.

Event finished


29.08.2020 12:38 ~ afoletti


Event started

Contributed 4 years ago by nikki_bhler for Energy Data Hackdays 2020
All attendees, sponsors, partners, volunteers and staff at our hackathon are required to agree with the Hack Code of Conduct. Organisers will enforce this code throughout the event. We expect cooperation from all participants to ensure a safe environment for everybody. For more details on how the event is run, see the Guidelines on our wiki.

Creative Commons LicenceThe contents of this website, unless otherwise stated, are licensed under a Creative Commons Attribution 4.0 International License.