Every figure here, as JSON.
No key, no sign up, no rate limit beyond being reasonable. Twelve addresses covering every price on this site, the nightly energy tariff sweep, the change log and the trade tracker. JSON by default, CSV on request.
Not sure, or want to check your own numbers? Just ask.
Ask about any bill, or put your postcode in. Free, nothing to fill in, and nothing you type leaves your browser.
Your postcode and your figures never leave this browser. If I cannot work out what you mean, those words are sent to be classified, and a bill photo goes only if you send one and confirm it. Nothing is stored either way. How that works.
What there is
Base address https://tarifftracker.io/api/v1. Everything is a GET. Nothing needs a header.
- /api/v1
The catalogue. Every dataset, when each was last updated, and what it is for. Start here.
JSON only. This one is not a flat table.
- /api/v1/benchmarks
What a typical UK household pays for each of the ten bills, with the source and the date the figure was set.
CSV: add ?format=csv
- /api/v1/prices/{vertical}
Everything behind one bill: the headline, the supporting figures, every table, the help schemes, the sources and the caveats.
Filters: energy, water, broadband-and-mobile, council-tax, rent, rail-fares, nhs-charges, childcare, tv-licence, insurance. JSON only. This one is not a flat table.
- /api/v1/energy/tariffs
Every electricity and gas tariff we can verify, by region. Unit rate, standing charge, contract term, exit fee, and the cost of a year at typical use.
Filters: region, fuel, kind, supplier. CSV: add ?format=csv
- /api/v1/energy/cap
The Ofgem cap unit rate and standing charge for electricity in each of the fourteen regions. What a default tariff charges, which is what you pay when a fix ends.
CSV: add ?format=csv
- /api/v1/lookup
A postcode turned into the things that decide your bills: electricity region, the cap rates there, water company and its average bill.
Filters: postcode, required. JSON only. This one is not a flat table.
- /api/v1/changes
What has already changed and the day it took effect.
Filters: vertical, since. CSV: add ?format=csv
- /api/v1/upcoming
Dated changes that have not happened yet, flagged for whether the amount is published or only the date.
Filters: vertical. CSV: add ?format=csv
- /api/v1/trade/corridors
Twenty nine trade corridors. Duty into the United States and duty coming back, layer by layer with effective dates.
Filters: country. CSV: add ?format=csv
- /api/v1/trade/programmes
United States tariff programmes by legal authority, with rates, scope and who is varied out.
CSV: add ?format=csv
- /api/v1/trade/changes
The trade change log, including measures announced but not yet in force.
CSV: add ?format=csv
- /api/v1/broadband/deals
Broadband packages costed across the whole contract rather than on the advertised monthly price, with the April rises the provider has already published built in. Ranked on what a package actually costs.
CSV: add ?format=csv
- /api/v1/energy/cap-history
The Ofgem price cap for every region and every quarter since it began in January 2019, on all three payment methods. Ofgem publishes the current cap and not the history: this took a Freedom of Information request, and these are Ofgem's own figures under the Open Government Licence.
Filters: region, payment, since. CSV: add ?format=csv
- /api/v1/watch
Every source this site cites, when it was last read, and when the figures on it last moved. Including the changes nobody has reviewed yet, because a reference site quietly going stale is worse than one that says where it might be behind.
CSV: add ?format=csv
- /api/v1/vouchers
The claimable vouchers, discounts and free money a UK household forgets, each with the amount, who sets it and the official source. Shop voucher codes are a separate list that stays empty until a checked feed exists.
CSV: add ?format=csv
- /api/v1/prices/history
What every household charge has been over time, one row per dated change, with the primary source that set each figure. The TV Licence, NHS prescriptions and dental, regulated rail fares and the average water bill. Nobody else keeps this.
Filters: series. CSV: add ?format=csv
- /api/v1/fuel/prices
The official weekly pump price for petrol and diesel, thirteen weeks of trend, the tax inside a litre, the CMA's margin monitoring and the Fuel Finder scheme facts.
CSV: add ?format=csv
- /api/v1/ev-charging
Every large charging network's published prices from its own pricing page, read twice, one row per tier, with subscriptions, holds and overstay fees. Networks with per site pricing say so instead of showing an invented average.
Filters: network. CSV: add ?format=csv
- /api/v1/groceries
The ONS average price of 199 everyday grocery items, July 2026 against July 2025, with the reason no lawful per supermarket comparison exists carried in the body.
Filters: category, q. CSV: add ?format=csv
- /api/v1/council-tax/rates
Every billing authority's actual council tax, every band, all three banded nations in one table, each figure checked as an exact statutory ratio of its band D. Northern Ireland's rates poundages ride in the body. The spread the averages hide.
Filters: nation, authority. CSV: add ?format=csv
- /api/v1/rent/tribunal
The rent tribunal's most recent published decisions as data: current, proposed and determined rent, the regime, hardship, and a link to every decision. Since 1 May 2026 the determination cannot exceed the landlord's proposal, and these rows show it.
Filters: regime. CSV: add ?format=csv
- /api/v1/installer-checks
The registers that say whether a firm may do energy efficiency, heating or renewable work on a home, what each actually guarantees and what it does not, which register covers which job, and the number format each uses. We hold none of these registers and this does not pretend to.
Filters: work. CSV: add ?format=csv
- /api/v1/home-upgrades
Every UK grant and loan for insulation, heating and home upgrades, with its eligibility as testable conditions rather than prose, so software can answer whether a household qualifies and say which condition rules them out. All four nations, closed schemes included.
Filters: nation, status. CSV: add ?format=csv
- /api/v1/energy/heat-networks
How heat networks are regulated and what a customer on one is actually protected by. About 477,000 UK households buy heat from a monopoly they cannot leave, the price cap does not reach them, and Ofgem has only regulated it since 27 January 2026. Each protection carries its status and its date.
Filters: status. CSV: add ?format=csv
- /api/v1/water/charges
What every UK water company actually charges: the rate per cubic metre, the standing charge, the rate per pound of rateable value and the assessed charges, read from each company's own charges scheme. No regulator collects these, because households cannot switch and so nobody has had a commercial reason to.
Filters: company, services. CSV: add ?format=csv
- /api/v1/support
Every grant, discount and protection for household bills. The eligibility conditions come as data rather than prose, alongside which of the four nations it covers, the deadline, what could not be verified, and where to apply.
Filters: nation, situation, group. CSV: add ?format=csv
- /api/v1/dictionary
Every field in every dataset: its type, its unit, what it measures, and what a blank in it actually means. A null can be not published, does not apply, or not collected, and this tells them apart.
Filters: dataset. CSV: add ?format=csv
- /api/v1/sources
Every source the site stands on, named and linked, so you can check any figure yourself.
CSV: add ?format=csv
What comes back, and why
Every response has the same envelope. The figures are in rows or data. Everything above them exists so you can decide whether to trust them.
generated is when you called. as_of is when the figures were last checked against their source. A price with no date on it is worse than no price, so both travel with every answer.
Every dataset names the bodies it came from and links them. If you are republishing a figure, this is the thing to carry through with it.
This site does not publish a figure without saying where it could be wrong. The caveats are part of the response for the same reason. Dropping them republishes the number without the warning.
The licence, in plain words
The compilation, the wording, the tables and the figures we worked out ourselves. Use them commercially, change them, build on them. Credit Tariff Tracker and keep the source links intact.
The underlying figures belong to the bodies named in each row. Most are Crown copyright under the Open Government Licence v3, which is generous. Supplier tariff rates belong to the suppliers who publish them.
Citizens Advice supplier satisfaction scores appear on the site under their terms. Handing them out in bulk is a different thing and we have not asked permission, so they are stripped from every API response.
Every field, and what a blank in it means
302 fields across 25 datasets. 102 of them can come back blank, and a blank is not one thing.
It can mean the figure has not been published, that it does not apply to that row, or that we have not been to
collect it. Those are three different facts and a bare null makes them look like one, so each field says which
it is. The same descriptions are served at /api/v1/dictionary, read from the same file, so this
page cannot drift from the data it describes.
The envelope, which every answer has8 fields
| Field | Type | What it is |
|---|---|---|
dataset | string | Which dataset this is, in dotted form, matching the catalogue at /api/v1. |
generated | string, ISO 8601 | The moment you asked. Not the age of the figures. |
as_of | string, ISO 8601 or date | When the figures in this response were last checked against their source. This is the one that matters. |
sources | array | The bodies these figures came from, named and linked. If you republish a figure, republish this with it. |
caveats | array of strings | Where these figures could be wrong or be misread. Part of the data, not decoration. |
licence | object | What you may do with the compilation, and who owns the underlying figures. |
count | number | How many rows follow. Present only on datasets that are tables. |
rows | array | The figures, one object per row. Datasets that are not tables use data instead. |
benchmarks15 fields, 3 of which can be blank
What a typical household pays for each of the ten bills.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
vertical | string | The slug for this bill, which is also its address on the site and in the API. | never blank |
name | string | The bill in words. | never blank |
value | number, GBP | The typical figure as a number, ready to compute with. | Blank means: No primary source publishes a single typical household figure for this bill. Rail fares and NHS charges are both like this. The label says what the display figure actually measures, and inventing a household number for them would be making it up. |
currency | string | Always GBP. Present so nobody has to assume. | never blank |
period | string | What the value covers, such as a year or a month. | Blank means: There is no value to attach a period to. |
display | string | The figure exactly as the site prints it, symbols and all. Use value for arithmetic and this for showing people. | never blank |
unit | string | The suffix the site prints after the figure, such as /yr. | Blank means: The site prints no suffix after this figure, because it is not an amount of money over a period. Rail fares are a percentage and childcare is a count of hours. |
label | string | What the figure actually is, including the period it applies to. Read this before quoting the number. | never blank |
detail | string | The assumptions behind it, such as payment method or consumption. | never blank |
direction | string | up, down or flat against the period before. | never blank |
change | string | How much it moved and over what, as published. | never blank |
source | string | The body that set the figure. | never blank |
as_of | string, date | The date this figure took effect or was published. | never blank |
page | string | The page a person should read. | never blank |
detail_api | string | Everything behind this one figure, including its own sources and caveats. | never blank |
energy.tariffs18 fields, 7 of which can be blank
Every electricity, gas and dual fuel tariff we can verify, by region, refreshed nightly from each supplier's own price endpoint.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
supplier | string | The supplier's trading name. | never blank |
tariff | string | The supplier's own name for the tariff, copied rather than tidied, so it matches what is printed on a bill. | never blank |
product_code | string | The supplier's product code. Use this to join rows across fuels and regions rather than matching on the tariff name. | never blank |
region | string | One of the fourteen Great Britain electricity distribution regions. Price varies by region and this is why. | never blank |
fuel | string | electricity, gas, or dual where the same product code sells both in the same region. | never blank |
kind | string | fixed or variable. | never blank |
payment | string | Always direct debit. Standard credit costs about five and a half per cent more, and mixing the two makes one supplier look cheaper than it is, so only one basis is published. | never blank |
unit_p_kwh | number, pence per kWh | The unit rate, including VAT. On a dual fuel row this is the electricity leg only, and the gas leg is in gas_unit_p_kwh. | never blank |
standing_p_day | number, pence per day | The standing charge, including VAT. On a dual fuel row this is both fuels added together, because that is what the household actually pays each day. | never blank |
gas_unit_p_kwh | number, pence per kWh | The gas unit rate on a dual fuel row. | Blank means: Not a dual fuel row. A gas row carries its unit rate in unit_p_kwh like any other. |
gas_standing_p_day | number, pence per day | The gas standing charge on a dual fuel row, already included in standing_p_day. | Blank means: Not a dual fuel row. |
credit_unit_p_kwh | number, pence per kWh | The same tariff's unit rate for someone paying on receipt of the bill rather than by direct debit. | Blank means: Either the supplier publishes no standard credit rate for this product in this region, or the row is a dual fuel row, where we do not compute a combined credit figure. |
term_months | number, months | How long the contract runs. | Blank means: No contract length was published for this product. On a variable tariff that is expected, because there is no fixed term to publish. On a fixed tariff it means the supplier did not publish one, and your own contract is the thing to check. |
exit_fee_gbp | number, GBP | What the supplier charges to leave early, per fuel. Zero means they publish it as free to leave. Leaving a dual fuel contract early usually means paying this twice, once for each fuel. | Blank means: Not collected for this product. Contract terms are read once per product from the supplier's electricity product detail, which is the only endpoint that carries them, so a product we hold gas prices for but no electricity detail has none. |
exit_fee_type | string | How the supplier structures the fee. FLAT is a single amount. NONE is no fee, and pairs with an exit_fee_gbp of zero. | Blank means: Not collected, for the same reason as exit_fee_gbp. |
annual_est_gbp | number, GBP | What a full year costs at Ofgem's typical consumption: standing charge times 365 plus the unit rate times the typical kWh. This is what the rankings sort on, because a low unit rate with a high standing charge is not a cheap tariff and sorting on the unit rate alone hides that. | never blank |
closes | string, date | The last day the supplier will sign anyone new onto this tariff. | Blank means: The supplier has set no closing date, so it is open. |
source | string | Which supplier endpoint the row was read from. | never blank |
energy.cap3 fields, 0 of which can be blank
The Ofgem price cap for electricity, by region. This is what a default tariff charges, which is what you pay once a fix ends and nothing is done.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
region | string | One of the fourteen Great Britain electricity distribution regions. | never blank |
electricity_standing_p_day | number, pence per day | The capped standing charge in that region, including VAT. | never blank |
electricity_unit_p_kwh | number, pence per kWh | The capped unit rate in that region, including VAT. | never blank |
changes11 fields, 2 of which can be blank
What has already changed, and the day it started costing anyone anything.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | A stable identifier. It is also the permalink other people cite, so it does not change once published. | never blank |
announced | string, date | The day it was published. | never blank |
effective | string, date | The day it starts to cost anyone anything. Often months after it was announced, and this is the date that matters. | never blank |
vertical | string | Which bill it affects. | never blank |
severity | string | increase, decrease or neutral, from the household's point of view rather than the industry's. | never blank |
actor | string | Who made the change: a regulator, a government department, or a company. | never blank |
title | string | What happened, in one line. | never blank |
summary | string | What happened, with the figures. | never blank |
note | string | Why it matters beyond the figure. | Blank means: There is nothing to add beyond the summary. |
source | string | A link to the primary source. | Blank means: No single URL covers it. These should be rare and are worth reporting. |
source_name | string | The body that published it. | never blank |
upcoming7 fields, 0 of which can be blank
Dated changes that have not happened yet.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
date | string, date | When it takes effect. | never blank |
vertical | string | Which bill it affects. | never blank |
what | string | What is changing. | never blank |
kind | string | price_change where a bill is going up or down, or deadline where it is a date you have to act by, such as a qualifying week. Missing a deadline costs the same as a rise, but it is something you can do something about. | never blank |
status | string | confirmed means the date and the amount are both published. date_only means the date is set but the amount has not been announced, so anybody quoting a figure for it is guessing. expected means it is a date we know is coming, such as a statutory review window, where neither the date nor the amount has been formally confirmed. | never blank |
amount_published | boolean | Whether the figure is published as well as the date. Kept alongside status so anything already built on it keeps working. | never blank |
source | string | Who announced it. | never blank |
lookup11 fields, 7 of which can be blank
A postcode area turned into the things that decide the bills at that address.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
postcode_area | string | The letters at the start, which is all the mapping needs. | never blank |
outcode | string | The first half of the postcode, with the inward code stripped. | never blank |
electricity_region | string | The distribution region, which sets the cap rates and the tariffs available. | Blank means: We hold no region for this area. If it is a real postcode area, that is a gap worth reporting. |
region_straddles | array | Both regions, where a postcode area sits across a boundary. Grid supply point boundaries do not follow postcodes, and where they disagree we name both rather than pick one. | Blank means: This area sits in one region. |
cap_electricity_standing_p_day | number, pence per day | The capped standing charge for that region. | Blank means: No region, so no rates. |
cap_electricity_unit_p_kwh | number, pence per kWh | The capped unit rate for that region. | Blank means: No region, so no rates. |
water_company | string | The water and sewerage company for the area. You cannot switch it. | Blank means: Scotland, where supply is Scottish Water and is not in the England and Wales table, or an area we hold no company for. |
water_company_split | array | Both companies, where an area is served by two. Water boundaries follow river catchments rather than postcodes, so this is approximate by nature. | Blank means: One company serves this area. |
water_average_bill_gbp | number, GBP | That company's average household bill for the year. | Blank means: No company, so no bill. Scottish charges are set differently and are not in this table. |
scotland | boolean | Whether the area is in Scotland, where water and some other charges work differently. | never blank |
council_tax_band_ratios | object | The statutory ratio of each band to band D. Multiply your council's band D charge by your band's ratio. The ratios are fixed in law; the band D charge is set by the council. | never blank |
trade.corridors13 fields, 0 of which can be blank
Duty in both directions for twenty nine trade corridors, layer by layer with effective dates.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
slug | string | The country's address on the site. | never blank |
name | string | The country. | never blank |
code | string | The two letter country code. | never blank |
region | string | Which part of the world. | never blank |
inbound_headline_pct | number, per cent | The highest duty layer charged on goods entering the United States from this country. It is a ceiling, not an average, and most trade moves at a lower rate. | never blank |
inbound_label | string | How that headline should be read in words, such as up to fifty per cent. | never blank |
inbound_layers | array | Each measure separately: its legal authority, its rate, what it covers and when it started. | never blank |
outbound_headline_pct | number, per cent | The highest duty that country charges on goods from the United States. | never blank |
outbound_label | string | The same in words. | never blank |
outbound_layers | array | Each retaliatory or ordinary measure separately. | never blank |
summary | string | What is actually going on in this corridor. | never blank |
notes | array of strings | Detail that does not fit a rate: support packages, carve outs, disputes. | never blank |
page | string | The page for this corridor. | never blank |
trade.programmes10 fields, 6 of which can be blank
United States tariff programmes by legal authority.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
authority | string | The statutory section the programme runs under. | never blank |
authority_name | string | That section in words. | Blank means: The authority code is not one of the ones we hold a definition for. |
legal_basis | string | The Act it comes from. | Blank means: Same as above. |
grounds | string | The legal ground claimed, such as national security. | Blank means: Same as above. |
title | string | What the programme covers. | never blank |
rate | string | The general rate. Variations name who pays something else. | never blank |
status | string | The legal state of the programme: in force, active, phasing, expired or struck down. This vocabulary is the United States government's, not ours. | Blank means: No status is recorded. |
in_force_from | string, date | When it started. | Blank means: No start date is recorded. |
note | string | What the rate does not tell you. | Blank means: There is nothing to add. |
variations | array | Who is charged something other than the general rate, and why. | never blank |
trade.changes10 fields, 5 of which can be blank
The trade change log, including measures announced but not yet in force.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | A stable identifier. | Blank means: The row is a scheduled measure rather than a logged change, and has no permalink yet. |
announced | string, date | When it was announced. | Blank means: The row is scheduled: we hold the date it takes effect but not the day it was announced. |
effective | string, date | When it takes effect. Announced is not the same as in force, and neither is the same as collected. | never blank |
actor | string | Who imposed it. | never blank |
target | string | Who it is aimed at. | Blank means: It applies by product worldwide rather than at one country. |
direction | string | Which way it runs, or scheduled where it has been announced but is not yet in force. | never blank |
authority | string | The legal authority used. | Blank means: None recorded. |
severity | string | increase, decrease or neutral. | Blank means: The row is scheduled and has not been assessed. |
title | string | What happened, in one line. | never blank |
summary | string | What happened, with the figures. | never blank |
sources3 fields, 1 of which can be blank
Every source the site stands on.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
dataset | string | Which dataset relies on it. | never blank |
name | string | The publication, named as its publisher names it. | never blank |
url | string | Where to check it yourself. | Blank means: The source has no stable public URL. Rare, and worth telling us about. |
support24 fields, 6 of which can be blank
Every grant, discount and protection for household bills, with the eligibility conditions as data.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | A stable identifier, also the anchor for this scheme on the help page. | never blank |
name | string | What the scheme is called by the body that runs it. | never blank |
group | string | Which bill or theme it sits under: gateway, energy, water, counciltax, broadband, nhs, childcare, tvlicence, travel or debt. | never blank |
amount | string | What you get, in the form the scheme itself states it. Some are a fixed sum, some are a cap or a percentage, and some are protection rather than money. | never blank |
amount_note | string | What that amount actually means, including whether it is paid to you or credited to an account. | never blank |
administered_by | string | Who decides and who pays. This matters because it tells you who to argue with. | never blank |
status | string | open, closed, seasonal or proposed. A closed scheme is one nobody can apply to right now. | never blank |
status_note | string | The status in words, including when a closed scheme reopens. | never blank |
england | string | yes, different, no or unknown. different means the scheme exists there but under other rules. | Blank means: Never blank. Where we do not know, the value is the string unknown rather than a null. |
wales | string | Whether it applies in Wales, on the same four values. | never blank |
scotland | string | Whether it applies in Scotland, on the same four values. | never blank |
northern_ireland | string | Whether it applies in Northern Ireland, on the same four values. | never blank |
nations_note | string | What the differences between the nations actually are. | Blank means: The scheme works the same way everywhere it applies. |
eligibility | array of strings | The conditions, written so somebody can read them and know whether they qualify. This is the substance of the record, not a summary of it. | never blank |
how_to_claim | string | What you actually do, including where a scheme is automatic and there is nothing to do. | never blank |
apply_at | string | The official page to apply or find out more. | Blank means: No single official page covers it. |
deadline | string, date | A qualifying date or window that decides whether you get anything. | Blank means: The scheme is open all year with no dated cut off. |
deadline_what | string | What that date actually decides. | Blank means: There is no deadline. |
worth_knowing | array of strings | The things that catch people out: what a scheme does not cover, why people are refused, and how much goes unclaimed. | never blank |
changing | string | A rule that is confirmed but not yet in force, with what changes and when. | Blank means: Nothing announced is due to change. |
unverified | array of strings | What could not be checked against a primary source, and is therefore deliberately absent from this record. An empty array means everything here was verified. | never blank |
situations | array of strings | Who it is for, from a fixed list: benefits, pension, disability, children, carer, lowincome, arrears, prepay, renting, student. | never blank |
sources | array | The government, regulator or scheme operator pages each fact was checked against. | never blank |
page | string | The section of the help page covering this scheme. | never blank |
watch10 fields, 4 of which can be blank
Every source this site cites, when it was last read, and when the figures on it last moved.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | A stable identifier for the watched source. | never blank |
name | string | The page in words. | never blank |
url | string | The exact address being watched. | Blank means: The source has not been read yet, so nothing is stored about it. |
feeds | string | Which parts of the site depend on this source. | never blank |
note | string | Why this source is watched the way it is, where that needs explaining. Some pages render their figures with JavaScript, some keep them in a PDF, and one refuses automated requests entirely. Saying which is better than a number that looks fine and means nothing. | Blank means: The page states its figures in plain HTML and there is nothing to explain. |
last_checked | string, ISO 8601 | When we last read the page. | Blank means: Never read. A source added since the last morning run looks like this until it comes round. |
last_changed | string, ISO 8601 | When a figure on the page last moved. | Blank means: Nothing has moved since we started watching, which for a recently added source means we have only one reading to compare against. |
figures_tracked | number | How many distinct money amounts, percentages, pence rates and dates were found on the page. A sudden drop to zero usually means the page stopped loading rather than that the figures went. | never blank |
status | string | ok, or the reason the page could not be read. Some government sites refuse automated requests and that is recorded rather than treated as no change. | never blank |
health | string | Whether this source is actually being watched. A page we can read but which carries no figures is worse than one we cannot read, because it looks fine and can never fire. That usually means the page renders its numbers with JavaScript, which a plain fetch does not run. | never blank |
energy.cap_history10 fields, 6 of which can be blank
The Ofgem price cap by region and quarter, all the way back to the first cap period in January 2019.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
region | string | One of the fourteen Great Britain distribution regions, or Great Britain average. Ofgem's own internal names are mapped to the ones used everywhere else on this site. | never blank |
payment | string | direct debit, standard credit or prepayment. The three are meaningfully different and mixing them makes one look cheaper than it is. | never blank |
period_start | string, date | The first day the capped rates applied. | never blank |
period_end | string, date | The last day they applied. Early cap periods were six months long; they became quarterly in 2022. | never blank |
electricity_standing_p_day | number, pence per day | The capped electricity standing charge, single rate meter, including VAT. | Blank means: Ofgem's file has no figure in that cell for that region, period and payment method. |
electricity_unit_p_kwh | number, pence per kWh | The capped electricity unit rate, single rate meter, including VAT. | Blank means: No figure published for that combination. |
gas_standing_p_day | number, pence per day | The capped gas standing charge, including VAT. | Blank means: No figure published for that combination. |
gas_unit_p_kwh | number, pence per kWh | The capped gas unit rate, including VAT. | Blank means: No figure published for that combination. |
economy7_standing_p_day | number, pence per day | The capped standing charge for a multi rate or Economy 7 meter. | Blank means: No figure published for that combination. |
economy7_unit_p_kwh | number, pence per kWh | The capped unit rate for a multi rate or Economy 7 meter. This is a single blended figure, not the separate day and night rates. | Blank means: No figure published for that combination. |
broadband.deals10 fields, 2 of which can be blank
Broadband packages costed across the whole contract rather than on the advertised monthly price.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
provider | string | The provider. | never blank |
package | string | The package name as advertised. | never blank |
speed | string | The advertised average download speed. | never blank |
advertised_monthly_gbp | number, GBP | The price on the advert. The least useful number on the row, and the one every other site leads with. | never blank |
term_months | number, months | How long you are tied in. | never blank |
annual_rise_gbp | number, GBP | The April rise the provider has already published, in pounds. Since January 2025 Ofcom requires new contracts to state rises in pounds and pence up front rather than as an inflation formula. Zero means the provider has published no rise. | Blank means: The provider has not published a rise figure we could verify. |
final_monthly_gbp | number, GBP | What you are paying in the last month of the contract, after every scheduled rise. | never blank |
contract_total_gbp | number, GBP | Everything you pay across the whole term, rises included. Setup and activation fees are not in it. | never blank |
true_monthly_average_gbp | number, GBP | The contract total divided by its length. This is what the ranking sorts on, because it is what the package actually costs a month. | never blank |
note | string | Anything about this deal worth knowing before signing. | Blank means: There is nothing to add. |
water.charges27 fields, 16 of which can be blank
What every UK water company charges households, read from each company's own charges scheme. No regulator collects these, because households cannot switch water company and so nobody has ever had a commercial reason to.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | The slug for this company or charging region. Companies that charge differently in different parts of their own area get one row per area. | never blank |
company | string | The company as it names itself. | never blank |
region | string | The charging area inside that company, where it has more than one. | Blank means: This company charges one set of rates across its whole area. |
services | string | Either water and sewerage, or water only. | never blank |
sewerage_billed_by | string | For a water only company, who bills the sewerage on top. | Blank means: This company does your sewerage itself. |
year | string | The charging year these rates are in force for, running from 1 April. | never blank |
water_p_m3 | number, GBP per cubic metre | What a cubic metre of water costs. Some schemes print this in pence and it is converted here, which is recorded in that company's notes. | Blank means: The company's scheme could not be read, so nothing is published rather than estimated. |
water_standing_yr | number, GBP per year | The fixed water charge for a year, whatever you use. | Blank means: Not published as a separate figure by this company. |
water_standing_note | string | Which meter sizes that standing charge covers, and what the larger sizes cost. | Blank means: The scheme prints one standing charge and does not break it down by meter size. |
sewerage_p_m3 | number, GBP per cubic metre | What a cubic metre of sewerage costs, on the ordinary tariff for a property that drains surface water to the sewer. | Blank means: Either this is a water only company, in which case sewerage_billed_by names who charges you, or the company recovers sewerage entirely through fixed charges. |
sewerage_standing_yr | number, GBP per year | The fixed sewerage charge for a year. | Blank means: Either this is a water only company, or the company does not levy one. |
sewerage_p_m3_no_surface_water | number, GBP per cubic metre | The alternative rate for a property that drains no surface water to the public sewer, where the company publishes one. | Blank means: This company does not vary its volumetric rate by surface water drainage. Several vary the standing charge instead, and some bill surface water as a separate line. |
sewerage_standing_yr_no_surface_water | number, GBP per year | The alternative sewerage standing charge where the property drains no surface water to the sewer. | Blank means: This company does not publish a reduced standing charge for that case. |
surface_water_yr | number, GBP per year | Surface water drainage, where the company bills it as a separate annual line. | Blank means: This company does not bill surface water separately. It is inside the sewerage standing charge or the volumetric rate, which the company's notes explain. |
highway_drainage_yr | number, GBP per year | Highway drainage, where the company bills it as a separate annual line. | Blank means: Not billed as an annual figure here. Some companies fold it into the sewerage charge and at least one charges it by the cubic metre instead. |
unmetered_rv_water | number, GBP per GBP of rateable value | The water charge per pound of the property's 1973 rateable value, for a household with no meter. | Blank means: Either the company sets this by charging area rather than publishing one figure, in which case its notes give the range, or it charges a flat fee instead of a rateable value rate. |
unmetered_rv_sewerage | number, GBP per GBP of rateable value | The sewerage charge per pound of rateable value. | Blank means: This is a water only company, or the company charges sewerage another way. |
unmetered_fixed_water_yr | number, GBP per year | The fixed water charge an unmetered household pays on top of the rateable value amount. | Blank means: The scheme says there is none. That is an absence stated by the company, not a gap in our reading, and at least one company says so in terms. |
unmetered_fixed_sewerage_yr | number, GBP per year | The fixed sewerage charge for an unmetered household. | Blank means: This is a water only company, or the company puts it inside the water standing charge. |
unmetered_minimum_yr | number, GBP per year | The least an unmetered household can be charged for its water, whatever the rateable value works out at. It floors the water element only, not the whole bill: every scheme that publishes one says so in terms, and applying it to the total would overcharge anybody whose sewerage already carries them past it. | Blank means: This company does not publish a minimum. |
assessed | array | The assessed charges, for a household that cannot have a meter fitted. Each entry is the company's own label with the water and sewerage amounts. Companies label these completely differently, some by occupants, some by bedrooms, some by property type, so the labels are kept exactly as printed rather than forced into a common shape. | never blank |
readings | number, count | How many separate readings of the source document returned this company's figures identically. Two is the floor for publishing anything. | never blank |
unverified | array | What two readings disagreed on, or what the scheme leaves genuinely unclear. Those figures are absent above rather than guessed. This field is the point of the dataset. | never blank |
notes | array | How this company's scheme is built, and the things that are easy to read wrongly. | never blank |
source | string | The charges scheme these figures were read from. | never blank |
source_title | string | What that document calls itself. | never blank |
page | string | The page on the site that shows this, with the arithmetic. | never blank |
heat.networks6 fields, 1 of which can be blank
What a heat network customer is protected by, and when each rule started. A row is a protection rather than a network, because the useful question is not who supplies you, which you cannot change, but what rule you can hold them to.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
protection | string | The rule, in short. | never blank |
detail | string | What it actually requires of your supplier, in enough detail to hold them to it. | never blank |
status | string | One of in force, coming confirmed, coming not firmly dated, coming not dated, or not proposed with a date. | never blank |
in_force | boolean | True where the rule applies today. A convenience so nothing has to parse the status string. | never blank |
from | string, ISO date | The date it started, or starts. | Blank means: Genuinely undated. Two of the things still to come have no commencement date published anywhere, and naming that is better than picking a year. |
page | string | The page on the site that sets this out with its sources. | never blank |
home.upgrades21 fields, 7 of which can be blank
Every UK grant and loan for insulation, heating and home upgrades, with eligibility as conditions a program can evaluate rather than prose to read.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | The slug for this scheme. | never blank |
scheme | string | What the operator calls it. | never blank |
nations | array | Which of the four nations it covers. This is the biggest single filter, and Northern Ireland is outside every Great Britain scheme. | never blank |
status | string | open, closed, not open yet, or landlord only. | never blank |
open | boolean | True where a household can apply today. A convenience so nothing has to parse the status string. | never blank |
in_short | string | One plain line on whether it is open and what that means in practice. | never blank |
opens | string, ISO date | When a scheme that is not open yet is due to start. | Blank means: Either it is already open or closed, or no start date has been published. Two of these are announced with no date at all. |
closes | string, ISO date | The last date it runs, or the date it closed. | Blank means: No closing date is published. The Boiler Upgrade Scheme is like this: it is funded to 2030 but no primary source gives a final day. |
what_it_pays_for | string | The measures funded, and any cap, as the operator publishes them. | never blank |
amounts | array | Named grant amounts where the scheme publishes them, each with a note on what it applies to. | Blank means: This scheme does not publish fixed amounts. Most of them do not: what you get is whatever the survey says the home needs. |
who_runs_it | string | Who sets it, who polices it and who delivers it, which are often three different bodies. | never blank |
who_applies | string | Whether the household, the installer, the landlord or the council applies. Getting this wrong is the commonest reason people never get anywhere. | never blank |
how_to_apply | string | The actual first step, with the number to ring where there is one. | never blank |
apply_url | string | Where to start. | Blank means: There is nothing to apply for, because the scheme is closed or not open yet. |
phone | string | A free number for the scheme or its advice service. | Blank means: No phone route published for this one. |
conditions | array | The eligibility as testable rules. Each names a key from questions, the answers that pass, a label saying what is being tested, and fail, the sentence to show a household when this is the condition ruling them out. A key of _any_of holds sub conditions of which any one is enough. | never blank |
qualifying_benefits | array | The benefits that open this scheme, verbatim. The lists differ between schemes and the differences matter: Child Benefit counts for ECO4 and not for the Warm Homes: Local Grant. | Blank means: This scheme does not use a benefits test. Three of them do not, which is worth knowing. |
also_true | array | Conditions that are real but that a checker cannot test, such as a council having published a statement of intent. | Blank means: Nothing beyond the testable conditions. |
unverified | array | What could not be stood up from the operator's own pages, including caps published two different ways and schemes with no closing date. | never blank |
sources | array | The operator pages each rule was read from. | never blank |
page | string | The page on the site that runs these rules as a checker. | never blank |
installer.checks15 fields, 3 of which can be blank
The registers that say whether a firm may do energy efficiency, heating or renewable work on a home, and the gap between what each one guarantees and what its logo implies.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | The slug for this register. | never blank |
register | string | What it calls itself. | never blank |
kind | string | Whether it is the law, a grant gateway, a quality scheme, a sales code, or not accreditation at all. | never blank |
what | string | What the body actually is and does, including who does the vetting, which is often not the body whose name is on the badge. | never blank |
search_url | string | The public search page. | never blank |
searchable_from_a_link | boolean | True only for Companies House. Every other register builds its search in the browser and ignores anything in the address. | never blank |
how_to_search | string | What to type and what to look at once you are there. | never blank |
number_name | string | What the register calls its identifier. | Blank means: This body does not publish a public identifier format. |
number_shape | string | The format, where it is published. | Blank means: Not published. Two of these bodies publish no format, so a number matching nothing is not evidence on its own. |
number_note | string | The trap in that format, such as a number that is reissued annually. | Blank means: No trap worth recording. |
guaranteed | array | What registration actually does mean. | never blank |
does_not_guarantee | array | What it does not mean. The reason this dataset exists. | never blank |
how_people_get_caught | array | What the register operator itself warns about. | never blank |
sources | array | The operator pages this was read from. | never blank |
page | string | The page on the site that runs this as a tool. | never blank |
council.tax18 fields, 7 of which can be blank
The actual council tax for every band in every billing authority in England, Wales and Scotland, with Northern Ireland's domestic rates in the body.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
nation | string | england, wales or scotland. Northern Ireland has no bands, so its rates system is in the response body, not the rows. | never blank |
authority | string | The billing authority that sends the bill. | never blank |
ons_code | string | The ONS geography code for the authority. | Blank means: Only published for England in the source tables. |
region | string | The English region. | Blank means: Only meaningful for England. |
class | string | What kind of authority this is: London borough, metropolitan district, unitary, or shire district. | Blank means: Only meaningful for England. |
county | string | The county area the authority sits in. | Blank means: Only meaningful for England. |
band_a | number, £ a year | The area charge for a band A home, the whole stack of precepts. | never blank |
band_b | number, £ a year | The area charge for band B. | never blank |
band_c | number, £ a year | The area charge for band C. | never blank |
band_d | number, £ a year | The area charge for band D, the reference band every average is quoted in. | never blank |
band_e | number, £ a year | The area charge for band E. | never blank |
band_f | number, £ a year | The area charge for band F. | never blank |
band_g | number, £ a year | The area charge for band G. | never blank |
band_h | number, £ a year | The area charge for band H, twice band D everywhere but Scotland, where the 2017 multiplier made it 245 per cent. | never blank |
band_i | number, £ a year | The area charge for band I. | Blank means: Only Wales has a band I. Everywhere else this is empty by law, not by omission. |
own_element_band_d | number, £ a year | How much of the band D bill is the billing authority's own charge, including parish precepts averaged across its area. The rest is county, police, fire and, in London, the GLA. | Blank means: Only published for England. |
adult_social_care_element | number, £ a year | The part of the band D bill raised under the adult social care precept flexibility. | Blank means: Only published for England, and some authorities have never used the flexibility. |
page | string | The page on this site where these figures live, with the lookup. | never blank |
rent.tribunal16 fields, 5 of which can be blank
The rent tribunal's most recently published decisions, read in full, with the law that has applied since 1 May 2026.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
ref | string | The tribunal's own case reference. MNR references are challenges under the old section 13 route, MRA the new one. | never blank |
area | string | Where the property is, to outcode level. | never blank |
property | string | What was let, as the decision describes it. | never blank |
decided | date | The date of the decision. | never blank |
notice_date | date | The date on the landlord's rent increase notice, which decides which law applies. | Blank means: The decision does not state it. |
current | number, £ | The rent being paid when the case started, per the period in per. | never blank |
proposed | number, £ | What the landlord's notice asked for. | never blank |
determined | number, £ | What the tribunal set. | Blank means: The application was struck out, so no rent was determined. |
per | string | week or month, the period every money figure in the row is quoted in. | never blank |
effective | date | The date the determined rent runs from. | Blank means: Struck out, so there is nothing to take effect. |
regime | string | old for notices before 1 May 2026, new for the capped regime after it, or struck out. | never blank |
method | string | papers for a decision on the documents alone, hearing where anybody attended. | never blank |
hardship | string | Whether a hardship deferral was raised, and what the tribunal did with it. | Blank means: Hardship never came up in the decision. |
note | string | Anything unusual the decision turned on. | Blank means: Nothing beyond the figures. |
decision_url | string | The decision itself on the tribunal's own site. Every row has one. | never blank |
page | string | The page on this site where these figures live. | never blank |
fuel.prices4 fields, 0 of which can be blank
The official weekly average UK pump price, with the CMA's margin monitoring and the Fuel Finder scheme facts in the body.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
week_beginning | date | The Monday the weekly average describes. | never blank |
petrol_ppl | number, pence per litre | Average ultra low sulphur unleaded pump price across the UK that week. | never blank |
diesel_ppl | number, pence per litre | Average ultra low sulphur diesel pump price across the UK that week. | never blank |
page | string | The page on this site where these figures live. | never blank |
ev.charging13 fields, 8 of which can be blank
Each public charging network's published prices, one row per published tier, read twice from the operators' own pages.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
network | string | The charging network. | never blank |
tier | string | The operator's own label for this price: a speed, a time window, or a payment route. | never blank |
kw | string | The power range the operator states for the tier. | Blank means: The operator does not state a power figure for this price. |
p_per_kwh | number, pence per kWh | The published rate. | Blank means: The operator publishes no single figure for this tier: it prices per site or publishes only a range, and the varies field carries its exact wording. |
subscription_name | string | The operator's subscription, where one exists. | Blank means: The network has no subscription. |
subscription_monthly | number, £ a month | What the subscription costs. | Blank means: No subscription, or the operator does not publish the fee. Tesla publishes membership without a price. |
subscription_p_per_kwh | number, pence per kWh | The subscriber rate, where one flat figure is published. | Blank means: No subscription, or the subscriber saving is a percentage or a range rather than one figure. The note inside subscription_name's row text carries it. |
fees | string | Pre authorisation holds, overstay and connection fees as the page states them. | Blank means: The page lists none. |
varies | string | Exactly what the operator says about prices differing by site or time. | Blank means: The page contains no such statement. |
note | string | Anything else a reader needs, including the one stale figure we found and excluded. | Blank means: Nothing beyond the row. |
pricing_page | string | The operator's own pricing page, which is the source for the whole row. | never blank |
as_read | date | The day both independent readers read the page. | never blank |
page | string | The page on this site where these figures live. | never blank |
groceries7 fields, 1 of which can be blank
The ONS average price of 199 everyday grocery items, this July against last July, national averages only.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
item | string | The item, as the ONS names it. | never blank |
code | string | The ONS consumption segment code. | never blank |
category | string | The ONS grocery category. | never blank |
unit | string | The standard quantity the price describes, for example per 800g loaf or per dozen. | never blank |
price_p | number, pence | The national average price in July 2026. | never blank |
price_p_year_ago | number, pence | The national average price in July 2025. | Blank means: The item joined the ONS basket after July 2025, so no year ago figure exists. Six items are in this position and the page names them rather than inventing a comparison. |
page | string | The page on this site where these figures live. | never blank |
prices.history10 fields, 0 of which can be blank
What each household charge has been over time, one row per dated change, primary source per series.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
series | string | Which charge: tv_licence, prescription, dental_band1, dental_band3, rail_regulated or water_avg. | never blank |
name | string | The human name of the series. | never blank |
unit | string | What the value is measured in: pounds a year, pounds an item, or a percentage rise. | never blank |
effective | date | The date this figure took effect. | never blank |
value | number | The amount in force from that date, in the series unit. | never blank |
held | boolean | True where the figure was a freeze, unchanged from the year before. | never blank |
is_percent | boolean | True where the value is a percentage rise rather than a money amount, as for regulated rail fares. | never blank |
source | string | The body that set this figure. | never blank |
source_url | string | The primary source page. | never blank |
page | string | The page on this site where these figures live. | never blank |
vouchers10 fields, 5 of which can be blank
The claimable vouchers, discounts and free money a UK household forgets, drawn from the verified support data, plus a shop voucher code list that stays empty until a checked feed exists.
Scroll sideways to see every column
| Field | Type | What it is | What a blank means |
|---|---|---|---|
id | string | The scheme slug, which also anchors it on the help page. | never blank |
name | string | The name of the scheme. | never blank |
amount | string | The headline amount or discount, as a phrase because many are ranges or percentages. | never blank |
amount_note | string | What the amount is measured against. | Blank means: The amount stands on its own. |
group | string | Which part of the bills it belongs to: energy, childcare, counciltax, water, nhs, travel, debt and so on. | never blank |
who_sets_it | string | The body that sets or runs the scheme. | Blank means: Not stated. |
nations | object | Whether it applies in england, wales, scotland and ni: yes, different, or no. | Blank means: Not broken down by nation. |
how_to_claim | string | How to get it. | Blank means: Not stated in short form; see the help page. |
official_link | string | The official page for the scheme. | Blank means: No single official link; see the sources on the help page. |
page | string | The page on this site where these live. | never blank |
Practical notes
How fresh is any of this?
The energy tariff endpoints are refreshed nightly, straight from each supplier's own price endpoint, and the as_of field carries the exact moment. Everything else changes when the site rebuilds, which is whenever a regulator publishes something. The catalogue at /api/v1 reports the freshness of all three streams in one call, so you can check before you pull.
Are there limits?
No key and no quota. Every answer is identical for everyone and changes at most once a night, so responses sit in the edge cache for five minutes and a busy day costs us almost nothing. If you want the whole lot at once, take /data/uk.json and /data/tariffs.json rather than walking every address, and please do not poll faster than the data changes.
Why are some values null?
Because we do not know them. Rail fares and NHS charges have no single typical household figure that any primary source publishes, so value is null and the label says what the display figure actually measures. An upcoming change with amount_published: false has a date but no figure, because the amount has not been announced. Filling either of those in would mean inventing something, which is the one thing this site does not do.
Can I use this in a commercial product?
Yes, with attribution. The compilation is CC BY 4.0. Two cautions worth reading properly: the underlying figures carry their own source terms, and supplier tariff rates belong to the suppliers rather than to us. If your product turns on those rates being right, take them from the suppliers directly and use this to check yourself.
What this is not
It is not advice, it is not a quote, and it is not a switching service. The site publishes statistics only and arranges nothing. There is no insurance quoting anywhere on it or in this API, and there never will be, because arranging insurance without authorisation is a criminal offence rather than a growth opportunity.
Never be surprised by a bill again.
30 price changes are logged on this site and every one had a date you could have known in advance. Join the update list and we will email you when a tracked bill changes, when a genuinely useful deal or voucher code turns up, and when a new tool lands. Free, no account, one click to stop.