SEPTA / DATA REVIEW

What the schedule data tells us

Network coverage, planned service and structural checks for the supplied SEPTA GTFS package.

Static GTFS · September 2026 feed
This package contains planned service—not historical vehicle GPS observations.
Stop coordinates locate boarding points; shape coordinates trace scheduled paths. Neither records where a vehicle actually was. Trip IDs and block IDs are schedule identifiers, not observed fleet positions. Actual trajectories require archived GTFS Realtime VehiclePositions or another vehicle-location dataset.

Main findings

Full service-date timeline

Explore each date covered by this snapshot, including calendar exceptions. Select one feed or route to avoid mistaking the end of rail coverage for a reduction in actual service.

Planned paths, conditional on the schedule. A trip links to a shape in shapes.txt and runs only on its active service days. This snapshot does not guarantee that the same schedule or path will remain in use until next year. Rail coverage stops on 17 October; its service beyond that date is unknown here.

Hover for daily values; click a date to inspect its schedule.

Selected date: trip starts by hour

Local agency time, America/New_York. Values beyond 24:00 belong to the selected service day, rather than being moved into the next date.

Selected date: scheduled trip duration

First departure to final arrival, including intermediate dwell time. Distribution mixes directions and trip variants; it does not measure actual travel times.

Operating-day detail

Concurrency counts overlapping scheduled trip intervals for the selected service day only, excluding trips originating on adjacent days. It is not a fleet count. Service span is the first departure to last arrival and can contain gaps.

Weekday and month comparison
WeekdayCovered daysMean trips/dayMin–max
MonthCovered daysMean trips/dayTrip occurrences

Means include zero-trip dates inside declared coverage. Partial months are not extrapolated. Monthly differences may reflect weekday mix and calendar exceptions, not a trend in actual demand.

Largest changes against the same weekday one week earlier
DatePrior weekScheduled tripsChangeException delta*

*Selected feed total after exceptions minus its base calendar count on that date; this is feed-wide even when a route is selected. Comparisons are restricted to covered dates. Expiring calendars and exception changes are schedule effects, not evidence of observed cancellations.

Large future drops require caution. In this snapshot, bus/metro trips fall from 14,904 on 16 December to 4,938 on 23 December, with many routes absent on the latter date. Treat this as a result of the supplied calendar encoding that needs confirmation against an updated SEPTA feed—not proof of a real network shutdown. M1_BUS has no encoded service after 19 December, although the overall bus feed horizon continues into February.
Route origin-pattern departure spacing for selected date

Select an individual route. Spacing is calculated separately for each direction, first stop and shape, across the whole service day. These pattern-specific departure intervals are not passenger headways at every stop; variants may overlap and long gaps may include breaks in service. Direction 0/1 is the feed's code, not a compass direction.

DirectionOriginShapeTripsFirst–last departureMedian spacing minMax spacing min
Timeline calculation and limits

For every date from feed_start_date through feed_end_date (inclusive), weekday flags in calendar.txt are applied within each service's date range. calendar_dates.txt then adds or removes service IDs. Trip templates with active service IDs are counted once each on that service date. Dates with identical active services share a computed profile. This avoids expanding over two million stop-time rows for every date.

Trip-hours sum each scheduled endpoint duration; they exclude layovers and deadheading between trips. Percentiles use linear interpolation over valid endpoint durations. First/last times and concurrent trips are computed from scheduled endpoints. This feed snapshot is a plan; it cannot establish historical vehicle positions, actual delays, or future adherence. Old calendar entries outside declared feed coverage are not included in this timeline. Changes in shape usage do not prove a detour occurred.

Source coverage

The two inner ZIPs are analyzed once each. The outer gtfs_public.zip is a container, not an additional feed. IDs are kept separate by feed.

Date interpretation: These dates are copied from feed_start_date and feed_end_date in each archive’s feed_info.txt. They describe declared schedule coverage, not publication dates or historical GPS collection. Bus calendars include three service IDs ending 19 December 2026 and 25 ending 20 February 2027. Rail calendars also retain older entries beginning 23 August 2026, and exception rows reach back to July; those extra rows do not establish complete historical coverage. Individual trips run only on their applicable calendar days and exceptions.

FeedDeclared feed coverageRoute typesStop recordsTrip templatesStop-time rows

Scheduled trips across one week

21–27 September 2026. Calendar rules and date exceptions are applied separately for every service day.

Bus / metro feedRegional Rail feed

Trip starts by service-day hour

First-stop scheduled departures; 24:00 and above remain on the originating service day. Trips with unavailable start times are omitted.

Stop geography

Coordinate plot of all valid stop records; no basemap. Hover over a point for its name. Locations are fixed infrastructure.

Blue: bus / metro · Green: Regional Rail

Route types and accessibility fields

The file named google_bus.zip also includes metro and rail-related services; route_type determines the classifications below.

Wheelchair code 1 means the stop record declares accessibility. Code 0/blank is unspecified, and may inherit from a parent station; code 2 declares no accessibility. These are published attributes, not a field audit.

Explore every route

Daily counts combine directions. Distinct stops are counted across all trip templates in the feed. Median duration uses Monday's active trips, from first-stop departure to last-stop arrival.

RouteNameModeStopsMonTueWedThuFriSatSunMedian min

Data quality and interpretation

Targeted structural checks, not a full GTFS validator. Zero means no issues found by the named check.

CheckBus / metroRegional Rail

Methods and provenance

All results are calculated locally from the supplied ZIP files. Trip templates count rows in trips.txt; they are not a daily total and are not unique vehicles. Scheduled daily trips count templates whose service_id is active after calendar_dates.txt additions and removals. Stop-time rows are scheduled stop calls, not observed arrivals. Stops are feed-specific records, and totals across feeds are not deduplicated geographic places.

The analysis week is fixed to 21–27 September 2026, within both declared feed coverage ranges. It illustrates the supplied timetable only; it is not an annual average. Durations are planned endpoint differences, including intermediate dwell time. No frequency-based expansion is needed: neither archive contains frequencies.txt. No ridership, punctuality, actual travel speed, fleet size, or historical GPS availability is inferred.

Reference: GTFS Schedule specification. This offline report needs no internet connection; the link is for further reading.

File inventory and SHA-256 fingerprints