Technical writing
BTS Border Crossing Entry Data: Monthly Land Port Crossings from 1996
Every truck that clears the bridge at Laredo, every pedestrian who walks through San Ysidro, every personal vehicle that crosses from Windsor into Detroit — each generates a count in the Bureau of Transportation Statistics Border Crossing Entry Data. The dataset records monthly totals of every crossing type at every land port of entry on both the US-Mexico and US-Canada borders, broken down by how the crossing happened: personal vehicle, bus, bus passenger, truck, truck container, train, train passenger, pedestrian. The series goes back to January 1996 and covers roughly 290 active land ports. It is the most comprehensive longitudinal record of cross-border land traffic in federal data.
The dataset sits at the intersection of supply chain analysis, immigration research, and economic indicator work. Truck container flows track north–south goods movement with monthly granularity at the port level. Pedestrian crossing counts serve as a proxy for border community economic activity and, in conjunction with US Border Patrol encounter data, as a baseline for asylum seeker flow analysis. The COVID-19 collapse of March through May 2020 — a 60 to 90 percent drop depending on crossing type — is visible in the series with unusual clarity, making the dataset one of the sharpest real-time indicators of when the pandemic actually shut down land border movement.
What the dataset contains
Each record in the BTS Border Crossing Entry Data represents a unique combination of port, crossing measure, and month. The core fields are:
BTS Border Crossing Entry Data — field structure:
port_code — 4-digit CBSA (Customs and Border Protection) port code
uniquely identifies each land port of entry
port_name — Port of entry name (e.g. "Laredo", "San Ysidro", "Detroit")
state — US state where the port is located
border — "US-Mexico" or "US-Canada"
measure — Crossing type (see taxonomy below)
date — Month and year (first day of month, YYYY-MM-DD)
value — Integer count of crossings in that month
Coverage:
Date range: January 1996 – present (updated monthly, ~2-month lag)
US-Mexico: ~170 ports of entry across CA, AZ, NM, TX
US-Canada: ~120 ports of entry across ME, NH, VT, NY, MI, MN, ND, MT, ID, WA
Total rows: ~500,000+ as of 2025 (all port × measure × month combinations)The port code is the key join field for linking to other CBP datasets. The 4-digit CBSA port code is maintained by US Customs and Border Protection and used consistently across BTS data, CBP trade statistics (where it identifies the port of entry for commercial shipments), and the CBP trade data published by the Census Bureau. This makes the BTS crossing counts joinable to dollar-value trade flows at the port level, enabling analysts to correlate truck crossing volumes with the value of goods moving through each port.
The crossing type taxonomy
The measure field is the most analytically important dimension in the dataset. It distinguishes nine distinct crossing types, each counting something different about how a border crossing occurred. Using them interchangeably produces fundamentally incorrect conclusions.
Crossing type taxonomy — BTS Border Crossing Entry Data:
PERSONAL VEHICLE CROSSINGS
Personal Vehicles — Count of individual vehicles (cars, light trucks,
motorcycles) crossing. Each vehicle crossing is one
count regardless of how many passengers it carries.
Personal Vehicle — Count of passengers inside personal vehicles, not
Passengers including the driver. A family of four in one car
generates one Personal Vehicle count and three
Personal Vehicle Passenger counts.
COMMERCIAL VEHICLES
Trucks — Count of commercial trucks crossing, regardless of
cargo status (loaded or empty). Includes all classes
of commercial motor vehicles used for goods transport.
Truck Containers Loaded — Count of loaded intermodal containers on truck chassis.
This is the primary supply chain metric: loaded
containers represent actual goods in transit.
Truck Containers Empty — Count of empty containers returning after delivery.
The loaded/empty ratio reveals directional trade
imbalances at the port level.
BUS CROSSINGS
Buses — Count of commercial and charter buses crossing.
Bus Passengers — Count of passengers aboard those buses. Heavily used
for cross-border commuter and tourist bus services,
particularly on the US-Mexico border.
RAIL
Trains — Count of train crossings (entire train = one count).
Train Passengers — Count of passengers on passenger rail crossings.
Amtrak operates cross-border service on the
US-Canada border (Cascades, Maple Leaf, Vermonter).
PEDESTRIANS
Pedestrians — Count of individuals crossing on foot through
pedestrian lanes. The largest single-mode count at
high-volume urban crossings like San Ysidro.The distinction between Trucks and Truck Containers Loaded is critical for supply chain analysis. A truck count tells you how many commercial vehicles crossed. A loaded container count tells you how much freight actually moved. A truck that crosses with an empty container to pick up a load counts in both the Trucks series and the Truck Containers Empty series, but not in the Loaded series. This allows directional asymmetry analysis: if a port is heavily imbalanced toward empty northbound containers, it suggests that goods are moving predominantly southbound (empty containers are returning for another load). At Laredo, which handles the bulk of US-Mexico truck trade, the loaded/empty split tracks closely with the composition of US-Mexico bilateral trade.
The Personal Vehicles versus Personal Vehicle Passengers split matters for border community economic activity studies. A border city like El Paso or Brownsville has substantial daily cross-border commuter traffic: residents living in Ciudad Juárez or Matamoros crossing daily for work, school, or shopping. The passenger count captures economic throughput more accurately than the vehicle count, since a bus crossing with 40 passengers represents far more economic activity than 40 single-occupant vehicle crossings.
Port geography and the CBSA code system
The US land border has approximately 290 active ports of entry, distributed unevenly across the two borders. The US-Mexico border's 1,954 miles hosts roughly 170 official ports. The US-Canada border, though nearly four times longer at 5,525 miles, hosts roughly 120 ports because much of the Canadian border runs through remote terrain with sparse population on both sides.
US-Mexico border ports — selected major crossings by state:
Texas (TX): ~30 ports — the highest truck volume state
Laredo (port 2304) — largest US-Mexico truck crossing by volume
El Paso (port 2402) — largest crossing by personal vehicles in TX
Brownsville (port 2301) — major agricultural and maquiladora trade hub
Hidalgo (port 2306) — second-busiest truck port in Texas
Eagle Pass (port 2303) — fast-growing rail and truck crossing
California (CA): ~8 ports
San Ysidro (port 2506) — world's busiest land border crossing
by pedestrian and personal vehicle volume
Otay Mesa (port 2507) — primary truck crossing for San Diego region
Calexico (port 2501) — Baja California agricultural produce
Arizona (AZ): ~6 ports
Nogales (port 2604) — second-largest truck port nationally
Douglas (port 2601)
San Luis (port 2605)
New Mexico (NM): ~3 ports
Santa Teresa (port 2408) — growing truck crossing, new rail yard
US-Canada border ports — selected major crossings by state:
Michigan (MI):
Detroit/Ambassador Bridge (port 3801) — largest US-Canada truck crossing
Port Huron/Blue Water (port 3802)
New York (NY):
Buffalo/Peace Bridge (port 0901)
Champlain/Lacolle (port 0801)
Niagara Falls (port 0902)
Washington (WA):
Blaine/Peace Arch (port 3304) — largest Pacific Northwest crossing
Lynden (port 3302)
Michigan and New York together account for the majority of US-Canada
commercial truck crossings due to Ontario's manufacturing concentration.The CBSA 4-digit port code is the authoritative identifier. CBP maintains the complete port code table at its website, and the BTS dataset includes both the numeric code and the human-readable port name. When joining to CBP trade data, the port codes match directly. When joining to Census Bureau port-level trade statistics, the Census “district” and “port” codes use a slightly different 2+2 digit format (district-port), but the port-level numbers correspond one-to-one to CBSA codes with a straightforward lookup.
How to access the data
BTS transstats.bts.gov
The primary public interface is the BTS Transstats portal at transstats.bts.gov. The Border Crossing Entry Data download page at transstats.bts.gov/DL_SelectFields.aspx?gnoyr_VQ=GE provides a filter-and-download interface. Users select the fields to include, apply filters by border, state, or date range, and download a CSV or tab-delimited file. The full unfiltered dataset is available as a single download. Because the dataset is not large by modern standards — roughly 500,000 rows as of 2025 — downloading the complete file and filtering locally is usually faster than building complex server-side filter queries through the web interface.
Socrata API
The dataset is also published on the DOT's open data portal via the Socrata platform at data.transportation.gov with dataset ID keg4-3bc2. The Socrata API supports SQL-like $where filter parameters, enabling programmatic access with server-side filtering by border, measure, date range, or port code. This is the most convenient access path for automated pipelines that need to pull specific slices (for example, only truck crossings at Texas ports in the past 24 months).
FOIA-released full dataset
BTS also makes available a more granular version of the border crossing data through FOIA requests, which includes daily-level data in some cases and additional fields not included in the standard monthly aggregate publication. Researchers studying within-month variation — for instance, whether crossing volumes spike around US or Mexican holidays — have obtained daily breakdowns through the FOIA process. The standard public dataset is monthly only; any sub-monthly analysis requires a FOIA request to BTS.
Key patterns in the data
The COVID-19 collapse
The March through May 2020 period represents the most dramatic event in the dataset's 28-year history. When the US and Canadian governments implemented travel restrictions on March 21, 2020, and the US and Mexican governments agreed to restrict non-essential travel on the same date, crossing volumes collapsed within a single month.
COVID-19 border crossing collapse — approximate magnitude by measure:
Feb 2020 Apr 2020 Peak decline
Personal Vehicles 6.2M 1.1M -82%
Pedestrians 6.8M 0.5M -93%
Personal Veh. Passengers 9.5M 1.7M -82%
Bus Passengers 780K 18K -98%
Trucks 680K 490K -28%
Truck Containers Loaded 380K 310K -18%
Key observations:
- Truck crossings declined far less than passenger crossings because
commercial freight was designated essential and exempted from
non-essential travel restrictions on both borders.
- Pedestrians saw the steepest decline: border crossing on foot
requires a specific non-essential travel exemption, and foot
traffic at crossings like San Ysidro is dominated by residents
crossing for retail, work, and family visits.
- Bus passengers effectively ceased: cross-border bus services were
suspended almost entirely.
- The US-Canada border restriction was more complete in duration:
Canada maintained restrictions on non-essential land travel
through late 2021, producing a 20-month suppression of Canadian
border passenger volumes with no equivalent in post-1996 data.Recovery timelines differed substantially by crossing type and border. US-Mexico truck crossings recovered to pre-pandemic levels by mid-2020 and then grew above trend through 2021 and 2022 as nearshoring accelerated and trade volumes expanded. US-Mexico pedestrian crossings did not recover to 2019 levels until late 2022. US-Canada passenger crossings remained suppressed for nearly two years, recovering only after Canada lifted land border restrictions in November 2021. The asymmetry in the data between commercial (essential) and passenger (non-essential) crossings makes the BTS series one of the cleanest natural experiments in border policy effects available in federal data.
San Ysidro: the world's busiest land border crossing
San Ysidro (port code 2506) in San Diego County consistently records the highest pedestrian crossing volumes of any US land port of entry — and, by most measures, the highest such volumes of any land border crossing in the world. Pre-pandemic, San Ysidro processed 25,000 to 35,000 pedestrian crossings per day, or roughly 800,000 to 1,000,000 per month. The crossing connects San Diego to Tijuana, two cities whose economies are deeply integrated: Tijuana residents cross regularly for employment, medical care, shopping, and family visits; San Diegans cross for tourism, dining, and business.
San Ysidro also records the highest personal vehicle volumes on the US-Mexico border. The port has undergone several major infrastructure expansions, including the addition of southbound inspection booths and SENTRI (trusted traveler) dedicated lanes. The BTS data captures the total volume crossing in any direction at that port, regardless of the inspection lane used. CBP separately tracks NEXUS and SENTRI program usage, but those granular lane-level counts are not in the BTS dataset.
Laredo: the dominant truck crossing
Laredo, Texas (port code 2304) is the largest US-Mexico commercial crossing by truck volume and by trade value. It accounts for roughly 40 percent of all US-Mexico truck crossings and an even higher share of the total dollar value of US-Mexico land trade. The dominance of Laredo reflects the geography of Mexican manufacturing: the Monterrey metropolitan area and its surrounding industrial corridor is the center of Mexico's manufacturing economy, and the most direct road connection to the US runs north through Nuevo Laredo to the I-35 corridor and on to Chicago, the Midwest, and the Southeast.
The Laredo crossing is also the most sensitive to disruptions. When CBP has implemented intensified inspections for drug interdiction, when bridge infrastructure has required maintenance, or when political events have caused delays at the ports of entry, the effects appear immediately in the Laredo truck count series. Supply chain analysts monitoring US-Mexico trade disruption risk routinely check the monthly Laredo truck container numbers as an early indicator.
US-Canada seasonal patterns
The US-Canada border exhibits strong seasonal patterns in personal vehicle and pedestrian crossings that are largely absent from the US-Mexico border data. Canadian tourist crossings into the United States peak in summer (July and August), driven by vacation travel. The US-Canada border also sees a secondary peak in winter in certain states, particularly in Florida-adjacent northern corridors, as Canadians travel south for winter months (“snowbirds”). This seasonal signal is clearly visible in the monthly personal vehicle series for crossings in Vermont, New York, and Washington state.
US-Canada commercial crossings show weaker seasonality than passenger crossings, but do reflect the manufacturing calendar: automotive sector output patterns in Ontario affect the Detroit Ambassador Bridge truck volumes, with the annual model changeover shutdowns in summer producing a visible dip in the July-August truck container data for the Michigan crossings.
How researchers use the data
Supply chain analysis and nearshoring
The truck container series — particularly loaded containers at Laredo, Nogales, and Otay Mesa — has become a primary indicator for US-Mexico nearshoring trends. Beginning in 2021 and accelerating through 2023 and 2024, US companies began relocating manufacturing from Asia to Mexico to shorten supply chains and reduce geopolitical exposure following the COVID-era shortages and Section 301 tariff disruptions. The effect appears in the BTS data as sustained above-trend growth in loaded truck container crossings at major Texas and Arizona ports, even as comparable Asian-origin trade flows shifted.
Joining the BTS truck container counts to CBP trade value data at the port level produces a dollars-per-container figure that tracks the average value of goods moving through each crossing. A rising dollars-per-container ratio at a port suggests a shift toward higher-value manufactured goods (electronics, vehicles, precision components) relative to lower-value bulk commodities (agricultural produce, raw materials). The dollars-per-container ratio at Laredo has trended upward since 2020, consistent with the nearshoring of higher-value manufacturing.
Trade flow correlation with CBP trade statistics
The BTS crossing counts and the Census Bureau's port-level trade value data are complementary datasets. The Census data tells you the dollar value of goods imported or exported through each port and the commodity composition. The BTS data tells you the physical volume in terms of truck crossings. Together they support analysis of value density, capacity utilization, and the commodity mix at each port of entry.
One productive use is identifying ports where trade value is growing faster than truck volumes — indicating that higher-value goods are displacing lower-value goods through the same physical infrastructure — versus ports where volume growth is outpacing value growth, suggesting commodity trade expansion. These patterns matter for infrastructure planning, port staffing, and customs processing capacity allocation.
Immigration and asylum seeker analysis
Pedestrian crossing counts are a coarse but useful proxy for border community economic activity and migration pressure. Researchers studying asylum seeker flows compare BTS pedestrian crossing volumes at ports of entry against US Border Patrol encounter data from between ports of entry. The ratio of legal pedestrian crossings (at designated ports, counted by BTS) to illegal border crossings (between ports, counted by USBP) shifts as migration pressure changes and as CBP's port processing capacity for asylum claims expands or contracts.
During periods when CBP has limited port-of-entry processing for asylum seekers — as occurred during the Title 42 public health restriction period from March 2020 through May 2023 — pedestrian crossing volumes at ports like San Ysidro and Laredo fell substantially even as USBP between-port encounters rose. The BTS pedestrian series thus provides indirect evidence about whether asylum seekers are being channeled through official ports or are being forced to cross irregularly by port capacity constraints. This analysis requires joining BTS pedestrian data to CBP encounter data, which is published separately by CBP at cbp.gov.
Economic activity indicators
Border economists use the BTS crossing data as a leading indicator of economic conditions in border metropolitan areas. Personal vehicle and pedestrian crossings from Mexico into the United States are strongly correlated with retail sales in US border communities, because Mexican residents crossing to shop represent a significant share of retail revenue in cities like El Paso, Laredo, and McAllen. When the peso depreciates against the dollar, Mexican purchasing power for US-priced goods falls and crossing volumes from Mexico into the US decline. The BTS monthly series captures this at a two-month lag (publication delay) with enough granularity to decompose the effect by port.
Python: downloading and analyzing US-Mexico truck crossings
The following snippet downloads US-Mexico truck crossing data through the Socrata API, aggregates monthly totals across all ports, identifies the COVID-19 trough, and plots the trend. No f-strings or embedded format specifiers are used in the code; all string formatting uses explicit concatenation for JSX compatibility.
import pandas as pd
import requests
import matplotlib.pyplot as plt
from io import StringIO
# BTS Border Crossing Entry Data is available via the Socrata open data API.
# Dataset ID: keg4-3bc2 on the BTS/DOT Socrata instance.
# Full metadata: https://www.transstats.bts.gov/DL_SelectFields.aspx?gnoyr_VQ=GE
BASE_URL = "https://data.transportation.gov/resource/keg4-3bc2.csv"
# Download US-Mexico truck crossings (Loaded + Empty containers) 2018-2024
# Filter server-side: border = "US-Mexico", measure includes "Truck Containers"
params = {
"$where": "border = 'US-Mexico' AND (measure = 'Trucks' OR measure = 'Truck Containers Loaded' OR measure = 'Truck Containers Empty')",
"$limit": 500000,
"$order": "date DESC",
}
resp = requests.get(BASE_URL, params=params, timeout=60)
resp.raise_for_status()
df = pd.read_csv(StringIO(resp.text), parse_dates=["date"])
df["value"] = pd.to_numeric(df["value"], errors="coerce")
# Aggregate all US-Mexico ports by month for the Trucks measure
trucks = (
df[df["measure"] == "Trucks"]
.groupby("date")["value"]
.sum()
.reset_index()
.rename(columns={"value": "truck_crossings"})
.sort_values("date")
)
# Filter to 2018-2024 to capture pre-COVID baseline, collapse, and recovery
trucks = trucks[(trucks["date"] >= "2018-01-01") & (trucks["date"] <= "2024-12-31")]
# Compute year-over-year change
trucks["yoy_pct"] = trucks["truck_crossings"].pct_change(12) * 100
# Identify COVID collapse trough
trough_idx = trucks["truck_crossings"].idxmin()
trough_row = trucks.loc[trough_idx]
print("COVID trough month: " + str(trough_row["date"].strftime("%Y-%m")))
print("Trough truck crossings: " + str(int(trough_row["truck_crossings"])))
# February 2020 baseline for comparison
feb_2020 = trucks[trucks["date"] == "2020-02-01"]["truck_crossings"].iloc[0]
print("Feb 2020 baseline: " + str(int(feb_2020)))
print("Trough vs baseline: " + str(round((trough_row["truck_crossings"] / feb_2020 - 1) * 100, 1)) + "%")
# Plot monthly US-Mexico truck crossings
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(trucks["date"], trucks["truck_crossings"] / 1e6, color="#0b4a8f", linewidth=1.5)
ax.axvspan(pd.Timestamp("2020-03-01"), pd.Timestamp("2020-06-01"),
alpha=0.15, color="red", label="COVID collapse (Mar-May 2020)")
ax.set_title("US-Mexico Truck Crossings: All Land Ports of Entry (2018-2024)")
ax.set_ylabel("Monthly crossings (millions)")
ax.set_xlabel("Month")
ax.legend()
ax.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.savefig("us_mexico_trucks_2018_2024.png", dpi=150)
print("Chart saved.")
# Top ports by 2024 average monthly truck crossings
if not df.empty:
trucks_by_port = (
df[
(df["measure"] == "Trucks") &
(df["date"] >= "2024-01-01") &
(df["date"] <= "2024-12-31")
]
.groupby("port_name")["value"]
.mean()
.sort_values(ascending=False)
.head(10)
)
print("Top 10 US-Mexico ports by avg monthly truck crossings (2024):")
for port, val in trucks_by_port.items():
print(" " + str(port) + ": " + str(int(val)))
For the full dataset download instead of API queries, the BTS Transstats portal provides a single CSV containing all records. The file is manageable in pandas at roughly 50–80 MB uncompressed. DuckDB can query it directly without loading into memory using SELECT * FROM read_csv_auto('border_crossing.csv'), which is convenient for ad-hoc analysis on the complete 28-year series.
Cross-references and related federal datasets
The BTS Border Crossing Entry Data is most useful when joined to related federal datasets that add dimensional richness the crossing counts alone cannot provide.
CBP trade statistics (via Census Bureau Foreign Trade Division) provide the dollar-value and commodity complement to the BTS count data. The CBP port codes link directly to BTS port codes at each land port of entry. The Census Bureau's monthly port-level trade files are published at census.gov/foreign-trade/data/index.html and through the Census trade API.
CBP encounter data (published at cbp.gov/newsroom/stats) covers US Border Patrol encounters between ports of entry and Office of Field Operations encounters at ports of entry. The CBP encounter data is the complement to BTS pedestrian crossings: together they distinguish legal crossing volume from illegal crossing volume, essential for understanding total border movement. CBP publishes monthly encounter statistics by sector and port with a one-month lag.
Census Bureau Foreign Trade state export dataprovides the originating-state dimension that the port-level BTS data lacks. Goods exported through Laredo do not necessarily originate in Texas; the Census state export data traces goods to their state of origin, enabling full supply chain path analysis from manufacturing state to export port.
FMCSA carrier safety data (the SAFER and MCMIS databases) provides carrier-level context for the commercial truck crossings. Every commercial motor carrier operating in international commerce must hold a USDOT number and is subject to FMCSA oversight. Cross-referencing high-volume truck crossing ports with FMCSA carrier concentration data identifies which carriers dominate specific border corridors, relevant for supply chain risk concentration analysis.
Limitations and methodological notes
Counting units. The dataset counts crossings, not unique individuals or vehicles. A cross-border commuter who crosses Monday through Friday generates five Personal Vehicle counts per week and five Personal Vehicle Passenger counts (for any passengers). Monthly volumes at high-commuter crossings reflect the commuter base, not the number of distinct people who crossed. This matters for interpreting absolute crossing volumes: 800,000 pedestrian crossings per month at San Ysidro does not mean 800,000 distinct people crossed; a core commuter population crossing 20 times per month contributes 20 counts each.
Direction of crossing. The BTS data counts northbound crossings into the United States. Southbound crossings — US residents and visitors entering Mexico or Canada — are not captured in this dataset. Mexico and Canada publish their own border crossing statistics but with different methodologies and granularity. For directional analysis, Mexico's INEGI and Canada's Statistics Canada are the relevant sources for southbound flows.
Port closures and temporary disruptions.Some months show anomalously low counts for specific ports due to port closures, bridge closures, or operational disruptions. These appear as outliers in the monthly series and should be flagged rather than interpreted as demand signals. The BTS dataset does not include a flag for known disruptions; analysts typically identify them by comparing a port's monthly count against its 12-month trailing average and investigating any month showing a drop of more than two standard deviations.
Data lag. Monthly data is published approximately two months after the reference month. January data is typically available in March. This lag is comparable to other federal transportation datasets and reflects the time required for CBP to compile and validate the crossing counts before transmitting them to BTS for publication.
Related writing
CBP US Trade Statistics: The Federal Dataset Behind Every Import and Export — The port-level trade value data that complements BTS crossing counts: commodity codes, trade flows, Section 301 tariff effects, and how to access the Census Bureau trade API.
FMCSA Carrier Safety Ratings: The Federal Database Behind 550,000 Trucking Companies — The carrier-level safety and compliance data for the commercial trucks counted in the BTS border crossing series: SAFER, MCMIS, SMS BASIC percentiles, and out-of-service rates.
ICE Enforcement and Removal Operations: Reading the Federal Dataset Behind Immigration Enforcement — The ICE ERO dataset that tracks what happens after individuals cross the border: removals, detentions, criminality designations, and how enforcement priority shifts appear in the data.