Skip to content
Warbler

When is my
bus actually
coming?

Turn your vehicle feed into arrival predictions riders can act on. Then measure every prediction against the arrival that actually happened.

Built by TransitOPS.

A CLEARER ANSWER AT THE STOPIllustrative data
Market St & 3rdNorthbound departures
12 Riverside

4min

Predicted from vehicle positions

Next departure 31 · Airport9 min
Every reported vehicle position updates the prediction for the stops ahead.
Your feeds in. Clearer arrivals out. GTFS + vehicle positions GTFS-Realtime predictions Accuracy you can check

The wait is easier
when you can plan for it.

  • No predictionI don’t know when the bus is coming.
  • A bad predictionIt said five minutes. Then it disappeared.
  • A reliable predictionI know when to leave.

Two feeds in.
A better answer out.

Warbler connects your schedule to what buses are doing now, then updates arrival predictions as each position comes in.

  1. Find the trip behind the bus.

    Match a vehicle’s track to its scheduled block, even when the incoming position has no trip attached.

  2. Learn the street, stop by stop.

    Combine each trip’s historical travel times with what vehicles on the same street are reporting now.

    How the estimate adapts

    A Kalman filter weighs history against current observations. Real congestion moves the estimate; one stray GPS reading does not.

  3. Be clear when data is missing.

    Fall back to the schedule with wider uncertainty. Cancel trips on untracked blocks more than ten minutes past their start.

    Why the fallback matters

    A bus that disappears from the board costs riders trust. Schedule-based predictions carry wide uncertainty rather than false precision. If nothing runs a block more than ten minutes after its start, Warbler cancels its trips.

  4. Publish on every update.

    Rebuild predictions as positions arrive. Publish GTFS-Realtime TripUpdates and JSON for the channels riders already use.

GTFS scheduleWhat should happen
Vehicle positionsWhat is happening
Warbler

Match the trip → estimate the arrival

Arrival predictions

GTFS-Realtime TripUpdates + JSON

Predictions update with each reported position. The timetable provides a fallback when no vehicle is tracking the block.

Every prediction is recorded and compared with the observed arrival. The result is evidence you can inspect.

Don’t take accuracy
on faith. Check it.

A late bus and a wrong prediction are different problems. Warbler records both, so you can see what riders were told and what happened.

One prediction, checkedIllustrative · Route 12
  1. ScheduledFrom the timetable
  2. PredictedMade at 16:41 from vehicle data
  3. ArrivedObserved at the stop
20 s

Prediction error
The bus ran 4 min 20 s late.

Example values, not measured product performance. Warbler stores both predictions and observed arrivals.
What counts as an accurate prediction?
Time until arrival
when predicted
Allowed
early
Allowed
late
0–3 minutes30 s90 s
3–6 minutes60 s150 s
6–10 minutes60 s210 s
10–15 minutes90 s270 s

Early tolerances are tighter on purpose: a bus that arrives sooner than predicted is the one a rider can miss.

Predictions made more than 15 minutes out are stored, but not scored.

Find the weak stop.

See accuracy by route, stop, and hour. A weak segment stays visible instead of disappearing into a system-wide average.

Replay the same day.

Run past vehicle positions through the engine. Change something, replay the same traffic, and compare the results.

Compare your current feed.

Score the feed you publish today against the same stops and hours. Check the difference before changing anything.

Better information.
Same familiar apps.

Publish to the channels riders and staff already use. Trip planners that read GTFS-Realtime can consume the feed; your other systems can use JSON.

  • Trip plannersGTFS-Realtime TripUpdates
  • Station signsPredictions on display
  • Agency appsArrivals through JSON
  • Operations toolsVehicle and prediction data
View feed and API details

TripUpdates are published as protobuf, JSON, or plain text. JSON supports station signs, on-board displays, phone systems, agency apps, and dashboards. Keys are scoped to an organization, route filters control publication, and endpoints include an OpenAPI description.

GET /api/real-time/{agency}/gtfs-rt-trip-updates
GET /api/real-time/{agency}/predictions
GET /api/real-time/{agency}/vehicles
GET /api/info/{agency}/routes
GET /api/openapi

Bring a route you
already argue about.

Run Warbler beside your current feed and compare the results on your own routes.

  • A GTFS schedule feedOne URL. Service changes are picked up on the polling interval you set.
  • A vehicle positions feedOne GTFS-Realtime URL, plus request headers if needed. Warbler handles trip assignment.

That’s the starting point. No platform to adopt, no system to replace, and nothing else to buy first.