Product

Stop firefighting your GTFS

Continuous GTFS lets you transform, validate, and collaborate on your agency's GTFS data so you publish higher-quality feeds, more reliably, with less staff effort. Your scheduling vendor's raw export in – a clean, validated feed your riders can trust, out.

schedule feed valid
last run 0.9s · 178,485 rows
transforms 7 steps · 11 ms
canonical check 0 errors
staging → prod promote-only

You shouldn't have to be scrappy to publish high-quality GTFS

A set of scripts on your laptop, a scramble before every service change, and when something slips, your riders notice before you do. You've kept it running – you shouldn't have to keep doing it this way.

Stop scrambling, start building

The same work, as a pipeline your team owns end to end.

Today: scrappy & ad hoc

A pile of one-off scripts, broken feeds and spec errors: stop_times.txt, hack_v2_FINAL.py, ⚠ 214 spec errors, feed_BROKEN.zip, manual_upload.sh, @#?!, fix_calendar.py, clean_stops.py.

One person's scramble, before every service change.

With Continuous GTFS: routine & reliable

  1. Ingest your vendor's feed
  2. Transform with rules you own
  3. Validate against the canonical spec
  4. Review & sign off as a team
  5. Publish staged to CDN
  6. Valid feed live – riders get correct data

Publish GTFS to be proud of

Transform

Bring the scripts off your laptop. Your feed-processing rules run automatically on every upstream change, in one place the whole team can work in.

Validate

Every run is checked against the canonical MobilityData spec, on input and output. Nothing broken reaches production – a staging gate stands in front of your live feed.

Collaborate

A review-and-sign-off step before you publish: see the validation results and a plain-language summary of what's in the feed – trips per day, per route – so more than one person can stand behind it.

Your rules are code you own

The platform fetches from your upstream sources, runs your rules, validates against the canonical spec, and publishes through a staging gate to a CDN – continuously, on every upstream change. Every run is logged, diffable, and reversible.

Not a GTFS editor – you don't hand-author feeds or key in individual detours. It applies your automated rules to the data you already produce.

transforms/strip_rt_suffix.py committed · v0.31
@step
def strip_rt_suffix(feed):
    """Trip IDs arrive with a vendor
    suffix the realtime feed omits."""
    feed.trips["trip_id"] = (
        feed.trips["trip_id"]
            .str.removesuffix("-RT")
    )
    return feed

Trusted by a high-performing transit team

Running in production at a major Pacific Northwest regional transit agency, validated against real agency data.

~20,000
production pipeline runs
<1s
178K-row feed, end to end
100%
promote-only production

Built by the team behind some of the largest open transit data efforts in the country. Open-source core, so the pipeline is yours to keep, with or without us.

Cal-ITP statewide GTFS
MBTA V3 API
MobilityData GTFS Validator

Walk us through how your GTFS gets from your scheduling system to your riders

Fifteen minutes.

Photo of Charlie Costanzo

Charlie Costanzo · Data Strategy Practice Lead

Email us directly at transit@jarv.us