Microproduct data guideintermediate

Mobility Database GTFS Feeds

A global catalog of GTFS and related mobility feeds for building transit-feed finders that respect each agency's license.

At a glance

Difficulty
Intermediate — some data preparation helps
Size
Small · ≤0.1 GB
Formats
JSON
Access
API
API key
Required
Provider
MobilityData
Updates
Continuous

From source to product signal

Test a product idea in four steps

The Mobility Database API lists GTFS, GTFS Realtime, and GBFS feeds with provider, geography, and license metadata. Start by searching active GTFS schedule feeds for one country. Catalog metadata is CC0; each feed's contents remain under that agency's license, so do not download or redistribute a feed until you read its license URL.

1

Check the setup

  • Python 3.10 or newer
  • A notebook environment such as Jupyter or Google Colab
  • A free Mobility Database access token saved in the MOBILITY_DATABASE_ACCESS_TOKEN environment variable
2

Access the data

  1. 1.Create a Mobility Database account, copy an access token, and save it in MOBILITY_DATABASE_ACCESS_TOKEN.
  2. 2.Read the terms covering catalog metadata versus individual feed licenses.
  3. 3.Request a bounded list of GTFS feeds for one country and print each license URL.
Open official source
3

Run the Python example

Install the packages, then run the notebook cell.

python -m pip install pandas requests

import os
import pandas as pd
import requests

response = requests.get(
    "https://api.mobilitydatabase.org/v1/gtfs_feeds",
    headers={
        "Authorization": f"Bearer {os.environ['MOBILITY_DATABASE_ACCESS_TOKEN']}",
    },
    params={"limit": 20, "offset": 0, "country_code": "US", "status": "active"},
    timeout=30,
)
response.raise_for_status()
payload = response.json()
feeds = pd.json_normalize(payload if isinstance(payload, list) else payload.get("results", payload))
feeds["retrieved_at_utc"] = pd.Timestamp.now(tz="UTC")
license_col = next(
    (column for column in feeds.columns if "license" in column.lower()),
    feeds.columns[0],
)
print(feeds[[column for column in ["id", "provider", "status", license_col] if column in feeds.columns]].head(20))
4

Test a useful signal

Find licensed GTFS feeds for one country

List a bounded set of cataloged GTFS feeds and record each feed's license URL before any download.

  1. 01Confirm the API returned feed identifiers and provider names for the bounded request.
  2. 02Print each feed's license URL or license field and keep only feeds whose terms you have read.
  3. 03State that MobilityData catalog metadata is CC0 while feed contents remain under each agency's license.

Dataset details

MobilityData is a nonprofit source. Last verified 2026-08-14. Temporal coverage: continuously updated feed catalog.

Theme

Geospatial & Infrastructure

Domains

Public TransitTransportationMobility

Data types

Registry DataGeospatial

Tasks

Feed DiscoveryOperational PlanningMapping

Geography

Global

Formats

JSON

Provider

MobilityData

Data terms

MobilityData catalog metadata CC0; individual feeds licensed by agencies