U.S. border crossing entries by port and mode, monthly
Monthly counts of people and conveyances entering the United States at land border ports of entry, compiled by U.S. Customs and Border Protection and published by the Bureau of Transportation Statistics (Socrata dataset keg4-3bc2, https://data.bts.gov/resource/keg4-3bc2.json). Each row is one (month, port, measure) combination: measures are Buses, Bus Passengers, Pedestrians, Personal Vehicle Passengers, Personal Vehicles, Train Passengers, Trains and Trucks; value is the count. Units: counts of persons or conveyances. Caveats: land ports of entry only (airports and seaports are not covered); figures are revised as CBP finalizes monthly reports, so recent months can change. Coverage: US-Canada and US-Mexico borders, 1996-01 to the present, monthly granularity. Provenance: BTS keyless Socrata API, U.S. public domain - please cite the U.S. Department of Transportation, Bureau of Transportation Statistics. Primary key: (month, port_code, measure). Cadence: refreshed monthly; new months typically appear 4-8 weeks after month-end. Nullability: value is never null in the feed; latitude/longitude are null for a few ports. Sample use: filter border = 'US-Mexico Border' and measure = 'Pedestrians' to track monthly pedestrian crossings.
- Rows
- 276,421
- Columns
- 9
- Source cadence
- Monthly
- Last refreshed
- Sep 23, 2026
- Theme
- transport
| Column | Type | Description |
|---|---|---|
| port_name | string | Name of CBP Port of Entry. |
| state | string | U.S. state of the port of entry. |
| port_code | string | CBP port code; with month and measure forms the primary key. |
| border | string | US-Canada Border or US-Mexico Border. |
| month | string | Year and month of the observation (first day of month, from the feed's calendar date). |
| measure | string | What was counted: Buses, Bus Passengers, Pedestrians, Personal Vehicle Passengers, Personal Vehicles, Train Passengers, Trains, or Trucks. |
| value | float | Count of persons or conveyances for the (month, port, measure). (unit: count) |
| latitude | float | Port latitude. (unit: degrees) |
| longitude | float | Port longitude. (unit: degrees) |
First 10 sample rows — a preview, not the complete dataset.
| port_name | state | port_code | border | month | measure | value | latitude | longitude |
|---|---|---|---|---|---|---|---|---|
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Bus Passengers | 0 | 43.659 | -70.243 |
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Buses | 0 | 43.659 | -70.243 |
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Pedestrians | 0 | 43.659 | -70.243 |
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Personal Vehicle Passengers | 0 | 43.659 | -70.243 |
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Personal Vehicles | 0 | 43.659 | -70.243 |
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Train Passengers | 0 | 43.659 | -70.243 |
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Trains | 0 | 43.659 | -70.243 |
| Portland | Maine | 0101 | US-Canada Border | 1996-01-01 | Trucks | 0 | 43.659 | -70.243 |
| Jackman | Maine | 0104 | US-Canada Border | 1996-01-01 | Bus Passengers | 527 | 45.806 | -70.397 |
| Jackman | Maine | 0104 | US-Canada Border | 1996-01-01 | Buses | 21 | 45.806 | -70.397 |
Point any LLM at the metadata endpoint — the documentation above is machine-readable too (JSON-LD + Croissant).
curl "https://datazimuts.com/v1/datasets/bts/bts_border_crossing_entries" | jq '{title, rows, columns_count, license}'import requests
ds = requests.get("https://datazimuts.com/v1/datasets/bts/bts_border_crossing_entries").json()
print(ds["title"], ds["rows"], "rows")
# Sample rows for an LLM context window
for row in ds.get("sample_rows", [])[:5]:
print(row)API endpoint: https://datazimuts.com/v1/datasets/bts/bts_border_crossing_entries
Tip: fetch /llms.txt for the full machine-readable catalog.