The price file

Every number on this site is read out of one public JSON file. It is not an API we built for you — it is the file the board itself fetches, and you are welcome to fetch the same one.

https://energypriceboard.com/result.json

No key. No signup. No quota. It is a static file served with an open Access-Control-Allow-Origin, so a browser can read it straight from your own page. There is no /api/ path and no versioned endpoint hiding behind this one — this URL is all there is.

How often it changes

A scan runs every 15 minutes and rewrites the file. A platform whose scrape fails keeps its previous number and gets an age_min in minutes; past three hours it is also flagged stale and drops out of the rankings. Polling faster than the scan gains you nothing.

What is in it

FieldWhat it holds
generated_atISO-8601 UTC timestamp of the scan that wrote the file.
countHow many platforms are in platforms.
platformsThe array below — one object per platform.
statslive / stale / no_data counts for this scan.
metaThe volumes and terms the board uses, and the ratios that fill gaps.
filledHow many price cells in this scan are estimates rather than quotes.
errorsScrapers that failed outright, empty when they all ran.

Each entry in platforms:

FieldWhat it holds
platform_idOur slug, stable and lower-case — netts, tr_energy. Key on this.
platform_nameHow the platform spells itself.
urlThe platform's own page, no referral code attached.
referral_urlOur paid link, or an empty string. See has_referral.
has_referraltrue when that platform pays us for a click. It changes nothing about the price or the order.
<volume>_<term>_pricePrice in TRX as a number, or the string "N/A". Volumes are 65k and 130k; terms are 15m, 1h, 1d, 3d, 10d. Ten keys per platform.
estimated_keysWhich of those ten we worked out from the platform's other rates instead of reading a quote. The board marks them .
price_noteA sentence from the scraper when the quote needs explaining — a minimum order, a members-only rate, a deposit. Empty for most.
minimum_order_energy, maximum_order_energyOrder limits in energy units, or "N/A".
tsWhen this platform in particular was last read.
age_minMinutes since that read.
staletrue once that read is older than three hours.
has_pricesfalse when the scan produced no number at all for this platform.

Two history files sit alongside it and carry the same platform ids: history_7d.json at 15-minute resolution and history_30d.json hourly. Both are keyed services_data[<platform_id>][<price_key>] as arrays of [epoch_ms, price_or_null], with market medians under aggregates.

Reading it

curl -s https://energypriceboard.com/result.json \
  | jq '[.platforms[] | select(.["65k_1h_price"] | type == "number")]
        | sort_by(.["65k_1h_price"])[0]
        | {platform_name, price: .["65k_1h_price"]}'
const r = await fetch('https://energypriceboard.com/result.json');
const { platforms } = await r.json();
const live = platforms.filter(p => typeof p['65k_1h_price'] === 'number' && !p.stale);
console.log(live.sort((a, b) => a['65k_1h_price'] - b['65k_1h_price'])[0]);

Two things worth guarding for: a price can be the string "N/A" rather than a number, and a platform can be stale while still carrying its last known price. Check the type, and check the flag.

What we do not promise

This file is not versioned and we will not pretend otherwise. When the board needs a new field it appears; if a field stops earning its place it goes; if we change how a price is derived, the number changes with it. Nothing here is a contract, and there is no deprecation window — the board is the only consumer we design for. If that matters to your build, pin a copy on your own side.

Using the data

The prices are facts read from public pages, and we claim nothing over a fact. The compilation — the ids, the normalised terms, the estimates and the history — is ours, and the Terms of Service ask one thing in return: if you publish it anywhere, put a visible link back to energypriceboard.com. That is the whole licence.

We have no rate limit of our own, but be reasonable: it is a static file behind a CDN and it only changes four times an hour. If something breaks or a field confuses you, write to fivex56@gmail.com — we would rather know.

Related: which platforms run an API of their own · building a bot against them · the board.