Raw model output on the native 0.25° grid — no MOS, no bias correction, no post-processing. Scores understate operational forecast quality. Read the fairness statement →

CastCheck methodology v0.2 · data through 2026-08-30

KSFO — San Francisco Intl

37.6196, -122.3656 · 3 m· standard offset UTC-8 h · truth product CLISFO

These pages are always bilinear interpolation, the headline method. The nearest-node variant, and every other window/initialization/interpolation/variable combination, is published on each permanent link below — follow any number.

Daily maximum temperature — MAE °F

the last 90 days, 00Z, bilinear. MAE with the bias and n underneath; every cell links to its permanent page. The sparkline shows the same model across lead days 1–9 on a scale shared within this table.
Modeld0d1d2d3d4d5d6d7d8d9lead 1–9
ECMWF AIFS Singleaifs_single 4.58-4.49 · n=30 4.65-4.42 · n=29 4.58-4.29 · n=28 4.42-4.17 · n=27 4.69-4.44 · n=26 4.52-4.22 · n=25 4.86-4.64 · n=24 5.34-4.54 · n=23 5.35-4.31 · n=22 ECMWF AIFS Single MAE by lead day 1 to 9, tmax
Aurora (GFS init)aurora_gfs 7.68-7.68 · n=2 6.64-6.64 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmax
Aurora (IFS init)aurora_ifs 5.42-5.42 · n=3 8.32-8.32 · n=2 8.34-8.34 · n=1 Aurora (IFS init) MAE by lead day 1 to 9, tmax
FourCastNet v2 (GFS init)fourcastnet_gfs 5.01-5.01 · n=2 1.41-1.41 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmax
FourCastNet v2 (IFS init)fourcastnet_ifs 3.34-1.87 · n=3 2.45-2.45 · n=2 1.61-1.61 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmax
NCEP GFSgfs 4.74-4.35 · n=30 4.75-4.49 · n=29 4.58-4.30 · n=28 4.70-4.31 · n=27 4.57-4.44 · n=26 4.69-4.30 · n=25 4.65-4.40 · n=24 4.86-4.73 · n=23 4.89-4.86 · n=22 NCEP GFS MAE by lead day 1 to 9, tmax
GraphCast (GFS init)graphcast_gfs 6.19-6.19 · n=2 4.64-4.64 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmax
GraphCast (IFS init)graphcast_ifs 4.62-4.43 · n=28 5.07-4.91 · n=27 5.16-5.07 · n=26 5.07-4.79 · n=25 5.13-5.00 · n=25 5.56-5.29 · n=25 5.60-5.34 · n=24 5.95-5.74 · n=23 6.76-6.25 · n=22 GraphCast (IFS init) MAE by lead day 1 to 9, tmax
ECMWF IFS HRESifs_hres 6.17-6.17 · n=25 6.71-6.71 · n=22 5.98-5.98 · n=23 6.33-6.33 · n=22 6.33-6.33 · n=20 6.20-6.20 · n=18 5.98-5.91 · n=19 5.44-5.42 · n=18 5.37-5.14 · n=17 ECMWF IFS HRES MAE by lead day 1 to 9, tmax
Pangu-Weather (GFS init)pangu_gfs 7.29-7.29 · n=2 6.64-6.64 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmax
Pangu-Weather (IFS init)pangu_ifs 4.74-4.11 · n=3 6.70-6.70 · n=2 6.39-6.39 · n=1 Pangu-Weather (IFS init) MAE by lead day 1 to 9, tmax
Persistence (baseline)persistence 3.58+0.00 · n=90 4.39+0.01 · n=90 4.61+0.01 · n=90 5.08-0.10 · n=90 5.17-0.21 · n=90 5.06-0.19 · n=90 4.67-0.29 · n=90 4.88-0.41 · n=90 4.74-0.39 · n=90 Persistence (baseline) MAE by lead day 1 to 9, tmax

Up to 1 of the scored days in this table carry a QC flag on the observation (a CLI value that disagreed with the hourly observations, or a fallback source). They are kept in the scores and counted here rather than dropped — see methodology.

+ model too warm · − model too cold · bias interval includes zero · ★ lowest MAE · = not distinguishable from the leader · ▼ significantly worse · n < 30 greyed and unranked · CI is a 95 % moving-block bootstrap interval.

Daily minimum temperature — MAE °F

the last 90 days, 00Z, bilinear. MAE with the bias and n underneath; every cell links to its permanent page. The sparkline shows the same model across lead days 1–9 on a scale shared within this table.
Modeld0d1d2d3d4d5d6d7d8d9lead 1–9
ECMWF AIFS Singleaifs_single 0.87-0.43 · n=30 0.94-0.45 · n=29 1.05-0.50 · n=28 1.18-0.62 · n=27 1.30-0.72 · n=26 1.36-0.60 · n=25 1.55-0.57 · n=24 1.74-0.42 · n=23 1.65-0.17 · n=22 ECMWF AIFS Single MAE by lead day 1 to 9, tmin
Aurora (GFS init)aurora_gfs 0.57+0.24 · n=2 0.33-0.33 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmin
Aurora (IFS init)aurora_ifs 0.98+0.35 · n=3 1.11-0.29 · n=2 1.25-1.25 · n=1 Aurora (IFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (GFS init)fourcastnet_gfs 4.85-4.85 · n=2 2.12-2.12 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (IFS init)fourcastnet_ifs 2.71-2.24 · n=3 1.23-1.23 · n=2 0.40-0.40 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmin
NCEP GFSgfs 1.05-0.34 · n=30 0.91-0.19 · n=29 0.93-0.24 · n=28 0.82-0.35 · n=27 1.04-0.52 · n=26 0.98-0.63 · n=25 1.06-0.74 · n=24 1.15-0.41 · n=23 0.98-0.38 · n=22 NCEP GFS MAE by lead day 1 to 9, tmin
GraphCast (GFS init)graphcast_gfs 0.62+0.12 · n=2 0.89-0.89 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmin
GraphCast (IFS init)graphcast_ifs 0.70+0.48 · n=28 0.83+0.12 · n=27 1.00-0.17 · n=26 1.29-0.46 · n=25 1.42-0.69 · n=25 1.47-0.91 · n=25 1.55-1.10 · n=24 1.81-1.26 · n=23 1.49-0.96 · n=22 GraphCast (IFS init) MAE by lead day 1 to 9, tmin
ECMWF IFS HRESifs_hres 0.78-0.17 · n=25 0.87-0.13 · n=22 0.95-0.08 · n=23 0.91-0.08 · n=22 0.75-0.15 · n=20 0.64-0.21 · n=18 0.89-0.38 · n=19 1.25-0.29 · n=18 1.38+0.19 · n=17 ECMWF IFS HRES MAE by lead day 1 to 9, tmin
Pangu-Weather (GFS init)pangu_gfs 0.66+0.17 · n=2 0.55-0.55 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmin
Pangu-Weather (IFS init)pangu_ifs 1.21+1.12 · n=3 1.13+0.42 · n=2 0.08+0.08 · n=1 Pangu-Weather (IFS init) MAE by lead day 1 to 9, tmin
Persistence (baseline)persistence 1.16-0.04 · n=90 1.59-0.10 · n=90 1.67-0.16 · n=90 1.98-0.20 · n=90 2.03-0.21 · n=90 1.89-0.29 · n=90 1.94-0.34 · n=90 1.97-0.37 · n=90 2.08-0.41 · n=90 Persistence (baseline) MAE by lead day 1 to 9, tmin

Up to 1 of the scored days in this table carry a QC flag on the observation (a CLI value that disagreed with the hourly observations, or a fallback source). They are kept in the scores and counted here rather than dropped — see methodology.

Month by month

MAE °F at lead day 1, 00Z, bilinear, daily maximum — the seasonal slice behind the window averages. A model that is excellent in one season and poor in another shows up here and nowhere else.

Monthaifs_singleaurora_gfsaurora_ifsfourcastnet_gfsfourcastnet_ifsgfsgraphcast_gfsgraphcast_ifsifs_hrespangu_gfspangu_ifs
2026-08 4.65-4.42 · n=296.64-6.64 · n=18.32-8.32 · n=21.41-1.41 · n=12.45-2.45 · n=24.75-4.49 · n=294.64-4.64 · n=15.07-4.91 · n=276.71-6.71 · n=226.64-6.64 · n=16.70-6.70 · n=2
2026-01 3.32-3.32 · n=6

Model availability at this station

ModelPeriod Scored daysCoverage
ECMWF AIFS Single 2026-08-02 → 2026-08-3029
Aurora (GFS init) 2026-08-30 → 2026-08-301
Aurora (IFS init) 2026-08-29 → 2026-08-302
FourCastNet v2 (GFS init) 2026-08-30 → 2026-08-301
FourCastNet v2 (IFS init) 2026-08-29 → 2026-08-302
NCEP GFS 2026-08-02 → 2026-08-3029
GraphCast (GFS init) 2026-08-30 → 2026-08-301
GraphCast (IFS init) 2026-01-02 → 2026-08-3033
ECMWF IFS HRES 2026-08-02 → 2026-08-3022
Pangu-Weather (GFS init) 2026-08-30 → 2026-08-301
Pangu-Weather (IFS init) 2026-08-29 → 2026-08-302
Persistence (baseline) 2024-01-02 → 2026-08-30967

Observed truth — last 30 days

Climatological dayTmax °F Tmin °FSourceFlag
2026-08-307157OBSobs_fallback
2026-08-297156CLI
2026-08-286557CLI
2026-08-277358CLI
2026-08-267755CLI
2026-08-256858CLI
2026-08-247358CLI
2026-08-237757CLI
2026-08-226959CLI
2026-08-216858CLI
2026-08-206956CLI
2026-08-196857CLI
2026-08-187057CLI
2026-08-177257CLI
2026-08-167058CLI
2026-08-156958CLI
2026-08-147059CLI
2026-08-137160CLI
2026-08-127457CLI
2026-08-117657CLI
2026-08-107357CLI
2026-08-097157CLI
2026-08-086758CLI
2026-08-076857CLI
2026-08-067257CLI
2026-08-057258CLI
2026-08-047357CLI
2026-08-037856CLI
2026-08-028057CLI
2026-08-017457CLI

All scores as JSON scores_latest.csv daily_errors.csv.gz data & licences