Skip to main content

Data Freshness & Revisions

Understanding how Snowtrail handles data updates and revisions.

Update Schedules​

ProductUpdate FrequencyTriggerTypical Time (UTC)
GBSI-USWeekly (daily run restates the last 180 days)Thursday EIA storage release14:30
GBSI-EUDailyGIE AGSI daily publication17:00
GLMIMonthly (fundamentals) / Daily (price)IEA trade flow data / daily price feeds08:00
PEMIDailyENTSO-E unavailability and Nord Pool UMM07:00
WRSI4x dailyNOAA model runs (00Z, 06Z, 12Z, 18Z)05:00, 11:00, 17:00, 23:00
WSSI-USAbout twice dailyNOAA model runs (00Z, 06Z, 12Z, 18Z); each publication includes every run that arrived since the lastabout 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:

  1. A plain query returns the current best value, so restatements flow through automatically
  2. as_of returns the value you would have acted on, not today's restated figure. If a series was published at 100 and later restated to 105, an as_of preceding the restatement returns 100
  3. 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"
)