SourceFinch Verified · Transport & logistics
U.S. land border crossing entries by port, monthly
Monthly counts of inbound trucks, trains, buses, personal vehicles, passengers and pedestrians at each U.S.-Canada and U.S.-Mexico land port of entry, the 1,000 most recent port, month and measure rows (about two months).
- Healthy · 100% of observed runs successful
- Transport & logistics
- Bureau of Transportation Statistics (U.S. Department of Transportation)
- United States (federal)
- Open data portal
- 10 typed fields
At a glance
- Category
- Transport & logistics
- Jurisdiction
- United States (federal)
- Publisher updates
- Monthly
- SourceFinch checks
- Daily by default
- Records per run
- 1,000 in the latest run
- Record key
id- Acquired from
- Open data portal:
https://data.bts.gov/resource/keg4-3bc2.json?$select=port_code%7C%7C%27/%27%7C%7Cdate_extract_y(date)%7C%7C%27-%27%7C%7Cdate_extract_m(date)%7C%7C%27/%27%7C%7Cmeasure%20as%20id,port_name,state,port_code,border,date,measure,value,latitude,longitude&$order=date%20DESC,port_code,measure&$limit=1000 - Recipe
- v1.0.0, approved October 12, 2026
- Verified since
- October 12, 2026
- Last green run
- October 12, 2026
What the data contains
U.S. Customs and Border Protection counts inbound crossings at every land port of entry on the Canadian and Mexican borders, and the Bureau of Transportation Statistics publishes the counts monthly as the Border Crossing Entry Data dataset on data.bts.gov. Each row is one port, one month and one measure (trucks, loaded and empty truck containers, trains, rail containers, train passengers, buses, bus passengers, personal vehicles, personal vehicle passengers or pedestrians). This source asks the dataset's SODA API for the 1,000 most recent rows on each daily run, naming every column it reads and building a record key from the port code, year and month and measure on the server, so a monitor reports each new month of counts and any revision. The counts are aggregates of vehicles and people and contain no personal data; outbound crossings are not counted by CBP. SourceFinch is independent of BTS and CBP.
Fields and types
Every record has these fields. The key field id identifies a record across runs, so changes are reported field by field.
| Field | Type | Description |
|---|---|---|
idkey | string | Port code, year-month and measure joined with slashes (for example 0103/2026-8/Buses), unique per row. The record key. |
port_name | string, nullable | Name of the port of entry. |
state | string, nullable | U.S. state of the port. |
port_code | string | CBP port code. |
border | string, nullable | US-Canada Border or US-Mexico Border. |
month | date | First day of the month the count covers (YYYY-MM-DD). |
measure | string | What was counted: trucks, containers, trains, buses, personal vehicles, passengers or pedestrians. |
value | integer, nullable | Number of inbound crossings of that measure at the port in the month. |
latitude | number, nullable | Latitude of the port (WGS 84). |
longitude | number, nullable | Longitude of the port (WGS 84). |
Sample output
The first 5 of 1,000 records from SourceFinch's own run on October 12, 2026, exactly as delivered.
| Field | Record 1 | Record 2 | Record 3 | Record 4 | Record 5 |
|---|---|---|---|---|---|
id | 0103/2026-8/Buses | 0103/2026-8/Bus Passengers | 0103/2026-8/Pedestrians | 0103/2026-8/Personal Vehicle Passengers | 0103/2026-8/Personal Vehicles |
port_name | Eastport | Eastport | Eastport | Eastport | Eastport |
state | Maine | Maine | Maine | Maine | Maine |
port_code | 0103 | 0103 | 0103 | 0103 | 0103 |
border | US-Canada Border | US-Canada Border | US-Canada Border | US-Canada Border | US-Canada Border |
month | 2026-08-01 | 2026-08-01 | 2026-08-01 | 2026-08-01 | 2026-08-01 |
measure | Buses | Bus Passengers | Pedestrians | Personal Vehicle Passengers | Personal Vehicles |
value | 4 | 144 | 90 | 27077 | 14933 |
latitude | 44.8594395785 | 44.8594395785 | 44.8594395785 | 44.8594395785 | 44.8594395785 |
longitude | -66.98007566 | -66.98007566 | -66.98007566 | -66.98007566 | -66.98007566 |
Sample as JSON
[
{
"id": "0103/2026-8/Buses",
"month": "2026-08-01",
"state": "Maine",
"value": 4,
"border": "US-Canada Border",
"measure": "Buses",
"latitude": 44.8594395785,
"longitude": -66.98007566,
"port_code": "0103",
"port_name": "Eastport"
},
{
"id": "0103/2026-8/Bus Passengers",
"month": "2026-08-01",
"state": "Maine",
"value": 144,
"border": "US-Canada Border",
"measure": "Bus Passengers",
"latitude": 44.8594395785,
"longitude": -66.98007566,
"port_code": "0103",
"port_name": "Eastport"
},
{
"id": "0103/2026-8/Pedestrians",
"month": "2026-08-01",
"state": "Maine",
"value": 90,
"border": "US-Canada Border",
"measure": "Pedestrians",
"latitude": 44.8594395785,
"longitude": -66.98007566,
"port_code": "0103",
"port_name": "Eastport"
},
{
"id": "0103/2026-8/Personal Vehicle Passengers",
"month": "2026-08-01",
"state": "Maine",
"value": 27077,
"border": "US-Canada Border",
"measure": "Personal Vehicle Passengers",
"latitude": 44.8594395785,
"longitude": -66.98007566,
"port_code": "0103",
"port_name": "Eastport"
},
{
"id": "0103/2026-8/Personal Vehicles",
"month": "2026-08-01",
"state": "Maine",
"value": 14933,
"border": "US-Canada Border",
"measure": "Personal Vehicles",
"latitude": 44.8594395785,
"longitude": -66.98007566,
"port_code": "0103",
"port_name": "Eastport"
}
]Evidence behind every value
- Each run keeps the publisher's exact response, hashed with SHA-256. This sample came from a response with hash
36322661989cb4d027b08de5b9835f276ef9b4deb70698cdeffd8f13a41801d4. - Every value records where it came from in that response: a JSON Pointer into the retained capture.
- Each run gets a signed manifest (Ed25519) timestamped by an RFC 3161 authority: this run's manifest hash is
75ca81da70b9b29f1265383757a44c42ef39eb8c26e819a2ec4e232d2464979d, timestamped October 12, 2026. - The compliance state at capture is recorded with the evidence: robots.txt hash and verdict, AI-preference signals, crawler identity and the usage rights below.
- Download any run as an evidence bundle (WACZ) and check it offline, without trusting SourceFinch:
sourcefinch verify-bundle run.wacz.
Terms posture and usage rights
- Terms
- Automated access permitted · publisher's terms
- robots.txt
- Allows this path · SHA-256
770cc579b77b57d8… - AI-preference signals
- None observed at review
- Public record
- Yes. Border Crossing Entry Data, Bureau of Transportation Statistics from U.S. Customs and Border Protection counts; U.S. government work, 17 U.S.C. 105.
- Reviewed
- October 12, 2026; next review April 12, 2027
- Licence basis
- U.S. government work (public domain)
- Commercial use
- Allowed
- Redistribution
- Allowed
- Attribution
- Required (text below)
The dataset's metadata on data.bts.gov marks it Public Domain (U.S. government public domain label) and names U.S. Customs and Border Protection as the source; works of the U.S. government are not subject to copyright (17 U.S.C. 105). Anonymous SODA API access needs no key; data.bts.gov/robots.txt allows the resource path and asks for a 1 second crawl delay.
Bureau of Transportation Statistics, Border Crossing Entry Data (source: U.S. Customs and Border Protection). SourceFinch is independent of and not endorsed by BTS or CBP.
Usage rights travel with every record SourceFinch delivers (API, exports, webhooks and evidence bundles). They are our documented understanding of the publisher's stated terms, not legal advice.
Reliability
- Runs, last 30 days
- 1
- Green
- 100%
- Failed
- 0
- Median run time
- 1.0 s
- Latest run
- success, October 12, 2026
Measured on completed runs of this recipe version across SourceFinch, anonymized, within a rolling 30-day window. First successful observation: October 12, 2026. A new recipe has only the history collected since that date; this is not a 30-day uptime guarantee.
Use it
Every surface creates the same monitor from this Verified recipe. Monitors keep record history, report field-level changes and deliver by webhook, export or email. You confirm you have the right to collect the source (rights: true).
Console
Open this recipe in the console: it preserves the reviewed URL, fields and record key. Review the latest captured sample, confirm source rights, and choose a schedule before creating your monitor.
Portable recipe
Copy into the console's Import or share a recipe panel to customize fields, types and schedules. This configuration contains no captured records or workspace IDs.
{
"schema": "sourcefinch/source@1",
"name": "U.S. land border crossing entries by port, monthly",
"url": "https://data.bts.gov/resource/keg4-3bc2.json?$select=port_code%7C%7C%27/%27%7C%7Cdate_extract_y(date)%7C%7C%27-%27%7C%7Cdate_extract_m(date)%7C%7C%27/%27%7C%7Cmeasure%20as%20id,port_name,state,port_code,border,date,measure,value,latitude,longitude&$order=date%20DESC,port_code,measure&$limit=1000",
"recipe": {
"mode": "http",
"format": "json",
"items": "[*]",
"fields": {
"id": "id",
"month": "date",
"state": "state",
"value": "value",
"border": "border",
"measure": "measure",
"latitude": "latitude",
"longitude": "longitude",
"port_code": "port_code",
"port_name": "port_name"
},
"required": [
"id",
"port_code",
"month",
"measure"
],
"types": {
"latitude": "number",
"longitude": "number",
"month": "date",
"value": "integer"
}
},
"schedule": "daily",
"key_field": "id"
}source.json
The request body used by the API, CLI and SDK examples.
{
"name": "U.S. land border crossing entries by port, monthly",
"url": "https://data.bts.gov/resource/keg4-3bc2.json?$select=port_code%7C%7C%27/%27%7C%7Cdate_extract_y(date)%7C%7C%27-%27%7C%7Cdate_extract_m(date)%7C%7C%27/%27%7C%7Cmeasure%20as%20id,port_name,state,port_code,border,date,measure,value,latitude,longitude&$order=date%20DESC,port_code,measure&$limit=1000",
"recipe": {
"mode": "http",
"format": "json",
"items": "[*]",
"fields": {
"id": "id",
"month": "date",
"state": "state",
"value": "value",
"border": "border",
"measure": "measure",
"latitude": "latitude",
"longitude": "longitude",
"port_code": "port_code",
"port_name": "port_name"
},
"required": [
"id",
"port_code",
"month",
"measure"
],
"types": {
"month": "date",
"value": "integer",
"latitude": "number",
"longitude": "number"
}
},
"key_field": "id",
"schedule": "daily",
"rights": true,
"catalog": {
"slug": "bts-border-crossing-entries",
"version_id": "b67743da-bbfb-418b-9a3a-a8cc7ff206a4"
}
}REST API
Create an API key under Console → API keys. Reference: /docs/api.
# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/bts-border-crossing-entries -H "Authorization: Bearer $SOURCEFINCH_API_KEY"
# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
-H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d @source.json
# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
-H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"CLI
The sourcefinch CLI is not on npm yet; see /docs/cli.
sourcefinch login
sourcefinch catalog get bts-border-crossing-entries --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_IDTypeScript SDK
The SDK is not on npm yet; see /docs/sdk.
import { SourceFinch } from "@sourcefinch/sdk";
const sf = new SourceFinch({ apiKey: process.env.SOURCEFINCH_API_KEY });
const entry = await sf.catalog.get("bts-border-crossing-entries");
const source = await sf.sources.create({
catalog: { slug: entry.slug, version_id: entry.recipe.version_id },
name: entry.name.slice(0, 100),
url: entry.acquisition_path.endpoint,
recipe: entry.recipe.definition,
key_field: entry.recipe.key_field,
schedule: entry.recipe.schedule,
rights: true, // you confirm you have the right to collect this source
});
const run = await sf.runs.wait((await sf.runs.create(source.id)).id);
console.log(run.status);MCP
Remote MCP server with OAuth; see /docs/mcp.
claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp
# then ask your agent:
"Use SourceFinch to monitor U.S. land border crossing entries by port, monthly: get_catalog_source bts-border-crossing-entries,
then create_source with its create_source_args (dry run first), then run_source."Pricing
Each check is one run, whatever the number of records, and failed runs are free. On its default daily schedule this source uses about 30 runs a month, which fits the Free plan's 300 runs. It uses HTTP acquisition, so no browser runs are needed. See plans.
Guides using this source
Related sources
More from Bureau of Transportation Statistics (U.S. Department of Transportation) and in transport & logistics.
SourceFinch is independent and is not affiliated with or endorsed by Bureau of Transportation Statistics (U.S. Department of Transportation). This page describes u.s. land border crossing entries by port, monthly as SourceFinch acquires it.