Launch process

Choose a data submission method

Once you have a feed that is syntactically valid (even if it does not contain any data), you’re ready to set up the method you’ll use to provide your data to Google.

You can deliver realtime transit data one of two ways: fetch, which allows Google to retrieve your data from a web-location, or push, which allows you to upload your data programmatically.

If you can't provide your data via the fetch or push methods, you can manually enter service alerts via the Service Alerts Editor in your Transit partner dashboard.


With fetch delivery, you host each of your realtime feeds at their own web-location and Google pulls the data from this location every 30 seconds. You can make your feed data available to Google in two ways:

  1. Host your GTFS-realtime feed on a web server

  2. Use a web application server to generate and serve your data


Push delivery allows you to periodically provide (or “push”) your data to Google programmatically. With push programmatic upload, you set up automatic uploads of your GTFS-realtime via HTTP POST, using OAuth2.0 authentication to ensure the security of your realtime feed.

To provide users with the most accurate and up-to-date transit information possible, we recommend that you push realtime updates frequently. Ideally, you should push trip update data every 30 seconds, and service alert data every 30 seconds to two minutes.

Note: you don't need to create new API or client IDs for push uploads.

Implementing programmatic upload with OAuth2.0 authentication

You should use an HTTP POST request to upload to the partnerdash.

The curl equivalent is:

curl \

--header "authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-F "alkali_application_name=transit" \
-F "alkali_account_id=[your account id (*)]" \
-F "alkali_upload_type=realtime_push_upload" \
-F "alkali_application_id=100003100" \
-F "realtime_feed_id=[your realtime feed_name e.g. us-myfeed-updates]" \
-F "file=@/path/to/file" \


(*) The account id is the value of the 'a' parameter in the URL of your Transit Partner Dashboard


The push uploads url is:

Was this article helpful?
How can we improve it?