Texas tolls: how to maintain

Files: /srv/toll/draft/TX, last built 2026-10-10 08:58 ET · the TX toll page · map test · facts below are read from the files each time this page is built (python3 /home/geo1/system/handbuilt/maintain_pages.py TX)

Procedure for this state

Texas, built in parts (tx_state.py runs tx_ntta.py, tx_houston.py, tx_central.py, tx_other.py, tx_bridges.py, tx_express.py). Accepted tags: TxDOT's area pages ('TxTag, EZ TAG, TollTag, KTAG, PIKEPASS, ExpressToll, and SunPass').

When to check

Rebuild

bash chain.sh TX (long: 4.3 million ways).

Watch out

The chain every state shares

Hosts: geo1 (192.168.50.220) holds the sources, builders, drafts, map and API; b100 (192.168.50.14) is the test client. All times are Eastern.

whatwhere (geo1 unless said)
sources list/home/geo1/maps/toll/TX/urls.txt (name <tab> URL)
archived sources/home/geo1/maps/toll/TX/sources/<name>/<YYYY-MM-DD>/ (file + meta.json: url, fetched, sha256)
builder/home/geo1/system/handbuilt/tx_state.py; shared code toll_common.py
OpenStreetMap inputs/home/geo1/system/handbuilt/osm/tx_* (cut from /home/geo1/maps/osm/us-latest.osm.pbf)
outputdraft /srv/toll/draft/TX/ (the builders write here); published /srv/toll/TX/ (copied from the draft by promote.py publish). The map and the API read the published page, or the draft while it is listed for review
toll enginesource /home/geo1/maps/web/tolls.js, served copy /srv/maps/tolls.js (the API runs the served copy)
API/home/geo1/maps/api/server.mjs on 127.0.0.1:8090 behind nginx /api/; pid in logs/test.pid
regression tripsb100: ~/apitest/site/cases.json, runner ~/apitest/run.py, browser check ~/apitest/browser.mjs

1. Refresh a source

  1. Fetch into a new dated folder: python3 /home/geo1/system/handbuilt/fetch_list.py TX [name ...] (no names = every line of urls.txt). A new source: add a line to urls.txt first, then fetch it by name.
  2. A site that refuses geo1 (HTTP 403) or scripts: fetch it on b100 in headless Chrome with node ~/apitest/fetch_b100.mjs <out> <name>=<url> ..., then rsync -a <out>/ geo1@192.168.50.220:/home/geo1/maps/toll/TX/sources/. Its meta.json records that it came from b100.
  3. Compare the new file with the previous dated one (diff, pdftotext -layout for PDFs). Same content: nothing to do. Changed amounts or a new effective date: rebuild (step 2) and update the expected amounts of the affected regression trips from the operator's own figures.

1b. The corpus (NJ, PA, VA start from it; DE is published from it)

python3 /home/geo1/maps/toll/bin/tollup.py TX update fetches the adapter's sources (bin/adapters/tx.py), stores a document only when its content changes, writes one rate file per version under /home/geo1/maps/toll/TX/rates/ and appends every price change to history.csv (every run to runs.log). TOLL_WEB=/home/geo1/maps/toll/corpus python3 /home/geo1/maps/toll/bin/publish.py TX writes the corpus /home/geo1/maps/toll/corpus/TX from it (DE: plain publish.py DE writes /srv/toll/DE). Never hand-edit either. Then rebuild the draft (step 2) so it picks up the new rates.

2. Rebuild

3. Load it into the API and test from b100

  1. The API reads the toll pages and tolls.js when it starts. Restart it: cd /home/geo1/maps/api && kill $(cat logs/test.pid); (nohup /home/geo1/maps/node/bin/node server.mjs > logs/server.log 2>&1 & echo $! > logs/test.pid) (it is started by hand, not a service).
  2. From b100 only: python3 ~/apitest/run.py ~/apitest/site/cases.json. Every trip must be OK. Add a trip for every rate or rule you change, with the amount taken from the operator's own source.
  3. Engine change (tolls.js): edit /home/geo1/maps/web/tolls.js, check with /home/geo1/maps/node/bin/node --check, copy to /srv/maps/tolls.js with sudo install -o www-data -g www-data -m 644, restart the API, run the trips.

4. OpenStreetMap refresh (all states at once)

The builders match toll points to the OSM way ids the router drives, so the extracts here must come from the same us-latest.osm.pbf the router (Valhalla, /home/geo1/maps/valhalla_data) was built from (now 2026-09-27). New OSM data means: rebuild the router tiles, then for each state cut the box, rebuild its OSM inputs and run the full chain, then compare untied_toll_nodes.csv and the estimated positions below. The box for TX and the cutting commands are in the state's procedure above; the toll-node and way index comes from python3 tollnode_ways.py TX.

5. Publish

A rebuild writes the draft (/srv/toll/draft/TX); the published page (/srv/toll/TX) does not change. python3 /home/geo1/maps/toll/bin/promote.py review TX lists the draft for review: the map and the API then read it instead of the published page. Run the regression trips from b100. After approval, python3 /home/geo1/maps/toll/bin/promote.py publish TX copies the draft to /srv/toll/TX (the previous page is kept under /home/geo1/maps/toll/TX/published/<time>/) and takes it off the review list. After a change, update the coverage line for TX in the API page (/api.html, generator /home/geo1/maps/api/doc/api_page.py) and rebuild this page: python3 /home/geo1/system/handbuilt/maintain_pages.py TX.

Sources (28)

Each fetch is kept in its own dated folder under /home/geo1/maps/toll/TX/sources/<name>/; the builder always reads the newest one, so a new fetch takes effect at the next rebuild and the old one stays for comparison.

sourcefetched (newest)fetches kepthowlisted in urls.txtrows using it
anzalduas_bridge_tolls
https://www.mcallen.net/departments/bridge/anzalduas
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes7
ccibs_toll_rates
https://www.ccibstx.us/toll-rates
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes41
ccrma_toll_rates
https://ccrma.org/wp-content/uploads/2026/08/CCRMA-Toll-Rates.pdf
2026-10-101fetched on b100 (192.168.50.14)yes41
crrma_border_west
https://www.crrma.org/past-projects/border-west-expressway-loop-375-toll-lanes
2026-10-101fetched on b100 (192.168.50.14)yes
crrma_cesar_chavez
https://www.crrma.org/past-projects/cesar-chavez
2026-10-101fetched on b100 (192.168.50.14)yes
ctrma_mopac_express
https://www.mobilityauthority.com/traveler-info/open-roads/mopac-express/
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes2
ctrma_toll_rates
https://www.mobilityauthority.com/pay-your-toll/rates/calculate/
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10: CTRMA 'Toll Rates' (the site now puts scripted fetches behind Cloudflare)yes245
dfw_parking_rates
https://www.dfwairport.com/save/
2026-10-101fetched on b100 (192.168.50.14), headless Chrome: DFW Airport 'Save' (parking and pass-through rates)yes5
donna_bridge_tolls
https://www.cityofdonna.org/185/International-Bridge-Corporation
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes9
eaglepass_bridge_tolls
https://www.eaglepasstx.gov/206/Services-Tolls
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes30
elpaso_bridge_tolls
https://www.elpasotexas.gov/international-bridges/toll-rates-by-border-crossing
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes32
galveston_san_luis_bridge
https://www.galvestoncountytx.gov/Home/Components/ServiceDirectory/ServiceDirectory/100/
2026-10-101fetched on b100 (192.168.50.14), headless Chrome: Galveston County 'San Luis Toll Bridge'yes1
hctra_katy_schedule
https://www.hctra.org/Content/hctra3rdPartyPages/katymanagedlanes/media/Katy_Toll_Sched.pd
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes2
hctra_tolling_points
https://gismaps.hctra.org/arcgis/rest/services/ExternalOnlineMap/HCTRASystemMap/MapServer/
2026-10-101fetched on b100 (192.168.50.14): HCTRA's own ArcGIS server, the layer behind hctra.org/TollRoadMapyes4280
laredo_bridge_tolls
https://www.cityoflaredo.com/departments/bridge-system (Toll Fees PDF)
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes23
mcallen_hidalgo_bridge_tolls
https://www.mcallen.net/departments/bridge/mcallen-hidalgo
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes2
metro_hov_hot
https://www.ridemetro.org/riding-metro/hov-hot-express-lanes
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes10
netrma_rate_chart_2025
https://netrma.org/ (NET-RMA-2025-Toll-Rate-Chart image on the Toll Rates page)
2026-10-101fetched on b100 (192.168.50.14): NET RMA 'TOLL RATES - 2025' chart image (amounts read from the image)yes91
netrma_toll_rates
https://netrma.org/net-rma-policies/toll-rates/
2026-10-101fetched on b100 (192.168.50.14): NET RMA 'Toll Rates' pageyes
ntta_toll_locations
https://services.arcgis.com/pS2RA6RqB5M3sZIg/arcgis/rest/services/NTTA_TollLocation_TollRa
2026-10-101fetched on b100 (192.168.50.14): NTTA's own ArcGIS layer behind ntta.org/toll-rate-mapyes
ntta_toll_rate_tables
https://www.ntta.org/sites/default/files/2025-06/NTTAS_2025-2027_Toll%20Rate%20Tables.pdf
2026-10-101fetched on b100 (192.168.50.14)yes1948
pharr_bridge_tolls
https://bridge.pharr-tx.gov/crossing-programs/
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes13
texpress_dynamic_pricing
https://www.texpresslanes.com/pricing/dynamic-pricing/
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes4
tx_sb312_fiscal_note
https://capitol.texas.gov/tlodocs/85R/fiscalnotes/html/SB00312A.htm
2026-10-101fetched on b100 (192.168.50.14)yes
txdot_border_crossings
https://services.arcgis.com/KTcxiTD9dsQw4r7Z/arcgis/rest/services/TxDOT_Border_Crossings/F
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes30
txdot_dfw_toll_roads
https://www.txdot.gov/discover/toll-roads-managed-lanes/txdot-toll-roads/dallas-fort-worth
2026-10-101fetched on b100 (192.168.50.14)yes
txdot_sh288_rates
https://www.txdot.gov/discover/toll-roads-managed-lanes/managed-lanes/sh288-toll/sh288-man
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes2
txdot_texpress_rates
https://www.txdot.gov/discover/toll-roads-managed-lanes/txdot-toll-roads/txdot-texpress-la
2026-10-101fetched on b100 (192.168.50.14) 2026-10-10yes11

Facilities (71)

idfacilityoperatorpointsrate / trip rowseffective dates in the rowssource
TX-NTTA-DNTDallas North TollwayNorth Texas Tollway Authority (NTTA)454502025-07-01ntta_toll_rate_tables
TX-NTTA-PGBTPresident George Bush TurnpikeNorth Texas Tollway Authority (NTTA)686802025-07-01ntta_toll_rate_tables
TX-NTTA-SRTSam Rayburn TollwayNorth Texas Tollway Authority (NTTA)434302025-07-01ntta_toll_rate_tables
TX-NTTA-CTPChisholm Trail ParkwayNorth Texas Tollway Authority (NTTA)272702025-07-01ntta_toll_rate_tables
TX-NTTA-360T360 TollwayNorth Texas Tollway Authority (NTTA)8802025-07-01ntta_toll_rate_tables
TX-NTTA-AATTAddison Airport Toll TunnelNorth Texas Tollway Authority (NTTA)1102025-07-01ntta_toll_rate_tables
TX-NTTA-LLTBLewisville Lake Toll BridgeNorth Texas Tollway Authority (NTTA)1102025-07-01ntta_toll_rate_tables
TX-NTTA-MCLBMountain Creek Lake BridgeNorth Texas Tollway Authority (NTTA)1102025-07-01ntta_toll_rate_tables
TX-HC-AIRPORTCON-HCTRAAirport ConnectorHarris County Toll Road Authority (HCTRA)1152026-10-10_observedhctra_tolling_points
TX-HC-BRAZORIACO-BCTRABrazoria County ExpresswayBrazoria County Toll Road Authority (BCTRA)2162026-10-10_observedhctra_tolling_points
TX-HC-DRRICHARDA-HCTRADr. Richard A. Tapia BridgeHarris County Toll Road Authority (HCTRA)1152026-10-10_observedhctra_tolling_points
TX-HC-FORTBENDPA-FBCTRAFort Bend ParkwayFort Bend County Toll Road Authority (FBCTRA)6602026-10-10_observedhctra_tolling_points
TX-HC-FORTBENDPA-HCTRAFort Bend Parkway ExtensionHarris County Toll Road Authority (HCTRA)2302026-10-10_observedhctra_tolling_points
TX-HC-GRANDPARKW-FBCTRAGrand ParkwayFort Bend County Toll Road Authority (FBCTRA)8802026-10-10_observedhctra_tolling_points
TX-HC-GRANDPARKW-TxDOTGrand ParkwayTexas Department of Transportation (TxDOT); billed by HCTRA (TxTag)7911062026-10-10_observedhctra_tolling_points
TX-HC-HARDYTOLLR-HCTRAHardy Toll RdHarris County Toll Road Authority (HCTRA)152252026-10-10_observedhctra_tolling_points
TX-HC-LOOP1MOPAC-TxDOTLoop1 / MoPac ExpwyTexas Department of Transportation (TxDOT); billed by HCTRA (TxTag)4702026-10-10_observedhctra_tolling_points
TX-HC-SH130-TxDOTSH 130Texas Department of Transportation (TxDOT); billed by HCTRA (TxTag)507282026-10-10_observedhctra_tolling_points
TX-HC-SH249TOLLW-MCTRASH 249 TollwayMontgomery County Toll Road Authority (MCTRA)1142026-10-10_observedhctra_tolling_points
TX-HC-SH249TOLLW-TxDOTSH 249 Tollway ExtensionTexas Department of Transportation (TxDOT); billed by HCTRA (TxTag)61122026-10-10_observedhctra_tolling_points
TX-HC-SH45-TxDOTSH 45Texas Department of Transportation (TxDOT); billed by HCTRA (TxTag)273782026-10-10_observedhctra_tolling_points
TX-HC-SAMHOUSTON-HCTRASam HoustonHarris County Toll Road Authority (HCTRA)6810202026-10-10_observedhctra_tolling_points
TX-HC-TOMBALLTOL-HCTRATomball TollwayHarris County Toll Road Authority (HCTRA)81202026-10-10_observedhctra_tolling_points
TX-HC-TOMBALLTOL-MCTRATomball TollwayMontgomery County Toll Road Authority (MCTRA)2282026-10-10_observedhctra_tolling_points
TX-HC-WESTPARKTO-HCTRAWestpark TollwayHarris County Toll Road Authority (HCTRA)131952026-10-10_observedhctra_tolling_points
TX-HC-WESTPARKTO-FBCTRAWestpark Tollway ExtensionFort Bend County Toll Road Authority (FBCTRA)5502026-10-10_observedhctra_tolling_points
TX-CTRMA-183A183A TollCentral Texas Regional Mobility Authority (CTRMA)111102026-01-01ctrma_toll_rates
TX-CTRMA-290290 TollCentral Texas Regional Mobility Authority (CTRMA)7702026-01-01ctrma_toll_rates
TX-CTRMA-7171 Toll LaneCentral Texas Regional Mobility Authority (CTRMA)1102026-01-01ctrma_toll_rates
TX-CTRMA-45SW45SW TollCentral Texas Regional Mobility Authority (CTRMA)1102026-01-01ctrma_toll_rates
TX-CTRMA-183183 TollCentral Texas Regional Mobility Authority (CTRMA)4402026-01-01ctrma_toll_rates
TX-NETRMA-49Toll 49North East Texas Regional Mobility Authority (NET RMA)9902025-01-01netrma_rate_chart_2025
TX-CCRMA-550SH 550 / I-169 Toll RoadCameron County Regional Mobility Authority (CCRMA)4402026-10-10_observedccrma_toll_rates
TX-DFW-IPInternational Parkway (DFW Airport)Dallas Fort Worth International Airport242026-10-01dfw_parking_rates
TX-SLPSan Luis Pass (Vacek) Toll BridgeGalveston County Road District #110galveston_san_luis_bridge
TX-BR-GOODNEIGHBORGood Neighbor BridgeCity of El Paso1162026-10-10_observedelpaso_bridge_tolls
TX-BR-YSLETABRIDGEYsleta BridgeCity of El Paso1142026-10-10_observedelpaso_bridge_tolls
TX-BR-DELRIOINTERNDel Rio International BridgeCity of Del Rio172024-12-20txdot_border_crossings
TX-BR-EAGLEPASSINTEagle Pass International BridgeCity of Eagle Pass1142026-05-01eaglepass_bridge_tolls
TX-BR-CAMINOREALINCamino Real International BridgeCity of Eagle Pass1142026-05-01eaglepass_bridge_tolls
TX-BR-COLOMBIASOLIColombia Solidarity BridgeCity of Laredo182013-10-18laredo_bridge_tolls
TX-BR-WORLDTRADEBRWorld Trade BridgeCity of Laredo152017-10-19laredo_bridge_tolls
TX-BR-GATEWAYTOTHEGateway to the Americas BridgeCity of Laredo132013-10-18laredo_bridge_tolls
TX-BR-JUREZLINCOLNJuárez-Lincoln BridgeCity of Laredo132013-10-18laredo_bridge_tolls
TX-BR-ROMACIUDADMIRoma-Ciudad Miguel Alemán International BridgeStarr County152024-12-20txdot_border_crossings
TX-BR-STARRCAMARGOStarr-Camargo BridgeStarr-Camargo Bridge Company162024-12-20txdot_border_crossings
TX-BR-ANZALDUASINTAnzalduas International BridgeAnzalduas International Bridge Board (City of McAllen)162026-10-10_observedanzalduas_bridge_tolls
TX-BR-MCALLENHIDALMcAllen-Hidalgo International BridgeCity of McAllen112026-10-10_observedmcallen_hidalgo_bridge_tolls
TX-BR-PHARRREYNOSAPharr-Reynosa International BridgeCity of Pharr1122026-10-10_observedpharr_bridge_tolls
TX-BR-DONNARIOBRAVDonna-Rio Bravo International BridgeCity of Donna182026-10-10_observeddonna_bridge_tolls
TX-BR-PROGRESOINTEProgreso International BridgeB&P Bridge Co162024-12-20txdot_border_crossings
TX-BR-FREETRADEINTFree Trade International BridgeCameron County International Bridge System1162026-10-10_observedccibs_toll_rates
TX-BR-BROWNSVILLEMBrownsville & Matamoros Express BridgeBrownsville Matamoros Bridge Company112024-12-20txdot_border_crossings
TX-BR-GATEWAYINTERGateway International BridgeCameron County International Bridge System162026-10-10_observedccibs_toll_rates
TX-BR-VETERANSINTEVeterans International Bridge at Los TomatesCameron County International Bridge System1162026-10-10_observedccibs_toll_rates
TX-EXP-LBJLBJ TEXpress Lanes (I-635, LBJ Infrastructure Group)I-635, LBJ Infrastructure Group11(none printed)texpress_dynamic_pricing
TX-EXP-NTENTE / NTE 35W TEXpress Lanes (I-820, SH 183, I-35W; NTE Mobility Partners)I-820, SH 183, I-35W; NTE Mobility Partners11(none printed)texpress_dynamic_pricing
TX-EXP-I35EI-35E TEXpress Lanes (TxDOT)TxDOT11(none printed)txdot_texpress_rates
TX-EXP-I30I-30 TEXpress Lanes (TxDOT)TxDOT11(none printed)txdot_texpress_rates
TX-EXP-SH114SH 114 TEXpress Lanes (TxDOT; DFW Connector, Midtown Express)TxDOT; DFW Connector, Midtown Express11(none printed)txdot_texpress_rates
TX-EXP-SH183SH 183 TEXpress Lanes (TxDOT)TxDOT11(none printed)txdot_texpress_rates
TX-EXP-LP12Loop 12 TEXpress Lanes (TxDOT)TxDOT11(none printed)txdot_texpress_rates
TX-EXP-I635EI-635 East TEXpress Lanes (TxDOT)TxDOT00txdot_texpress_rates
TX-EXP-KATYKaty Managed Lanes (I-10, HCTRA)I-10, HCTRA11(none printed)hctra_katy_schedule
TX-EXP-SH288SH 288 Managed Lanes (Harris County, TxDOT)Harris County, TxDOT11(none printed)txdot_sh288_rates
TX-EXP-MOPACMoPac Express Lanes (Loop 1, CTRMA)Loop 1, CTRMA11(none printed)ctrma_mopac_express
TX-EXP-M290US 290 (Northwest Freeway) HOV/HOT lane (METRO)METRO (Metropolitan Transit Authority of Harris County)11(none printed)metro_hov_hot
TX-EXP-M59SWUS 59 (Southwest Freeway) HOV/HOT lane (METRO)METRO (Metropolitan Transit Authority of Harris County)11(none printed)metro_hov_hot
TX-EXP-M59EUS 59 (Eastex Freeway) HOV/HOT lane (METRO)METRO (Metropolitan Transit Authority of Harris County)11(none printed)metro_hov_hot
TX-EXP-M45NI-45 North (North Freeway) HOV/HOT lane (METRO)METRO (Metropolitan Transit Authority of Harris County)11(none printed)metro_hov_hot
TX-EXP-M45SI-45 South (Gulf Freeway) HOV/HOT lane (METRO)METRO (Metropolitan Transit Authority of Harris County)11(none printed)metro_hov_hot

Positions placed by estimate (5): re-check when OpenStreetMap or the operator changes

pointfacilitylocationplaced onwhy
TX-CTRMA-183A-07183A TollSan Gabriel Mainlinethe road at the named crossing (no OSM gantry mapped there)R3 estimate: CTRMA publishes no positions and OSM maps no gantry here: the toll road's carriageways at the crossing
TX-CTRMA-183A-08183A TollSan Gabriel Rampsthe road at the named crossing (no OSM gantry mapped there)R3 estimate: CTRMA publishes no positions and OSM maps no gantry here: the links within 700 m of the crossing
TX-CTRMA-183A-09183A TollSouth Whitewing Rampsthe road at the named crossing (no OSM gantry mapped there)R3 estimate: CTRMA publishes no positions and OSM maps no gantry here: the links within 700 m of the crossing
TX-CTRMA-183A-10183A TollWhitewing Mainlinethe road at the named crossing (no OSM gantry mapped there)R3 estimate: CTRMA publishes no positions and OSM maps no gantry here: the toll road's carriageways at the crossing
TX-CTRMA-183A-11183A TollNorth Whitewing Rampsthe road at the named crossing (no OSM gantry mapped there)R3 estimate: CTRMA publishes no positions and OSM maps no gantry here: the links within 700 m of the crossing

Decisions by rule

HCTRA's: 1, R1: 512, R2: 39, R2a: 11, R3: 5, direction: 1, next: 1, no: 12, not: 5, optional,: 11, parking,: 1, plan: 1, southbound: 1, told,: 1 (all in decisions.csv).

Open gaps (1)

pointfacilitylocationgap
San Luis Pass (Vacek) Toll Bridgetoll boothsno state or county source publishes the toll amount

Untied OSM toll nodes: 3

Toll booths / gantries mapped in OpenStreetMap on or near this state's roads that no toll point claims; a route through one lists it under unpriced. After an OSM refresh, look at new ones here (untied_toll_nodes.csv): a new gantry on a priced road means a point is missing.

Regression trips for TX (0)

Run from b100 (never on geo1): python3 ~/apitest/run.py ~/apitest/site/cases.json. Every trip must come back OK; a changed amount is either a rate change (update the expected amount from the operator's own source) or a fault.

No regression trips yet for this state.