Skip to content
Documentation

ID Crosswalks

Last updated

A Transitland ID crosswalk maps a Onestop ID to the identifier the same operator or feed carries in another transit data system. Crosswalks let you join Transitland service data to external datasets, such as federal ridership statistics, state ingest pipelines, open knowledge bases, without needing to match on fuzzy properties like agency names or less stable identifiers.

Browse and download the crosswalks.

How crosswalks are stored

Crosswalks are generated from tags stored on operator and feed records in Transitland Atlas. Which record carries the tag depends on what the external identifier identifies: an agency-like record is tagged on the operator, a data file is tagged on the feed.

{
  "onestop_id": "o-c23-metrotransit",
  "name": "King County Metro",
  "tags": { "us_ntd_id": "00001" }
}

The ODPT crosswalk carries a second identifier per row. A feed there is identified by the operator that publishes it (odpt_organization_id) together with the dataset it belongs to (odpt_dataset_id), because the dataset name repeats across operators. The dataset is a trailing odpt_dataset_id column in the CSV, appended after the five columns below.

Some records carry more than one identifier from the same system. For example, an operator covering several NTD reporters, or a feed covering several Cal-ITP realtime datasets. Those are written as a semicolon-separated list in a single tag, and split into one row each on export. A comma is accepted too, since older records use it.

Available crosswalks

CrosswalkTagTagged onStatus
US National Transit Databaseus_ntd_idoperatoractive
Wikidatawikidata_idoperatoractive
Cal-ITP organizationcalitp_organization_idoperatoractive
Cal-ITP datasetcalitp_dataset_idfeedactive
MobilityData Mobility Databasemdb_source_idfeedactive
GTFS Data Exchangegtfs_data_exchangefeedarchival
ODPTodpt_organization_idfeedactive
GTFS Data Repository Japangtfs_data_jp_organization_idoperatoractive
Spanish National Access Pointes_nap_fichero_idfeedactive
OpenMobilityDataomd_provider_idoperatorarchival

We are open to adding new crosswalk IDs in the future. Please open an issue on the Transitland Atlas repository to discuss.

Downloading as CSV

Every crosswalk is exported to a CSV in the Transitland Atlas repository, rebuilt by a scheduled job whenever the tags change, so the file sits in version control beside the records it came from and its history is the history of the tags.

https://raw.githubusercontent.com/transitland/transitland-atlas/main/crosswalks/<name>.csv

The directory is a Frictionless Data Package v2, so the columns, their constraints and the primary key are machine readable rather than only described here:

https://raw.githubusercontent.com/transitland/transitland-atlas/main/crosswalks/datapackage.json

Use the name from the table above. For example, us-ntd.csv. The download button on each crosswalk page opens the same file on GitHub, which previews it as a table.

Columns in the CSV download:

ColumnMeaning
external_idThe identifier in the other system
onestop_idThe Transitland operator or feed
entityoperator or feed
nameOperator name, for readability
relatedOnestop IDs on the other side, semicolon-separated: a tagged operator's feeds, or a tagged feed's operators

There is one row per (external_id, onestop_id) pair, so the file joins directly against either column.

The Wikidata export carries one extra trailing column, wikipedia_url, resolved from the entity's English Wikipedia sitelink.

Querying crosswalks through the APIs

Tags are queryable, so you do not have to download a CSV file to use a crosswalk.

Find the operator holding a particular NTD ID over REST:

curl "https://transit.land/api/v2/rest/operators?tag_key=us_ntd_id&tag_value=40029&apikey=YOUR_API_KEY"

List every operator carrying a Wikidata ID over GraphQL. An empty tag value matches on the key being present, whatever its value:

{
  operators(where: {tags: {wikidata_id: ""}}) {
    onestop_id
    name
    tags
  }
}

The same filter works on feeds for the feed-tagged crosswalks. Note that tag filtering matches an exact value or the presence of a key. It does not do partial or list matching, so an operator tagged "20008,20188" will not match a query for "20008". Fetch by key presence and split client-side when a crosswalk has multi-valued tags.

Licensing

Crosswalks come from Transitland Atlas, which is published under the Creative Commons Attribution 4.0 license. You may use them for commercial, educational or research purposes. To provide the required attribution, link to www.transit.land or the Transitland Atlas repository.

Contributing

Crosswalks are maintained in the open, and contributions are welcome. Open a pull request in the Transitland Atlas repository on Github to add or edit crosswalk IDs on operator or feed records. See how to add or update a feed for the pull request process.