GribStream

GribStream - Fast & Efficient Weather Forecast History API

Leverage the National Blend of Models (NBM)

What is NBM?

The National Blend of Models (NBM) is a nationally consistent and skillful suite of calibrated forecast guidance based on a blend of both NWS and non-NWS numerical weather prediction model data and post-processed model guidance. The goal of the NBM is to create a highly accurate, skillful and consistent starting point for the gridded forecast.

Blazing Fast

Tens of thousands of points at hourly rate, for months at a time in a single http request, in seconds.

Easy to Use

Simple API, open-source clients and clear documentation. Try it in minutes.

Cost-effective

Killer pricing and performance. Extract only what you need. No need to download/archive, just consume the on-demand stream.

Features roadmap

Actively being developed, hover items for details and don't hesitate contacting us for more information.

Result formats

CSV

Parquet

JSON lines

Image PNG, JPG, TIFF

MP4 H.264 H.265

Locations by

Latitude,Longitude

Zip Code

City

Shape

Times by

Range

List

Best series

Asof / Time-travel

Downsampling

Interpolation / upsampling

Aggregations

Averages

Weighted averages

Time weighted averages

Minimum, maximum

Percentiles

Histograms

Notifications

Threshold based

EMA outlier

Prediction changed

To e-mail

To webhook

readily available

Examples

Get the best historical data for three parameters, for a 12 hour range, for two coordinates, as of the end of the sixth hour:

from client import GribStreamClient
import datetime

with GribStreamClient(apikey=None) as client: # DEMO API token
    start = datetime.datetime.now(datetime.UTC)
    df = client.min_horizon(
        from_time=datetime.datetime(year=2024, month=8, day=10, hour=0),
        until_time=datetime.datetime(year=2024, month=8, day=10, hour=12),
        coordinates=[
            {"lat": 40.75, "lon": -73.98},
            {"lat": 29.75, "lon": -95.36},
        ],
        variables=[
            {"name": "TMP", "level": "2 m above ground", "info": ""},
            {"name": "WIND", "level": "10 m above ground", "info": ""},
            {"name": "DPT", "level": "2 m above ground", "info": ""},
        ],
        # Time travel. Before as_of, forecasted_time is history, after it is the forecast at as_of
        as_of=datetime.datetime(year=2024, month=8, day=10, hour=6),
        min_horizon=1,
        max_horizon=264,
    )
    print(df.sort_values(['forecasted_time', 'lat', 'lon']).to_string(index=False))
    print('response in:', datetime.datetime.now(datetime.UTC) - start)
                

Output:

            forecasted_at           forecasted_time   lat    lon  DPT|2 m above ground|  TMP|2 m above ground|  WIND|10 m above ground|
2024-08-09 23:00:00+00:00 2024-08-10 00:00:00+00:00 29.75 -95.36                 297.61                 307.18                      2.4
2024-08-09 23:00:00+00:00 2024-08-10 00:00:00+00:00 40.75 -73.98                 295.21                 296.38                     12.4
2024-08-10 00:00:00+00:00 2024-08-10 01:00:00+00:00 29.75 -95.36                 297.27                 305.87                      2.0
2024-08-10 00:00:00+00:00 2024-08-10 01:00:00+00:00 40.75 -73.98                 295.27                 296.27                     11.6
2024-08-10 01:00:00+00:00 2024-08-10 02:00:00+00:00 29.75 -95.36                 297.72                 304.90                      1.6
2024-08-10 01:00:00+00:00 2024-08-10 02:00:00+00:00 40.75 -73.98                 295.32                 296.10                     11.2
2024-08-10 02:00:00+00:00 2024-08-10 03:00:00+00:00 29.75 -95.36                 297.47                 304.05                      1.6
2024-08-10 02:00:00+00:00 2024-08-10 03:00:00+00:00 40.75 -73.98                 295.07                 295.65                     10.4
2024-08-10 03:00:00+00:00 2024-08-10 04:00:00+00:00 29.75 -95.36                 298.03                 303.84                      1.2
2024-08-10 03:00:00+00:00 2024-08-10 04:00:00+00:00 40.75 -73.98                 295.23                 295.84                      9.6
2024-08-10 04:00:00+00:00 2024-08-10 05:00:00+00:00 29.75 -95.36                 298.46                 303.12                      1.2
2024-08-10 04:00:00+00:00 2024-08-10 05:00:00+00:00 40.75 -73.98                 295.26                 295.52                      8.8
2024-08-10 05:00:00+00:00 2024-08-10 06:00:00+00:00 29.75 -95.36                 298.19                 302.71                      1.2
2024-08-10 05:00:00+00:00 2024-08-10 06:00:00+00:00 40.75 -73.98                 294.99                 295.11                      8.0
2024-08-10 06:00:00+00:00 2024-08-10 07:00:00+00:00 29.75 -95.36                 298.07                 302.23                      1.2
2024-08-10 06:00:00+00:00 2024-08-10 07:00:00+00:00 40.75 -73.98                 294.87                 295.03                      7.2
2024-08-10 06:00:00+00:00 2024-08-10 08:00:00+00:00 29.75 -95.36                 298.06                 301.98                      1.2
2024-08-10 06:00:00+00:00 2024-08-10 08:00:00+00:00 40.75 -73.98                 294.46                 294.78                      6.8
2024-08-10 06:00:00+00:00 2024-08-10 09:00:00+00:00 29.75 -95.36                 298.13                 301.57                      1.2
2024-08-10 06:00:00+00:00 2024-08-10 09:00:00+00:00 40.75 -73.98                 294.93                 294.77                      6.0
2024-08-10 06:00:00+00:00 2024-08-10 10:00:00+00:00 29.75 -95.36                 297.70                 301.03                      1.6
2024-08-10 06:00:00+00:00 2024-08-10 10:00:00+00:00 40.75 -73.98                 294.90                 295.03                      5.2
2024-08-10 06:00:00+00:00 2024-08-10 11:00:00+00:00 29.75 -95.36                 297.36                 301.04                      1.6
2024-08-10 06:00:00+00:00 2024-08-10 11:00:00+00:00 40.75 -73.98                 295.36                 295.44                      4.8
response in: 0:00:00.716477
            

Check out the full documentation and code examples on GitHub.

Query the forecast made at 2024-09-10T00:00:00Z for three parameters, ten hours out, for three coordinates:

curl -X POST 'https://gribstream.com/api/v1/forecasts' \
    -H "Content-Type: application/json" \
    -H "Accept-Encoding: gzip" \
    -H "Authorization: $(curl https://gribstream.com/auth/demo)" \
    -d '{
    "forecastedFrom": "2024-09-10T00:00:00Z",
    "forecastedUntil": "2024-09-10T00:00:00Z",
    "minHorizon": 1,
    "maxHorizon": 10,
    "coordinates": [
        { "lat": 40.75, "lon": -73.98 },
        { "lat": 29.75, "lon": -95.36 },
        { "lat": 47.6, "lon": -122.33 }
    ],
    "variables": [
        { "name": "TMP", "level": "2 m above ground", "info": "" },
        { "name": "WIND", "level": "10 m above ground", "info": "" },
        { "name": "DPT", "level": "2 m above ground", "info": "" }
    ]
    }' | gunzip
            

Output:

forecasted_at,forecasted_time,lat,lon,DPT|2 m above ground|,TMP|2 m above ground|,WIND|10 m above ground|
2024-09-10T00:00:00Z,2024-09-10T04:00:00Z,29.75,-95.36,292.80,299.08,3.20
2024-09-10T00:00:00Z,2024-09-10T04:00:00Z,40.75,-73.98,288.40,293.88,7.20
2024-09-10T00:00:00Z,2024-09-10T04:00:00Z,47.60,-122.33,286.40,288.68,1.20
2024-09-10T00:00:00Z,2024-09-10T02:00:00Z,29.75,-95.36,293.20,299.88,3.20
2024-09-10T00:00:00Z,2024-09-10T02:00:00Z,40.75,-73.98,288.40,293.48,7.60
2024-09-10T00:00:00Z,2024-09-10T02:00:00Z,47.60,-122.33,287.20,291.48,1.60
2024-09-10T00:00:00Z,2024-09-10T03:00:00Z,29.75,-95.36,293.06,299.40,3.20
2024-09-10T00:00:00Z,2024-09-10T03:00:00Z,40.75,-73.98,288.66,293.80,7.20
2024-09-10T00:00:00Z,2024-09-10T03:00:00Z,47.60,-122.33,286.66,289.80,1.20
2024-09-10T00:00:00Z,2024-09-10T01:00:00Z,29.75,-95.36,293.05,301.07,3.60
2024-09-10T00:00:00Z,2024-09-10T01:00:00Z,40.75,-73.98,287.85,293.47,8.00
2024-09-10T00:00:00Z,2024-09-10T01:00:00Z,47.60,-122.33,287.05,293.47,2.00
2024-09-10T00:00:00Z,2024-09-10T05:00:00Z,29.75,-95.36,292.10,298.56,3.20
2024-09-10T00:00:00Z,2024-09-10T05:00:00Z,40.75,-73.98,288.50,293.76,6.80
2024-09-10T00:00:00Z,2024-09-10T05:00:00Z,47.60,-122.33,286.10,287.76,0.80
2024-09-10T00:00:00Z,2024-09-10T10:00:00Z,29.75,-95.36,291.09,296.63,4.00
2024-09-10T00:00:00Z,2024-09-10T10:00:00Z,40.75,-73.98,288.29,292.63,6.00
2024-09-10T00:00:00Z,2024-09-10T10:00:00Z,47.60,-122.33,284.69,285.83,0.40
2024-09-10T00:00:00Z,2024-09-10T09:00:00Z,29.75,-95.36,291.19,297.14,4.00
2024-09-10T00:00:00Z,2024-09-10T09:00:00Z,40.75,-73.98,288.39,293.14,6.40
2024-09-10T00:00:00Z,2024-09-10T09:00:00Z,47.60,-122.33,285.19,286.34,0.40
2024-09-10T00:00:00Z,2024-09-10T07:00:00Z,29.75,-95.36,291.31,297.87,3.60
2024-09-10T00:00:00Z,2024-09-10T07:00:00Z,40.75,-73.98,288.51,293.47,6.80
2024-09-10T00:00:00Z,2024-09-10T07:00:00Z,47.60,-122.33,285.71,287.07,0.80
2024-09-10T00:00:00Z,2024-09-10T08:00:00Z,29.75,-95.36,291.39,297.43,3.60
2024-09-10T00:00:00Z,2024-09-10T08:00:00Z,40.75,-73.98,288.59,293.43,6.80
2024-09-10T00:00:00Z,2024-09-10T08:00:00Z,47.60,-122.33,285.39,286.63,0.40
2024-09-10T00:00:00Z,2024-09-10T06:00:00Z,29.75,-95.36,291.67,297.92,3.60
2024-09-10T00:00:00Z,2024-09-10T06:00:00Z,40.75,-73.98,288.47,293.92,6.80
2024-09-10T00:00:00Z,2024-09-10T06:00:00Z,47.60,-122.33,285.67,287.52,0.80
                            

Weather parameters

Per request quota calculation

NBM publishes a new forecast every hour.

At UTC hours 1, 7, 13 and 19 it forecasts all 264 hours ahead (horizons). At all other hours it forecasts all hours up to hour ahead 36, then every third hour up to 192 hours ahead and then every sixth hour up to 264 hours ahead. Sometimes the NBM archive will skip a forecast or it may be corrupted.

GribStream will transparently skip data that is not available or corrupted and will not count it towards usage.

API usage is measured in quota units that reflect resources spent in the data processing.

Units are calculated as:

Units = (forecasts * horizons) * parameters * (1 + (coordinates-1) / 1000)

Examples:

1
1

Calculated Units:

0

Available Plans

A Free Plan is available to get you started. Upgrade to one of our Pro plans for higher daily usage limits.

Pro Plan

Daily Limit: 12,000 units

$14.90 / month

Pro Plan 2x

Daily Limit: 24,000 units

$26.80 / month

Pro Plan 4x

Daily Limit: 48,000 units

$48.24 / month

Pro Plan 8x

Daily Limit: 96,000 units

$86.90 / month

Pro Plan 16x

Daily Limit: 192,000 units

$156.42 / month

Pro Plan 32x

Daily Limit: 384,000 units

$281.56 / month

For larger-scale usage, heavy backfills, higher performance, or additional features, contact us.