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 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!

 

Hi ​@X10

  • “Get Usage” button updates the tables “MonthlyElecric/Gas”, “DailyElecric/Gas”, “HalfHourlyElecric/Gas” which are your consumption in kWh per period.
    You should select the most appropriate range to get the usage figures for.  The first time that you use the application on an account it is recommended to select "All Time" then click on the "Get Usage"
  • “Get Readings” button fetches the last 400 meter readings in units.
Firedog
Super User
Super User
December 30, 2025

I have just released a new version of my program to

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

Thanks again, ​@MikeWilliams, and sorry to have been so long getting back to you. Odd things have been happening the past few days …

The program now seems to be working completely as intended, so we can leave you in peace until OVO decide to mess things up again.

Happy New Year 🍾

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. |
Newcomer
January 5, 2026

@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!

 

Hi ​@X10

  • “Get Usage” button updates the tables “MonthlyElecric/Gas”, “DailyElecric/Gas”, “HalfHourlyElecric/Gas” which are your consumption in kWh per period.
    You should select the most appropriate range to get the usage figures for.  The first time that you use the application on an account it is recommended to select "All Time" then click on the "Get Usage"
  • “Get Readings” button fetches the last 400 meter readings in units.

Thank you ​@MikeWilliams 

 

Does anyone else know if getting only the actual readings is the expected behaviour, I don’t have any readings for any other days, so lots of data missing. I would have thought the estimated reads would also show up on there.

Firedog
Super User
Super User
January 5, 2026

  

Does anyone else know if getting only the actual readings is the expected behaviour, … I would have thought the estimated reads would also show up …
  

Estimated readings are used by the billing people in order to make it possible to calculate bills etc. when no actual readings are available. What Mike’s utility retrieves is the same data as the billing people get. 

You may find that utilities that get usage data from the meter itself produce more results than OVO can. I use both Bright and n3rgy, but only OVO can retrieve meter readings.

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. |
Rank 2
March 11, 2026

I’ve got some metrics from smartpaymapi.ovoenergy.com/usage/api but I had been hoping there would be a metric for Econ7 and Anytime but there’s just consumption in khw.

Does anyone know about how to get Econ7 and Anytime metrics out of the API?

JSON fragment

 

Firedog
Super User
Super User
March 11, 2026

Those are usage data for half-hourly periods, each page usually giving 48 figures from midnight to midnight GMT.

For peak/offpeak usage over a 24-hour period, you’d have to check the actual register readings. Mine look like this:
  

                                                      {                                 "node": {                                     "reading": {                                         "type": "ACTUAL",                                         "date": "2026-03-11",                                         "lifecycle": "INLIFE",                                         "source": "SMART_METER",                                         "meterSerialNumber": "22M01****8",                                         "registers": [                                             {                                                 "registerId": "1",                                                 "timingCategory": "PEAK",                                                 "value": "2284.276",                                                 "__typename": "MeterRegisterReading_nextV1"                                             },                                             {                                                 "registerId": "2",                                                 "timingCategory": "OFF_PEAK",                                                 "value": "582.05",                                                 "__typename": "MeterRegisterReading_nextV1"                                             }                                         ],                                         "__typename": "ElectricityMeterRead_nextV2"                                     },                                     "__typename": "ValidReading_nextV1"                                 },                                 "__typename": "MeterReadEdge_nextV1"                             },                             {                                 "node": {                                     "reading": {                                         "type": "ACTUAL",                                         "date": "2026-03-10",                                         "lifecycle": "INLIFE",                                         "source": "SMART_METER",                                         "meterSerialNumber": "22M01****8",                                         "registers": [                                             {                                                 "registerId": "1",                                                 "timingCategory": "PEAK",                                                 "value": "2279.521",                                                 "__typename": "MeterRegisterReading_nextV1"                                             },                                             {                                                 "registerId": "2",                                                 "timingCategory": "OFF_PEAK",                                                 "value": "581.744",                                                 "__typename": "MeterRegisterReading_nextV1"                                             }                                         ],                                         "__typename": "ElectricityMeterRead_nextV2"                                     },                                     "__typename": "ValidReading_nextV1"                                 },
 

The URL for these JSON data is https://api.eu1.prod.kaluza.com/graphql/1, but the request includes details narrowing down its scope. You might find it more profitable to check out Mike Williams’ lovely little OvoData utility - he’s published all his source code for people like you to plunder.

 

You will never get correspondence between the nominal half-hourly buckets (e.g. from 00:00:00 to 06:59:59) and the difference between two days’ offpeak register readings. This results from the meter’s ‘randomized offset’, which delays the start and end of each offpeak period by a few minutes. In my sample data, yesterday’s offpeak consumption was 582.050 - 581.744 = 0.306 kWh. The half-hourly data for the nominal offpeak period (14 buckets) add up to 0.318 kWh. 

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. |
Rank 2
March 11, 2026

That’s what I’m after, I’ll take a wander through the code and see what I can grab.

I’m not too worried by matching the figures with the bills, I’m much more interested in trends and which appliances are consuming power overnight.

A task for a rainy day I think.

Then it’ll be trying to put ambient temperature in the same dataset.

Newcomer
July 25, 2026

For anyone who wants a (mostly Python) local web-app version of ​@MikeWilliams project I have ported here:

https://github.com/nigelainscoe/My-Ovo-Data-Web

 

Obviously, this is just a port, the kudos for all the hard work sits firmly with Mike

Firedog
Super User
Super User
July 25, 2026

For anyone who wants a (mostly Python) local web-app version of ​@MikeWilliams project …
 

Thanks for doing this. I’d love to have a go.

For those of us whose programming experience never got beyond Basic, is there any chance of a guide for dummies? What to download, where to put it and how to get started?

Dummies are those for whom Murphy’s Law was invented 🙂

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
July 25, 2026

For anyone who wants a (mostly Python) local web-app version of ​@MikeWilliams project I have ported here:

https://github.com/nigelainscoe/My-Ovo-Data-Web

 

Obviously, this is just a port, the kudos for all the hard work sits firmly with Mike

Glad to hear that people are benefiting from my efforts.

This is why I made it open source.