Data Freshness & Revisions
Understanding how Snowtrail handles data updates and revisions.
Update Schedules
| Product | Update Frequency | Trigger | Typical Time (UTC) |
|---|---|---|---|
| GBSI-US | Weekly (daily run restates the last 180 days) | Thursday EIA storage release | 14:30 |
| GBSI-EU | Daily | GIE AGSI daily publication | 17:00 |
| GLMI | Monthly (fundamentals) / Daily (price) | IEA trade flow data / daily price feeds | 08:00 |
| PEMI | Daily | ENTSO-E unavailability and Nord Pool UMM | 07:00 |
| WRSI | 4x daily | NOAA model runs (00Z, 06Z, 12Z, 18Z) | 05:00, 11:00, 17:00, 23:00 |
| WSSI-US | About twice daily | NOAA model runs (00Z, 06Z, 12Z, 18Z); each publication includes every run that arrived since the last | about 03:40 and 15:40 |
Revisions
When a source restates a value we have already published, our next scheduled run
picks it up and the affected rows are recomputed. The derived layers are
bitemporal: the recomputed row is appended as a new version rather than
overwriting the old one, and each version carries its own str_observed_at.
This means:
- A plain query returns the current best value, so restatements flow through automatically
as_ofreturns the value you would have acted on, not today's restated figure. If a series was published at 100 and later restated to 105, anas_ofpreceding the restatement returns 100- Only genuine changes are stored. A recomputation that reproduces the same value adds no version, so the history records revisions rather than pipeline runs
Some products restate recent rows routinely. GBSI-US for example recomputes the last 180 days on every run, so a week is first published as a provisional row and restated when late supply (about four months) or power-burn data (about 60-90 days) arrives. GLMI re-levels JKM-TTF spread rows up to 215 days back when the IMF monthly anchor arrives or is revised. Events retracted by a revision are marked SUPERSEDED, not deleted.
Two limits are worth knowing. Reconstruction reaches back only to each
product's effective start (Q1 2026).
And as_of reconstructs data, not models: it returns what the current model
computes from the data knowable at the time, and does not resurrect a past model
version. See Point-in-Time Integrity.
from snowtrail import Snowtrail
client = Snowtrail(api_key="your-api-key")
# Point-in-time query: returns only data that had become knowable by the as_of date
df = client.gbsi_eu.system_stress(
date_from="2026-07-01",
date_to="2026-09-30",
as_of="2026-09-28"
)