Provide vehicle occupancy data with GTFS

About sources of occupancy data

Across Google Maps, users can find several types of occupancy data, such as: 

  • Vehicle occupancy
  • Station occupancy
  • Carriage occupancy (experimental)

Occupancy data can come from different sources:

  • Vehicle occupancy prioritizes:
    • User's choice. User feedback is displayed as the highest priority.
    • Realtime GTFS data. This is submitted by the transit agency.
    • Google’s internal predictions. These are based on historical crowdedness, user feedback, and more.
  • Station occupancy comes from live visit data or estimation. Learn more about popular times, wait times, and visit duration.
  • Carriage occupancy comes from GTFS data, an experimental field called “occupancy_status” on message CarriageDetails.

Tip: If there's no data from any transit agency or user feedback, Google may provide some estimation.

About occupancy on Google Maps

The following screenshots show how we display the occupancy data from different sources on the Google Maps app.

Occupancy data on trip search results
Image shows a sample trip from "South Line" to "University." In between directions, the directions show or collect occupancy data ("Usually as busy as it gets" or "What's it like on board?").
Occupancy data on the transit layer
Image shows a sample transit page of a "Downtown Station," approaching methods of transport, and ratings of occupancy data for each.
Carriage occupancy on trip search results
Image shows a sample trip from Jamaica to Freeport. With live data, the directions highlight the least crowded cars for an approaching train.
Sources of occupancy data

This table lists each callout number in the screenshots and explains where the crowdedness data comes from.

Number Source of crowdness
1 Station crowdedness
2 Internal predictions Google makes based on historical crowdedness, user feedback, and more
3 entity.vehicle.occupancy_status
4 occupancy_status for message CarriageDetails

Add vehicle occupancy to your realtime GTFS feed

To indicate how crowded a vehicle is, you can provide vehicle occupancy data. This data appears in Google Maps on Android and iOS.

Realtime vehicle crowdedness data is provided by OccupancyStatus, which is a part of the VehiclePositions feed in GTFS-Realtime.

Google Maps interpretation occupancy_status Value Comment
Not crowded
(lots of seats)
EMPTY

The vehicle is considered empty by most measures. It has few or no passengers onboard, but is still accepting passengers.

Crowdedness indicator in Google Maps shows 0:

Not crowded
(lots of seats)
MANY_SEATS_AVAILABLE

The vehicle has a large percentage of seats available. The producer determines the percentage of available seats, out of the total seats available, considered large enough to fall into this category.

Crowdedness indicator in Google Maps shows 0:

Not too crowded (some seats available) FEW_SEATS_AVAILABLE

The vehicle has a small percentage of seats available. The producer determines the percentage of available seats, out of the total seats available, considered small enough to fall into this category.

Crowdedness indicator in Google Maps shows 1:

Crowded
(limited seating and standing)
STANDING_ROOM_ONLY

The vehicle can currently accommodate only standing passengers.

Crowdedness indicator in Google Maps shows 2:

Very crowded (limited standing) CRUSHED_STANDING_ROOM_ONLY

The vehicle can currently accommodate only standing passengers and has limited space for them.

Crowdedness indicator in Google Maps shows 3:

Very crowded (limited standing) FULL

The vehicle is considered full by most measures, but may still allow passengers to board.

Crowdedness indicator in Google Maps shows 3:

At capacity
(not taking passengers)
NOT_ACCEPTING_PASSENGERS

The vehicle can’t accept passengers.

Crowdedness indicator in Google Maps shows none:

 

Guidelines for vehicle occupancy

  • You can provide just a subset of possible values in OccupancyStatus. For example: If only 3 buckets of low, medium, and high are distinguishable in the data, only use MANY_EMPTY_SEATS, FEW_EMPTY_SEATS, and STANDING_ROOM_ONLY.

  • If you can't provide the vehicle position with a VehiclePositions feed but provide an arrival time with a TripUpdates feed, then you can still provide occupancy data with VehiclePositions. If you plan to use the VehiclePositions feed to only provide occupancy data, then reach out to the support team to set up a VehiclePositions feed.

You can work with us to set up your feeds in the Transit partner dashboard so that we have the correct feed to calculate trip estimates.

Related resources

Need more help?

Try these next steps:

Is there something we can help you with?

Chat with a member of Transit team

Search
Clear search
Close search
Google apps
Main menu
6641432199907236833
true
Search Help Center
true
true
true