[{"data":1,"prerenderedAt":640},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fatlas\u002Fid-crosswalks":3,"_apollo:default":636,"_apollo:stationEditor":637,"_apollo:feedManagement":638,"_apollo:transferAnalyst":639},{"id":4,"title":5,"body":6,"description":627,"extension":628,"meta":629,"navigation":630,"path":631,"seo":632,"stem":633,"__hash__":634,"lastUpdated":635},"content\u002Fdocs\u002Fatlas\u002Fid-crosswalks.md","ID Crosswalks",{"type":7,"value":8,"toc":619},"minimark",[9,19,26,31,39,114,128,131,135,334,337,341,344,352,362,368,383,386,453,462,469,473,476,479,495,498,565,580,584,603,607,615],[10,11,12,13,18],"p",{},"A Transitland ID crosswalk maps a ",[14,15,17],"a",{"href":16},"\u002Fdocumentation\u002Fconcepts\u002Fonestop-id-scheme","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.",[10,20,21,25],{},[14,22,24],{"href":23},"\u002Fdata\u002Fid-crosswalks","Browse and download the crosswalks",".",[27,28,30],"h2",{"id":29},"how-crosswalks-are-stored","How crosswalks are stored",[10,32,33,34,38],{},"Crosswalks are generated from tags stored on operator and feed records in ",[14,35,37],{"href":36},"\u002Fdocumentation\u002Fatlas","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.",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-json shiki shiki-themes github-light github-dark","{\n  \"onestop_id\": \"o-c23-metrotransit\",\n  \"name\": \"King County Metro\",\n  \"tags\": { \"us_ntd_id\": \"00001\" }\n}\n","json","",[47,48,49,58,75,88,108],"code",{"__ignoreMap":45},[50,51,54],"span",{"class":52,"line":53},"line",1,[50,55,57],{"class":56},"sVt8B","{\n",[50,59,61,65,68,72],{"class":52,"line":60},2,[50,62,64],{"class":63},"sj4cs","  \"onestop_id\"",[50,66,67],{"class":56},": ",[50,69,71],{"class":70},"sZZnC","\"o-c23-metrotransit\"",[50,73,74],{"class":56},",\n",[50,76,78,81,83,86],{"class":52,"line":77},3,[50,79,80],{"class":63},"  \"name\"",[50,82,67],{"class":56},[50,84,85],{"class":70},"\"King County Metro\"",[50,87,74],{"class":56},[50,89,91,94,97,100,102,105],{"class":52,"line":90},4,[50,92,93],{"class":63},"  \"tags\"",[50,95,96],{"class":56},": { ",[50,98,99],{"class":63},"\"us_ntd_id\"",[50,101,67],{"class":56},[50,103,104],{"class":70},"\"00001\"",[50,106,107],{"class":56}," }\n",[50,109,111],{"class":52,"line":110},5,[50,112,113],{"class":56},"}\n",[10,115,116,117,120,121,124,125,127],{},"The ODPT crosswalk carries a second identifier per row. A feed there is identified by the operator that publishes it (",[47,118,119],{},"odpt_organization_id",") together with the dataset it belongs to (",[47,122,123],{},"odpt_dataset_id","), because the dataset name repeats across operators. The dataset is a trailing ",[47,126,123],{}," column in the CSV, appended after the five columns below.",[10,129,130],{},"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.",[27,132,134],{"id":133},"available-crosswalks","Available crosswalks",[136,137,138,157],"table",{},[139,140,141],"thead",{},[142,143,144,148,151,154],"tr",{},[145,146,147],"th",{},"Crosswalk",[145,149,150],{},"Tag",[145,152,153],{},"Tagged on",[145,155,156],{},"Status",[158,159,160,180,197,214,232,249,267,283,300,317],"tbody",{},[142,161,162,169,174,177],{},[163,164,165],"td",{},[14,166,168],{"href":167},"\u002Fdata\u002Fid-crosswalks\u002Fus-ntd","US National Transit Database",[163,170,171],{},[47,172,173],{},"us_ntd_id",[163,175,176],{},"operator",[163,178,179],{},"active",[142,181,182,188,193,195],{},[163,183,184],{},[14,185,187],{"href":186},"\u002Fdata\u002Fid-crosswalks\u002Fwikidata","Wikidata",[163,189,190],{},[47,191,192],{},"wikidata_id",[163,194,176],{},[163,196,179],{},[142,198,199,205,210,212],{},[163,200,201],{},[14,202,204],{"href":203},"\u002Fdata\u002Fid-crosswalks\u002Fcalitp-organization","Cal-ITP organization",[163,206,207],{},[47,208,209],{},"calitp_organization_id",[163,211,176],{},[163,213,179],{},[142,215,216,222,227,230],{},[163,217,218],{},[14,219,221],{"href":220},"\u002Fdata\u002Fid-crosswalks\u002Fcalitp-dataset","Cal-ITP dataset",[163,223,224],{},[47,225,226],{},"calitp_dataset_id",[163,228,229],{},"feed",[163,231,179],{},[142,233,234,240,245,247],{},[163,235,236],{},[14,237,239],{"href":238},"\u002Fdata\u002Fid-crosswalks\u002Fmobility-database","MobilityData Mobility Database",[163,241,242],{},[47,243,244],{},"mdb_source_id",[163,246,229],{},[163,248,179],{},[142,250,251,257,262,264],{},[163,252,253],{},[14,254,256],{"href":255},"\u002Fdata\u002Fid-crosswalks\u002Fgtfs-data-exchange","GTFS Data Exchange",[163,258,259],{},[47,260,261],{},"gtfs_data_exchange",[163,263,229],{},[163,265,266],{},"archival",[142,268,269,275,279,281],{},[163,270,271],{},[14,272,274],{"href":273},"\u002Fdata\u002Fid-crosswalks\u002Fodpt","ODPT",[163,276,277],{},[47,278,119],{},[163,280,229],{},[163,282,179],{},[142,284,285,291,296,298],{},[163,286,287],{},[14,288,290],{"href":289},"\u002Fdata\u002Fid-crosswalks\u002Fgtfs-data-jp","GTFS Data Repository Japan",[163,292,293],{},[47,294,295],{},"gtfs_data_jp_organization_id",[163,297,176],{},[163,299,179],{},[142,301,302,308,313,315],{},[163,303,304],{},[14,305,307],{"href":306},"\u002Fdata\u002Fid-crosswalks\u002Fes-nap","Spanish National Access Point",[163,309,310],{},[47,311,312],{},"es_nap_fichero_id",[163,314,229],{},[163,316,179],{},[142,318,319,325,330,332],{},[163,320,321],{},[14,322,324],{"href":323},"\u002Fdata\u002Fid-crosswalks\u002Fomd","OpenMobilityData",[163,326,327],{},[47,328,329],{},"omd_provider_id",[163,331,176],{},[163,333,266],{},[10,335,336],{},"We are open to adding new crosswalk IDs in the future. Please open an issue on the Transitland Atlas repository to discuss.",[27,338,340],{"id":339},"downloading-as-csv","Downloading as CSV",[10,342,343],{},"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.",[40,345,350],{"className":346,"code":348,"language":349},[347],"language-text","https:\u002F\u002Fraw.githubusercontent.com\u002Ftransitland\u002Ftransitland-atlas\u002Fmain\u002Fcrosswalks\u002F\u003Cname>.csv\n","text",[47,351,348],{"__ignoreMap":45},[10,353,354,355,361],{},"The directory is a ",[14,356,360],{"href":357,"rel":358},"https:\u002F\u002Fdatapackage.org\u002F",[359],"nofollow","Frictionless Data Package"," v2, so the columns, their constraints and the primary key are machine readable rather than only described here:",[40,363,366],{"className":364,"code":365,"language":349},[347],"https:\u002F\u002Fraw.githubusercontent.com\u002Ftransitland\u002Ftransitland-atlas\u002Fmain\u002Fcrosswalks\u002Fdatapackage.json\n",[47,367,365],{"__ignoreMap":45},[10,369,370,371,374,375,382],{},"Use the ",[47,372,373],{},"name"," from the table above. For example, ",[14,376,379],{"href":377,"rel":378},"https:\u002F\u002Fgithub.com\u002Ftransitland\u002Ftransitland-atlas\u002Fblob\u002Fmain\u002Fcrosswalks\u002Fus-ntd.csv",[359],[47,380,381],{},"us-ntd.csv",". The download button on each crosswalk page opens the same file on GitHub, which previews it as a table.",[10,384,385],{},"Columns in the CSV download:",[136,387,388,398],{},[139,389,390],{},[142,391,392,395],{},[145,393,394],{},"Column",[145,396,397],{},"Meaning",[158,399,400,410,420,434,443],{},[142,401,402,407],{},[163,403,404],{},[47,405,406],{},"external_id",[163,408,409],{},"The identifier in the other system",[142,411,412,417],{},[163,413,414],{},[47,415,416],{},"onestop_id",[163,418,419],{},"The Transitland operator or feed",[142,421,422,427],{},[163,423,424],{},[47,425,426],{},"entity",[163,428,429,431,432],{},[47,430,176],{}," or ",[47,433,229],{},[142,435,436,440],{},[163,437,438],{},[47,439,373],{},[163,441,442],{},"Operator name, for readability",[142,444,445,450],{},[163,446,447],{},[47,448,449],{},"related",[163,451,452],{},"Onestop IDs on the other side, semicolon-separated: a tagged operator's feeds, or a tagged feed's operators",[10,454,455,456,458,459,461],{},"There is one row per (",[47,457,406],{},", ",[47,460,416],{},") pair, so the file joins directly against either column.",[10,463,464,465,468],{},"The Wikidata export carries one extra trailing column, ",[47,466,467],{},"wikipedia_url",", resolved from the entity's English Wikipedia sitelink.",[27,470,472],{"id":471},"querying-crosswalks-through-the-apis","Querying crosswalks through the APIs",[10,474,475],{},"Tags are queryable, so you do not have to download a CSV file to use a crosswalk.",[10,477,478],{},"Find the operator holding a particular NTD ID over REST:",[40,480,484],{"className":481,"code":482,"language":483,"meta":45,"style":45},"language-bash shiki shiki-themes github-light github-dark","curl \"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv2\u002Frest\u002Foperators?tag_key=us_ntd_id&tag_value=40029&apikey=YOUR_API_KEY\"\n","bash",[47,485,486],{"__ignoreMap":45},[50,487,488,492],{"class":52,"line":53},[50,489,491],{"class":490},"sScJk","curl",[50,493,494],{"class":70}," \"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv2\u002Frest\u002Foperators?tag_key=us_ntd_id&tag_value=40029&apikey=YOUR_API_KEY\"\n",[10,496,497],{},"List every operator carrying a Wikidata ID over GraphQL. An empty tag value matches on the key being present, whatever its value:",[40,499,503],{"className":500,"code":501,"language":502,"meta":45,"style":45},"language-graphql shiki shiki-themes github-light github-dark","{\n  operators(where: {tags: {wikidata_id: \"\"}}) {\n    onestop_id\n    name\n    tags\n  }\n}\n","graphql",[47,504,505,509,539,544,549,554,560],{"__ignoreMap":45},[50,506,507],{"class":52,"line":53},[50,508,57],{"class":56},[50,510,511,515,518,521,524,527,529,531,533,536],{"class":52,"line":60},[50,512,514],{"class":513},"s4XuR","  operators",[50,516,517],{"class":56},"(",[50,519,520],{"class":513},"where",[50,522,523],{"class":56},": {",[50,525,526],{"class":70},"tags",[50,528,523],{"class":56},[50,530,192],{"class":70},[50,532,67],{"class":56},[50,534,535],{"class":70},"\"\"",[50,537,538],{"class":56},"}}) {\n",[50,540,541],{"class":52,"line":77},[50,542,543],{"class":513},"    onestop_id\n",[50,545,546],{"class":52,"line":90},[50,547,548],{"class":513},"    name\n",[50,550,551],{"class":52,"line":110},[50,552,553],{"class":513},"    tags\n",[50,555,557],{"class":52,"line":556},6,[50,558,559],{"class":56},"  }\n",[50,561,563],{"class":52,"line":562},7,[50,564,113],{"class":56},[10,566,567,568,571,572,575,576,579],{},"The same filter works on ",[47,569,570],{},"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 ",[47,573,574],{},"\"20008,20188\""," will not match a query for ",[47,577,578],{},"\"20008\"",". Fetch by key presence and split client-side when a crosswalk has multi-valued tags.",[27,581,583],{"id":582},"licensing","Licensing",[10,585,586,587,592,593,431,598,25],{},"Crosswalks come from Transitland Atlas, which is published under the ",[14,588,591],{"href":589,"rel":590},"https:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby\u002F4.0\u002F",[359],"Creative Commons Attribution 4.0"," license. You may use them for commercial, educational or research purposes. To provide the required attribution, link to ",[14,594,597],{"href":595,"rel":596},"https:\u002F\u002Fwww.transit.land",[359],"www.transit.land",[14,599,602],{"href":600,"rel":601},"https:\u002F\u002Fgithub.com\u002Ftransitland\u002Ftransitland-atlas",[359],"the Transitland Atlas repository",[27,604,606],{"id":605},"contributing","Contributing",[10,608,609,610,614],{},"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 ",[14,611,613],{"href":612},"\u002Fdocumentation\u002Fatlas#how-to-add-a-new-feed","how to add or update a feed"," for the pull request process.",[616,617,618],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":45,"searchDepth":60,"depth":60,"links":620},[621,622,623,624,625,626],{"id":29,"depth":60,"text":30},{"id":133,"depth":60,"text":134},{"id":339,"depth":60,"text":340},{"id":471,"depth":60,"text":472},{"id":582,"depth":60,"text":583},{"id":605,"depth":60,"text":606},"Crosswalks between Transitland Onestop IDs and identifiers used by other transit data systems, including the US National Transit Database, Wikidata and Cal-ITP.","md",{},true,"\u002Fdocs\u002Fatlas\u002Fid-crosswalks",{"title":5,"description":627},"docs\u002Fatlas\u002Fid-crosswalks","Gpxe0kSXqAccBVjjLDAMsFyJ0Wl6sLdQPjnQuk6veyY","2026-10-16T20:03:59-07:00",{},{},{},{},1792668196226]