Skip to main content
Gary
Rank 1
Rank 1
March 9, 2017
Solved

Can we get access to the OVO energy online account API to download our smart meter usage data?

  • March 9, 2017
  • 227 replies
  • 36559 views

Hi Ovo,

I wondered whether the API that powers your live and historical usage page in the account menu is something you could look into opening up a bit so we can freely access our raw data and also perhaps it may stimulate some interesting community projects?

For instance (more sport related), Strava and Fitbit.

Best answer by g-de

Updated on 14/08/25 by Abby_OVO

 

Tim_OVO: “We love seeing the innovative ways our customers are using tech to help monitor and manage their energy usage. It’s inspiring us to think about ways to do energy differently. We know some customers have been using some of the application programming interface (APIs) behind our public facing services. While we’re OK with that, we do need to make you aware of a couple of things.

 

These APIs are designed to be used by OVO teams only, and aren't public facing. There are some downsides to using APIs that aren't for the public, and we wanted to let you know what these are. Behind the scenes, OVO uses APIs to share and update information between systems that power your bills and your online account. This is done in partnership with Kaluza, the tech company that’s part of the OVO family. They’ve built the billing platform designed to put our customers in the driving seat of their energy usage. 

 

These internal APIs are intended for use by Kaluza and its clients, who are energy retailers like OVO, rather than customers. Because of this, there’s no support for them being used anywhere else, which means they may be discontinued with no notice when we update our products and services. 

 

OVO Energy and Kaluza need to be able to monitor these APIs, and may block access if there's any problems in the future.

 

We know some customers may have put time and effort into developing solutions that use these API. So, now that you know the risks, we want to hear from you on how you’re using the APIs and the problems you’re solving with your DIY approach. 

 

Is there anything you’d like to see from OVO to help you monitor and manage your energy better? Leave a comment below to tell us.”

 

can you help me understand if the links above allow users to access raw data as if from an API?

I can certainly give it a go.

 

Firstly, big thanks to Timmo and other contributors for developing the library. All thanks go to them and links to buy them a coffee for their effort can be found on PyPi or GitHub:

https://pypi.org/project/ovoenergy/
https://github.com/timmo001/ovoenergy

 

I assume the way the library was developed this was to reverse engineer the My OVO website. That is, browse the website as normal and and monitor the traffic to see what OVO URLs and APIs it uses. Assuming this is the case, one of these URLs (get account IDs) already seems to be different but the library is still working for the moment. The APIs being used are not officially supported outside of the website, so first, a warning that any changes to the My OVO website may break the library.

 

For anyone using Python, you should be able to include the ovoenergy library and look at https://github.com/timmo001/ovoenergy/blob/master/ovoenergy/cli.py for how to use it.

 

For replicating this in other languages, the process seems to be as follows:

  1. Login by sending a POST request to https://my.ovoenergy.com/api/v2/auth/login with the following JSON in the body:
    {
    "username": "...",
    "password": "...",
    "rememberMe": true
    }

    From the response, save the cookies to use in all future requests.

  2. Next, send a GET request to https://smartpaym.ovoenergy.com/api/customer-and-account-ids . Be sure to save the items in the “accountIds” property (usually only one item).
  3. Finally, make a GET request to https://smartpaym.ovoenergy.com/api/energy-usage/daily/{accountId}?date={yyyy-MM} where {accountId} is the value from the previous request and {yyyy-MM} is the month in the format 2020-08.

You can also get monthly or half-hourly usage using the following URLs similar to step 3:

As mentioned above, if this is wanted for Home Assistant, the integration was added in version 0.114 (https://www.home-assistant.io/integrations/ovo_energy/).


Unfortunately the data only goes up to the end of the previous day as OVO no longer provide real-time data:

 

227 replies

MikeWilliams
Newcomer
Newcomer
December 22, 2025

@X10 - Please refer to table MeterReadings in the SQLIte database
Column Type will tell you if the reading is an estimate.
 

Full reply stuck in moderation queue.

/Mike

Firedog
Super User
Super User
December 22, 2025

… does anyone know if there is any way to tell if the data being retrieved is estimate or actual readings? … I just wondered if there is some easy way to tell which are estimates and which are actual.
 

The data retrieved by Mike’s tool are taken from your OVO account. If half-hourly quantities are retrieved, they must have been taken by OVO from your meter at some stage. I’m fairly sure that the system doesn’t generate estimates of half-hourly usage - they wouldn’t be of much use for anything.

It’s possible that meter register readings (the midnight snapshot stored in the meter and saved for a month) weren’t being reliably retrieved, so estimates were used instead both for billing and to generate daily and monthly usage figures. Readings will normally be labelled to indicate their provenance.

Noel | I have no official status; I'm just a volunteer who comes here to help other customers. My gear: Aclara SGM 1416-B Electricity-only E7 meter; Chameleon IHD3-PPMID-AAA | It may look as if I know what I’m talking about, but don’t let that fool you. |
MikeWilliams
Newcomer
Newcomer
December 22, 2025

@X10 ​@Firedog

"Readings will normally be labelled to indicate their provenance."

That's exactly what you see in the table "MeterReadings" type column gives you.

Firedog
Super User
Super User
December 22, 2025

@X10 ​@Firedog

"Readings will normally be labelled to indicate their provenance."

That's exactly what you see in the table "MeterReadings" type column gives you.
 

Yes but … I can see that my own current reading history is a bit hit-and-miss for the SMETS1 era, in my case 2017-2023 (X10 is still on SMETS1). This was also a period when OVO were onboarding a completely new billing system, Orion, to replace the unreliable Apollo. Migration from one to the other didn’t go smoothly for everybody. Luckily, I have my own records going back several years.

Whilst you’re around, Mike, I’d better report that my MeterReadings tables aren’t populating. The readings are all there in the dump, but there’s no chronology to them. I wonder if that’s upsetting your code that puts JSON into DB. 

This isn’t bothering me, but if it’s affecting others , bafflement might ensue …

 

Noel | I have no official status; I'm just a volunteer who comes here to help other customers. My gear: Aclara SGM 1416-B Electricity-only E7 meter; Chameleon IHD3-PPMID-AAA | It may look as if I know what I’m talking about, but don’t let that fool you. |
MikeWilliams
Newcomer
Newcomer
December 22, 2025

@Firedog

My meters are both SMETS1.

I have left OVO, gone to Octopus for their EV tariff.

If you can PM me the JSON file dump from my app and the JSON file from same source you gave me last time I will try to see if I can find out what the difference is. I request less data in the GraphQL query, than the OVO website does so that I only fetch what is needed.

 

The major issue is that I will NOT be able to test any changes.

 

/Mike

Firedog
Super User
Super User
December 22, 2025

If you can PM me the JSON file dump from my app and the JSON file from same source you gave me last time I will try to see if I can find out what the difference is.
  

@MikeWilliams Let’s see how this goes. We’ve not got anything better to do these days, have we!

Noel | I have no official status; I'm just a volunteer who comes here to help other customers. My gear: Aclara SGM 1416-B Electricity-only E7 meter; Chameleon IHD3-PPMID-AAA | It may look as if I know what I’m talking about, but don’t let that fool you. |
MikeWilliams
Newcomer
Newcomer
December 22, 2025

@Firedog I have got the files downloaded, you can delete your post now

MikeWilliams
Newcomer
Newcomer
December 23, 2025

Thanks ​@Firedog - I have fixed the program using your data set.

It was a SNAFU where I added code to handle my account, which had an end date set.

V1.0.9 is available for download at https://github.com/MikeWilliams-UK/My-Ovo-Data/releases

MikeWilliams
Newcomer
Newcomer
December 23, 2025

Hi Everyone

I have just released a new version of my program to

https://github.com/MikeWilliams-UK/My-Ovo-Data/releases/latest

This version has corrected a minor issue when obtaining YOUR meter readings

Newcomer
December 23, 2025

@X10 - If you have used my program and look into the data in the SQLite database using a program such as SQLite Studio (which is free https://sqlitestudio.pl/) you will be able to see in the table MeterReadings when the column Type has a value of “ESTIMATE”

/Mike

 

So for the MeterReadings Table, it only shows my daily reads that were ACTUAL, all the days, that presumeably my meter wasn’t sending data, are just not there, they don’t say ESTIMATE.

Under HalfHourlyElectricity, there is no type column, but it only shows data for the days that a read was taken, so the same data missing for the days that are not included in the main MeterReadings.

Is that expected output, or am I missing a filter somewhere? 

 

 

Also, what’s the difference between the “Get Usage” and “Get Readings” buttons, I couldn’t see any obvious difference when exporting data to xlsx.

 

Thank you!