Methodology Updated 2026-05-06

How we determined each Palo Alto Caltrain station's SB 79 tier

The official Bay Area SB 79 tier map will come from ABAG/MTC in mid-2026. But the inputs are public — Caltrain's GTFS feed and HCD's threshold definitions — so we don't have to wait. Here's the working.

TL;DR

Station Avg trains / weekday Verdict
Palo Alto / University Ave Caltrain 104 Tier 1
California Avenue Caltrain 90 Tier 1
San Antonio Caltrain 90 Tier 1
All three Palo Alto Caltrain stations clear the Tier 1 threshold (≥72 trains/weekday) with margin. SB 79's strongest height/density floors — 95 ft adjacent, 75 ft within ¼ mile, 65 ft within ½ mile — apply by default at all three starting July 1, 2026.

1. What the law actually requires

SB 79 sorts transit stops into Tier 1 and Tier 2 based on service level. For commuter rail (which is what Caltrain is), the HCD MPO advisory of March 20, 2026 spells out the math:

"Very high frequency commuter rail" = a commuter rail service operating an average of at least 72 trains per weekday across all directions at any point in the past three years.

"High frequency commuter rail" = at least 48 trains per weekday, not meeting the very-high-frequency standard.

"The average is the sum of the number of scheduled stops at a station for a commuter rail service for all weekdays, divided by five weekdays."

A passenger rail station "occupying one physical location counts as a single station, even if multiple rail services utilize the station."

So:

Per the HCD advisory's typology table (p.9), Caltrain is classified as commuter rail, not heavy rail. So the per-station train count is what determines tier.

2. Where the data comes from

Caltrain publishes its schedule in GTFS format (General Transit Feed Specification — the standard Google maps and most transit apps use). The feed is a zip of CSV files describing stops, trips, schedules, and calendars. It's free and public.

3. The methodology, step by step

  1. Download the GTFS zip. 165 KB.
  2. Find the matching stops. Each Palo Alto Caltrain station has a parent stop (e.g. palo_alto) and two child stops, one per direction (e.g. 70171 Northbound and 70172 Southbound). Per HCD: one physical location = one station, so we sum across both directions.
  3. Identify the weekday service. Caltrain's calendar.txt has one weekday-active service ID — c_71742_b_86200_d_31 ("Year Round starting 1/31/2026 (Weekday)") — running Monday through Friday for the feed's full date range.
  4. List weekday trips. 112 trips total in trips.txt belong to that weekday service ID (this is roughly 56 northbound + 56 southbound).
  5. Count scheduled stops at each station. Stream stop_times.txt (5,414 rows). For each row, if the stop ID is one of our targets and the trip is in the weekday set, increment the per-day counter for each weekday the service is active (Mon–Fri).
  6. Sum per station, divide by 5. That's the "average trains per weekday across both directions" the HCD advisory asks for.
  7. Apply thresholds. ≥72 → Tier 1. 48–71 → Tier 2. <48 → below threshold.

4. The numbers

Station GTFS stop_ids Mon–Fri total ÷ 5 Threshold Tier
Palo Alto / University Ave 70171 + 70172 520 104.0 ≥ 72 Tier 1
California Avenue 70191 + 70192 450 90.0 ≥ 72 Tier 1
San Antonio 70201 + 70202 450 90.0 ≥ 72 Tier 1

Why University Ave gets 104 and the other two get 90: post-electrification, Caltrain runs a mix of all-stop "local" trains and "limited" trains that skip some stops. University Ave is a major stop where every train stops; California Ave and San Antonio are local-pattern stops where ~14 trains skip in each direction. All three still clear the Tier 1 bar.

5. Verdict per station

Palo Alto / University Ave — 104 trains/weekday. Comfortably above the 72-train Tier 1 floor. Within ½ mile of the station, SB 79 sets the height floor at 65 ft (about 5–6 stories), 75 ft within ¼ mile (about 7), and 95 ft adjacent (about 9–10).

California Avenue — 90 trains/weekday. 18 trains above the Tier 1 floor. Same envelopes as above apply within the half-mile band around the station.

San Antonio — 90 trains/weekday. Same as Cal Ave. The half-mile band straddles the Palo Alto / Mountain View boundary, so the density implications also reach into Mountain View's parcels.

6. Caveats

7. Reproduce this yourself

The computation is packaged as a reusable skill at ~/.claude/skills/sb79-tier-determination/ — designed to work for any California transit station with a published GTFS feed.

$ git clone https://github.com/<your-fork>/sb79palo
$ cd sb79palo
$ node ~/.claude/skills/sb79-tier-determination/compute-tiers.mjs \
       --config scripts/compute-tiers.config.json
$ cat assets/data/station-tiers.json

The script:

No npm install needed — pure Node ≥18 plus the system unzip. Anyone can rerun it and get the same numbers (until Caltrain publishes a new schedule).

Sources