Mobility / Live public-transport vehicle positions
Tbilisi GTFS-Realtime bus and minibus vehicle positions
A community-operated GTFS-Realtime v2.0 feed listed by Transitous publishes timestamped positions for ordinary Tbilisi buses and municipal minibuses. It supplies route and vehicle IDs, WGS84 coordinates, bearing, a per-vehicle observation timestamp, service date, and sometimes a stop and trip ID. During validation every entity was a VehiclePosition; no metro, gondola, TripUpdate or Alert entities were present.
Provenance and access
How the data is reached
Unauthenticated GTFS-Realtime v2.0 FeedMessage over HTTP. Decode with official GTFS-Realtime Protocol Buffer bindings. The source is HTTP-only; HTTPS failed during validation.
No license is declared in the Transitous configuration for this realtime source
Raw GTFS-Realtime feed
http://vm-gtfs.spline.de/gtfs-rt.pb ↗- Method
- GET
- Format
- GTFS-Realtime v2.0 Protocol Buffer
- Authentication
- None
HTTP only; no published rate limit
Transitous source configuration
https://github.com/public-transport/transitous/blob/master/feeds/ge.json ↗- Method
- GET
- Format
- JSON source configuration
- Authentication
- None
GTFS-Realtime reference
https://gtfs.org/documentation/realtime/reference/ ↗- Method
- GET
- Format
- HTML documentation
- Authentication
- None
Field-level detail
What is actually returned
Feed header
Feed-wide GTFS-Realtime metadata.
| Field / path | Type | Null? | Example | Meaning | Freshness |
|---|---|---|---|---|---|
header.gtfsRealtimeVersion | string | No | 2.0 | GTFS-Realtime schema version | reference |
header.incrementality | enum | No | FULL_DATASET | Each response replaces the previous full state | reference |
header.timestamp | uint64 Unix seconds | No | 1784713133 | Feed generation time2026-07-22 13:38:53 Asia/Tbilisi in the tested response | live |
VehiclePosition entity
One observed bus or minibus and its current location.
| Field / path | Type | Null? | Example | Meaning | Freshness |
|---|---|---|---|---|---|
entity[].id | string | No | 1:2056 | Feed entity identifierSame as vehicle ID in the sample | live |
entity[].vehicle.trip.startDate | YYYYMMDD string | No | 20260722 | Trip service day | reference |
entity[].vehicle.trip.routeId | string | No | 1:R97622 | Route ID matching static GTFS1:minibus… prefix identifies minibus routes | reference |
entity[].vehicle.trip.tripId | string | Yes | Exact scheduled-trip identifier when matchedNon-empty for 537 of 1,275 entities | reference | |
entity[].vehicle.position.latitude | float | No | 41.70671463012695 | Current WGS84 latitude | live |
entity[].vehicle.position.longitude | float | No | 44.80546569824219 | Current WGS84 longitude | live |
entity[].vehicle.position.bearing | float | No | 346.525146484375 | Heading in degrees clockwise from north | live |
entity[].vehicle.timestamp | uint64 Unix seconds | No | 1784713117 | Vehicle position observation time16 seconds behind the feed header in the sample | live |
entity[].vehicle.stopId | string | Yes | 1:1726 | Current or next associated stop according to the producerBlank for 458 of 1,275 entities; exact semantics undocumented | live |
entity[].vehicle.vehicle.id | string | No | 1:2056 | Public-service vehicle identifier | live |
Standard VehiclePosition fields not populated
Fields defined by GTFS-Realtime but absent in every tested entity.
| Field / path | Type | Null? | Example | Meaning | Freshness |
|---|---|---|---|---|---|
position.speed | float | Yes | absent | Vehicle speed | live |
position.odometer | double | Yes | absent | Vehicle odometer | live |
currentStopSequence / currentStatus | integer / enum | Yes | absent | Stop progression state | live |
congestionLevel | enum | Yes | absent | Traffic congestion state | live |
occupancyStatus / occupancyPercentage | enum / integer | Yes | absent | Passenger crowding or occupancy | live |
vehicle.label / licensePlate / wheelchairAccessible | string / enum | Yes | absent | Additional vehicle descriptors | reference |
Representative evidence
Sample records
Decoded VehiclePosition
Retrieved 2026-07-22 13:38:53 Asia/Tbilisi
{
"id": "1:2056",
"vehicle": {
"trip": {"startDate": "20260722", "routeId": "1:R97622"},
"position": {"latitude": 41.70671463012695, "longitude": 44.80546569824219, "bearing": 346.525146484375},
"timestamp": "1784713117",
"stopId": "1:1726",
"vehicle": {"id": "1:2056"}
}
}JSON rendering of a Protocol Buffer entity decoded with official GTFS-Realtime bindings
Boundaries
Reliability, caveats, and privacy
What held up
- Two live responses three seconds apart changed from 1,275 to 1,274 entities
- Header and per-vehicle timestamps were current at retrieval
- The feed is FULL_DATASET, so consumers must replace state instead of appending
What can go wrong
- Community-hosted and HTTP-only, creating integrity and uptime risks
- No stated reuse license or published rate limit
- stopId and tripId are often blank
- No speed, occupancy, congestion, accessibility or position-accuracy fields
- No metro or gondola positions, TripUpdates or Alerts were observed
Privacy boundary
- Vehicle IDs identify public-service vehicles, not riders
- No passenger identity or occupancy values are present
Source trail
Primary pages and documentation
http://vm-gtfs.spline.de/gtfs-rt.pb- DocumentationTransitous Georgia source configuration ↗
https://github.com/public-transport/transitous/blob/master/feeds/ge.json - DocumentationGTFS-Realtime reference ↗
https://gtfs.org/documentation/realtime/reference/