Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Reference for understanding Spire Weather file names. See also the GRIB2 and NetCDF glossary entries for file format details.

Standard Forecast Files

Pattern

{system}.{date}.{time}.{resolution}.{bundle}.{region}.{lead_time}.{format}

Example

sof-d.20260911.t06z.0p125.basic.global.f006.grib2
ComponentValueDescription
sof-dSystemSpire Operational Forecast - Deterministic
20260911DateIssuance date (YYYYMMDD)
t06zTimeIssuance Time (UTC)
0p125Resolution0.125° grid spacing
basicBundleData bundle
globalRegionGeographic coverage
f006Lead timeForecast Hour (6 hours ahead)
grib2FormatFile format

Every product follows this pattern; the differences are in the resolution code, the bundle names and the form of the lead time. Examples per product:

ProductExample file name
sof-dsof-d.20260911.t06z.0p125.maritime.europe.f024.grib2
cwccwc.20260911.t11z.0p027.basic.europe.grib2 (no lead time)
srfssrfs.20260911.t06z.03km.core-v2.conus.f006m00.grib2
saifs-wxsaifs-wx.20260911.t06z.0p25.core.global.f012.grib2
saifs-s2ssaifs-s2s.20260911.t00z.0p5.surface.europe.D001.grib2, …W001.grib2
saifs-s2s-regimessaifs-s2s-regimes.20260911.t00z.CONUS.daily.csv
saifs-wx-regimessaifs-wx-regimes.20260911.t06z.EUATL.daily.csv
smismi.20260907.t12z.6000m.d-mssm.global.v0201.nc
lightninglightning.20250130.t21m15.05km.core.conus-equal-area.f01m00.nc

Component Reference

Forecast Systems

CodeDescription
sof-dSpire Operational Forecast - Deterministic Forecast (global, 0.125°)
cwcCurrent Weather Conditions (hourly analysis, 0.027°)
srfsSpire Regional Forecast System (3 km, CONUS and Europe)
saifs-wxSpire AI Weather Forecast (0.25°)
saifs-s2sSpire AI Sub-seasonal to Seasonal Forecast (0.5°)
saifs-s2s-regimes, saifs-wx-regimesWeather regime forecasts (CSV)
smiSoil Moisture Insights (NetCDF or GeoTIFF)
lightningLightning density (NetCDF)

Issuance Time

Format: tHHz where HH is the hour in UTC. Current weather files use every hour (t00z to t23z); lightning files add minutes (tHHmMM).

CodeTime (UTC)Used by
t00z00:00 UTCsof-d, saifs-wx, saifs-s2s, saifs-s2s-regimes, saifs-wx-regimes
t06z06:00 UTCsof-d, srfs, saifs-wx, saifs-wx-regimes
t12z12:00 UTCsof-d, srfs, saifs-wx, saifs-wx-regimes, smi
t18z18:00 UTCsof-d, saifs-wx, saifs-wx-regimes

Resolution

Degree grids use the format XpYYY where X.YYY is the grid spacing in degrees; kilometre and metre grids state the spacing directly.

CodeGrid spacingApproximate distanceUsed by
0p0270.027°~3 kmcwc
03km3 km3 kmsrfs
05km5 km5 kmlightning
6000m6 km6 kmsmi
0p1250.125°~14 kmsof-d
0p250.25°~28 kmsaifs-wx
0p50.5°~55 kmsaifs-s2s

Bundles

The bundle component is the bundle name exactly as accepted by the bundles query parameter. The :daily/:weekly suffix of SAIFS-S2S bundles is not part of the file name; the period is in the lead-time component.

ProductBundle codes in file names
sof-dbasic, clouds, precipitation, thunderstorm, maritime, maritime-atmos, maritime-wave, maritime-wave-ext, agricultural, wind-energy, solar-energy, upper-air, aviation
cwcbasic
srfscore-v2, upper-air, thunderstorm, derived (core is legacy)
saifs-wxcore, upper-air, derived
saifs-s2ssurface, upper-air, derived, derived-upper-air, probabilities, percentiles
saifs-s2s-regimes, saifs-wx-regimesnone
Lightningcore

The opt-in basic-accumulation, precipitation-accumulation and solar-energy-accumulation bundles exist only at the point endpoint and never appear in file names. See Data Bundles & Variables for the fields in each bundle.

Regions

Region codes are lower case and use hyphens inside a name and underscores between names.

CodeCoverageProducts
globalWorldwidesof-d, cwc, saifs-wx, saifs-s2s, smi
africaAfricasof-d, cwc
asiaAsiasof-d, cwc
atlanticAtlantic Oceansof-d, cwc
conusContiguous United Statessof-d, cwc, srfs, saifs-wx
europeEuropesof-d, cwc, srfs, saifs-wx, saifs-s2s
north-america_central-america_caribbeanNorth America, Central America and the Caribbeansof-d, cwc, saifs-s2s
south-americaSouth Americasof-d, cwc
south-west_pacificSouth-West Pacificsof-d, cwc
CONUS, EUATLRegime domains (upper case)regimes CSV
conus-equal-areaCONUS equal-area gridlightning

Subscriptions may include additional custom regions. Use the file list endpoint to see the exact region codes available to your account.

Lead Time

FormMeaningUsed by
fHHHHours from issuance, e.g. f000 analysis, f006, f024, f168 (7 days), f360 (15 days)sof-d, saifs-wx
fHHHmMMHours and minutes from issuance, e.g. f006m00srfs, lightning (f01m00 = 1-hour window)
DnnnForecast day, 24-hour statistics, D001 to D046saifs-s2s :daily
WnnnForecast week, weekly statistics, W001 to W006saifs-s2s :weekly
noneAnalysis file without lead timecwc, smi

See Lead Time.

File Formats

ExtensionFormat
.grib2GRIB2 (WMO standard)
.ncNetCDF
.tifGeoTIFF (soil moisture, on request)
.csvComma-separated values (regimes, archive exports)
.jsonJSON (archive exports)

Current Weather Files

Pattern

cwc.{date}.{time}.0p027.basic.{region}.grib2

Example

cwc.20260911.t11z.0p027.basic.europe.grib2

One file per region and hour; there is no lead-time component because each file is an analysis.


Soil Moisture Files

Pattern

smi.{date}.t12z.6000m.{product}.{region}.v{version}.{nc|tif}

Example

smi.20260907.t12z.6000m.d-mssm.global.v0201.nc

{product} is the soil moisture product name (for example d-mssm, d-essm-nrt) and v0201 the product version. See Soil Moisture.


Lightning Files

Pattern

lightning.{date}.tHHmMM.05km.core.conus-equal-area.f01m00.nc

Example

lightning.20250130.t21m15.05km.core.conus-equal-area.f01m00.nc

Files are produced every 5 minutes; f01m00 denotes the 1-hour rolling window. See Lightning.


Weather Regime Files

Pattern

{saifs-s2s-regimes|saifs-wx-regimes}.{date}.{time}.{CONUS|EUATL}.daily.csv

Example

saifs-s2s-regimes.20260911.t00z.CONUS.daily.csv

See Data Bundles & Variables for the CSV columns.


Archive Files

Archive files may be delivered as ZIP archives with directory structure:

{date}/
  {hour}/
    {filename}

Example Structure

20260911/
  00/
    sof-d.20260911.t00z.0p125.basic.global.f000.grib2
    sof-d.20260911.t00z.0p125.basic.global.f006.grib2
  12/
    sof-d.20260911.t12z.0p125.basic.global.f000.grib2

Custom Product Files

Custom product file names are defined per customer. Contact your Spire representative for documentation of your custom file naming.


Parsing File Names in Python

The parser below handles hyphenated system names, hour-only and hour-minute lead times, and the Dnnn/Wnnn periods of SAIFS-S2S.

import re
from dataclasses import dataclass
from datetime import datetime
from typing import Optional

@dataclass
class ForecastFileInfo:
    system: str
    date: datetime
    issuance_hour: int
    resolution: str
    bundle: str
    region: str
    lead: str            # raw lead-time token, e.g. "f006", "f006m00", "D001", "W001"
    lead_hours: Optional[float]
    format: str

PATTERN = re.compile(
    r'^(?P<system>[a-z0-9-]+)\.'
    r'(?P<date>\d{8})\.'
    r't(?P<hour>\d{2})z\.'
    r'(?P<res>\d+p\d+|\d+km|\d+m)\.'
    r'(?P<bundle>[a-z0-9-]+)\.'
    r'(?P<region>[A-Za-z0-9_-]+)\.'
    r'(?P<lead>f\d{3}(?:m\d{2})?|[DW]\d{3})\.'
    r'(?P<fmt>\w+)$'
)

def lead_to_hours(lead):
    """Convert a lead-time token to hours; None for daily/weekly periods."""
    if lead.startswith('f'):
        hours = int(lead[1:4])
        minutes = int(lead[5:7]) if 'm' in lead else 0
        return hours + minutes / 60
    return None  # Dnnn / Wnnn periods

def parse_forecast_filename(filename):
    """Parse a standard forecast filename into components."""
    match = PATTERN.match(filename)
    if not match:
        raise ValueError(f"Could not parse filename: {filename}")

    g = match.groupdict()
    return ForecastFileInfo(
        system=g['system'],
        date=datetime.strptime(g['date'], '%Y%m%d'),
        issuance_hour=int(g['hour']),
        resolution=g['res'],
        bundle=g['bundle'],
        region=g['region'],
        lead=g['lead'],
        lead_hours=lead_to_hours(g['lead']),
        format=g['fmt'],
    )

# Example usage
for filename in [
    "sof-d.20260911.t06z.0p125.basic.global.f006.grib2",
    "srfs.20260911.t06z.03km.core-v2.europe.f006m00.grib2",
    "saifs-s2s.20260911.t00z.0p5.surface.europe.W001.grib2",
]:
    info = parse_forecast_filename(filename)
    print(f"{info.system:10} {info.date:%Y-%m-%d} {info.issuance_hour:02d}Z "
          f"{info.resolution:6} {info.bundle:10} {info.region:10} "
          f"lead={info.lead} ({info.lead_hours} h)")

Filter Files by Lead Time

def filter_by_lead_time(filenames, min_hours=0, max_hours=48):
    """Filter forecast files by lead time range (hour-based files only)."""
    result = []
    for filename in filenames:
        try:
            info = parse_forecast_filename(filename)
        except ValueError:
            continue
        if info.lead_hours is not None and min_hours <= info.lead_hours <= max_hours:
            result.append(filename)
    return result

# Get only 0-24 hour forecasts
short_range = filter_by_lead_time(file_list, max_hours=24)