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, 12Z, 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.64-4.50 · n=29 4.46-4.33 · n=28 4.74-4.51 · n=27 4.71-4.59 · n=26 4.73-4.50 · n=24 4.92-4.42 · n=24 5.30-5.01 · n=23 6.01-5.27 · n=22 6.04-5.58 · n=21 ECMWF AIFS Single MAE by lead day 1 to 9, tmax
Aurora (GFS init)aurora_gfs 6.92-6.92 · n=2 6.19-6.19 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmax
Aurora (IFS init)aurora_ifs 8.56-8.56 · 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 2.01-2.01 · n=2 0.18-0.18 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmax
FourCastNet v2 (IFS init)fourcastnet_ifs 2.34-2.34 · n=2 0.68-0.68 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmax
NCEP GFSgfs 4.80-4.57 · n=29 4.54-4.14 · n=28 4.69-4.22 · n=27 4.45-4.20 · n=26 4.49-4.18 · n=25 5.00-4.60 · n=24 4.94-4.81 · n=23 5.19-5.19 · n=22 5.44-5.44 · n=21 NCEP GFS MAE by lead day 1 to 9, tmax
GraphCast (GFS init)graphcast_gfs 6.10-6.10 · n=2 5.04-5.04 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmax
GraphCast (IFS init)graphcast_ifs 5.04-5.00 · n=27 5.02-4.92 · n=26 5.28-5.03 · n=25 5.13-5.05 · n=25 5.46-5.35 · n=25 5.46-5.17 · n=24 5.62-5.39 · n=23 6.11-5.77 · n=22 6.36-6.08 · n=21 GraphCast (IFS init) MAE by lead day 1 to 9, tmax
ECMWF IFS HRESifs_hres 6.17-6.17 · n=24 6.16-6.16 · n=22 6.50-6.50 · n=22 6.30-6.30 · n=21 6.22-6.22 · n=20 5.85-5.85 · n=19 6.14-5.97 · n=17 6.40-6.40 · n=17 6.75-6.75 · n=14 ECMWF IFS HRES MAE by lead day 1 to 9, tmax
Pangu-Weather (GFS init)pangu_gfs 4.94-4.94 · n=2 4.51-4.51 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmax
Pangu-Weather (IFS init)pangu_ifs 3.61-3.61 · n=2 4.02-4.02 · 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, 12Z, 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.85-0.37 · n=29 1.10-0.57 · n=28 1.26-0.75 · n=27 1.30-0.90 · n=26 1.37-0.97 · n=24 1.41-0.99 · n=24 1.81-0.99 · n=23 1.49-0.71 · n=22 1.35-0.90 · n=21 ECMWF AIFS Single MAE by lead day 1 to 9, tmin
Aurora (GFS init)aurora_gfs 0.54+0.30 · n=2 0.36-0.36 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmin
Aurora (IFS init)aurora_ifs 0.84-0.58 · n=2 1.51-1.51 · n=1 Aurora (IFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (GFS init)fourcastnet_gfs 1.27-1.27 · n=2 0.24-0.24 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (IFS init)fourcastnet_ifs 1.22-1.22 · n=2 0.81-0.81 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmin
NCEP GFSgfs 1.01-0.31 · n=29 0.88-0.16 · n=28 0.98-0.27 · n=27 1.00-0.45 · n=26 0.97-0.47 · n=25 0.82-0.48 · n=24 0.98-0.63 · n=23 1.11-0.71 · n=22 1.18-0.69 · n=21 NCEP GFS MAE by lead day 1 to 9, tmin
GraphCast (GFS init)graphcast_gfs 0.47-0.46 · n=2 1.25-1.25 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmin
GraphCast (IFS init)graphcast_ifs 0.80-0.17 · n=27 1.01-0.27 · n=26 1.26-0.53 · n=25 1.34-0.74 · n=25 1.46-0.96 · n=25 1.61-1.18 · n=24 1.86-1.37 · n=23 1.54-0.95 · n=22 1.71-1.18 · n=21 GraphCast (IFS init) MAE by lead day 1 to 9, tmin
ECMWF IFS HRESifs_hres 0.87-0.05 · n=24 0.87-0.03 · n=22 0.84-0.19 · n=22 0.79-0.10 · n=21 0.80-0.07 · n=20 0.84-0.32 · n=19 1.24-0.68 · n=17 1.28-0.24 · n=17 1.53-0.27 · n=14 ECMWF IFS HRES MAE by lead day 1 to 9, tmin
Pangu-Weather (GFS init)pangu_gfs 1.10-1.10 · n=2 2.20-2.20 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmin
Pangu-Weather (IFS init)pangu_ifs 0.96-0.96 · n=2 2.54-2.54 · 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 slices, model availability and the observed-truth table live on the canonical page: they do not depend on the window, initialization or interpolation selected here.

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