TSA Checkpoint Travel Numbers (Daily, Weekly & YoY) avatar

TSA Checkpoint Travel Numbers (Daily, Weekly & YoY)

Pricing

from $2.00 / 1,000 result rows

Go to Apify Store
TSA Checkpoint Travel Numbers (Daily, Weekly & YoY)

TSA Checkpoint Travel Numbers (Daily, Weekly & YoY)

Daily U.S. TSA airport checkpoint traveler counts from tsa.gov as clean JSON, with Monday-Sunday weekly averages calculated like Kalshi's TSA market and year-over-year change. History from 2019.

Pricing

from $2.00 / 1,000 result rows

Rating

0.0

(0)

Developer

Japan Open Data

Japan Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Categories

Share

TSA Checkpoint Travel Numbers API (Daily, Weekly Average & YoY)

Get the official U.S. TSA checkpoint numbers — how many travelers passed through TSA airport security checkpoints each day — as clean JSON, plus Monday–Sunday weekly averages and year-over-year change. Data comes straight from the TSA "checkpoint travel numbers" page on tsa.gov, with full daily history back to January 1, 2019.

  • Daily TSA passenger volumes: one row per day — date, weekday, travelers screened, and the same weekday one year earlier.
  • Weekly averages the way prediction markets settle: sum of the published daily numbers from Monday to Sunday ÷ number of published days. An in-progress week is averaged over the days published so far, with daysPublished and isComplete so you always know where the week stands.
  • Year-over-year (YoY) change against the same weekday 52 weeks (364 days) earlier, so weekday effects cancel out.
  • No API key, no login, runs in about 4 seconds. Pay only for the rows you get.

What can it be used for?

  1. Trading weekly TSA markets (e.g. Kalshi's "TSA check-ins" market). Pull the current week's running average, the number of days still missing, and last year's same-weekday numbers in one call — from a bot, a spreadsheet, or a scheduled task every weekday morning.
  2. Airline, travel and macro analysis. Track U.S. air travel demand with a daily high-frequency indicator: build weekly series, YoY growth, holiday comparisons (Thanksgiving, July 4th, spring break) and dashboards, with clean history since 2019.
  3. AI agents and automations. Give an AI agent (via the Apify API or MCP) a reliable tool to answer "How many people did TSA screen yesterday?" or "What is this week's TSA average so far vs. last year?" — flat JSON, one row per day or week, with a status on every row.

How to use it

All inputs are optional. Run it with an empty input {} to get the latest 14 published days.

InputTypeDefaultWhat it does
mode"daily" or "weekly""daily"daily: one row per published day. weekly: one row per Monday–Sunday week with the weekly average.
startDateYYYY-MM-DDemptyFirst date to return (2019-01-01 or later). Empty = latest 14 days (daily) or latest 4 weeks (weekly). In weekly mode every week that overlaps the range is returned in full.
endDateYYYY-MM-DDemptyLast date to return. Empty = the latest published day.
includeYoYbooleantrueAdds last year's number for the same weekday 52 weeks earlier and the % change.

Input examples

Latest 14 days (default):

{}

Current week's running average plus the previous 3 weeks:

{ "mode": "weekly" }

Full history for one year, one row per day:

{ "mode": "daily", "startDate": "2025-01-01", "endDate": "2025-12-31" }

Output example — daily

Real output from a run on 2026-09-18 ({}), last row shown:

{
"status": "ok",
"date": "2026-09-17",
"dayOfWeek": "Thursday",
"travelers": 2700658,
"weekStart": "2026-09-14",
"lastYearDate": "2025-09-18",
"travelersLastYear": 2788191,
"yoyChangePct": -3.14,
"sourceUrl": "https://www.tsa.gov/travel/passenger-volumes",
"fetchedAt": "2026-09-18T23:29:53Z"
}

Output example — weekly

Real output from the same day ({"mode": "weekly"}). A complete week and the in-progress week (Monday–Thursday published so far):

{
"status": "ok",
"weekStart": "2026-09-07",
"weekEnd": "2026-09-13",
"daysPublished": 7,
"isComplete": true,
"lastPublishedDate": "2026-09-13",
"travelersTotal": 16530937,
"weeklyAverage": 2361562.43,
"lastYearWeekStart": "2025-09-08",
"lastYearWeeklyAverage": 2367554.86,
"lastYearFullWeekAverage": 2367554.86,
"yoyChangePct": -0.25,
"sourceUrl": "https://www.tsa.gov/travel/passenger-volumes",
"fetchedAt": "2026-09-18T23:30:12Z"
}
{
"status": "ok",
"weekStart": "2026-09-14",
"weekEnd": "2026-09-20",
"daysPublished": 4,
"isComplete": false,
"lastPublishedDate": "2026-09-17",
"travelersTotal": 9368701,
"weeklyAverage": 2342175.25,
"lastYearWeekStart": "2025-09-15",
"lastYearWeeklyAverage": 2400600.25,
"lastYearFullWeekAverage": 2483007.57,
"yoyChangePct": -2.43,
"sourceUrl": "https://www.tsa.gov/travel/passenger-volumes",
"fetchedAt": "2026-09-18T23:30:12Z"
}

Invalid input and date ranges with no data return one free row that says what to fix:

{"status": "error", "error": "\"mode\" must be \"daily\" (one row per day) or \"weekly\" (one row per Monday-Sunday week)."}
{"status": "not_found", "error": "TSA has no published numbers between 2027-01-01 and 2027-01-01; choose dates between 2019-01-01 and 2026-09-17 (the latest published day)."}

Output fields

FieldModeMeaning
statusbothok, not_found or error
date, dayOfWeekdailyThe day (YYYY-MM-DD) and its weekday name
travelersdailyTravelers screened at TSA checkpoints nationwide that day
weekStartbothMonday of the week the row belongs to
lastYearDate, travelersLastYeardailySame weekday 364 days earlier and its number
weekEndweeklySunday of the week
daysPublished, isCompleteweeklyHow many days of the week TSA has published (1–7); true when all 7 are in
lastPublishedDateweeklyLatest published day inside the week
travelersTotal, weeklyAverageweeklySum of the published days, and that sum ÷ daysPublished
lastYearWeekStartweeklyMonday of the same week one year earlier (52 weeks back)
lastYearWeeklyAverageweeklyLast year's average over the same weekdays as published this week (like-for-like for an in-progress week)
lastYearFullWeekAverageweeklyLast year's full 7-day average for that week
yoyChangePctboth% change vs. last year (daily: vs. travelersLastYear; weekly: vs. lastYearWeeklyAverage)
sourceUrl, fetchedAtbothThe tsa.gov page the numbers came from and when it was read (UTC)
errorerror rowsOne sentence explaining what went wrong and how to fix it

With includeYoY: false, the last-year fields are left out.

How the weekly average is calculated

  • Weeks run Monday to Sunday.
  • weeklyAverage = sum of the daily numbers TSA has published for that week ÷ the number of days published. Missing days are not filled in or estimated.
  • This matches the weekly-average wording used in public prediction-market contracts on TSA check-ins (such as Kalshi's). Always read the contract of the market you trade for the exact rules — this Actor only reports what tsa.gov shows at the time of the run.
  • YoY compares with the same weekdays 52 weeks earlier, so a Monday is compared with a Monday. Holidays that move between weeks (Thanksgiving, Easter, July 4th) still cause large daily YoY swings.

Pricing

This Actor uses Pay per event pricing — you pay for rows returned, not for compute time:

EventPriceWhen
Result row (result-row)$0.002 per row ($2 per 1,000)Each ok row: one day (daily mode) or one week (weekly mode)
Actor start (apify-actor-start)$0.002 per runOnce at the start of each run
  • error and not_found rows are free.
  • Example: the default run (latest 14 days) costs about $0.03. A weekly check ({"mode": "weekly"}, 4 rows) costs about $0.01.
  • A bot that checks the weekly average once every weekday morning pays about $0.22 per month.
  • The full daily history since 2019 (about 2,800 rows) costs about $5.60 once — then fetch only new days.
  • Use the maximum cost per run option when you start the Actor to cap spending. If the limit is reached, the Actor stops cleanly and says so in the status message.

Use via API & MCP (AI agents)

Apify API (HTTP). Run the Actor and get the rows in one call:

curl -X POST "https://api.apify.com/v2/acts/japan-open-data~tsa-checkpoint-throughput/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode": "weekly"}'

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("japan-open-data/tsa-checkpoint-throughput").call(run_input={"mode": "weekly"})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["weekStart"], row["daysPublished"], row["weeklyAverage"], row.get("yoyChangePct"))

MCP (Claude, ChatGPT, Cursor and other AI agents). Add this Actor as a tool through the Apify MCP server (https://mcp.apify.com), for example with ?tools=japan-open-data/tsa-checkpoint-throughput. The input has only four optional fields, so agents can call it with {}.

Recommended agent settings:

  • "Latest TSA number" / "yesterday's TSA count" → {} and read the last row, or set startDate and endDate to the same day to get a single row (cheapest).
  • "This week's TSA average so far" → {"mode": "weekly", "startDate": "<any date this week>"} → one row with weeklyAverage, daysPublished and isComplete.
  • Always check status; on error/not_found show the error sentence to the user.

Data source and attribution

  • Source: U.S. Transportation Security Administration (TSA), "TSA checkpoint travel numbers" — https://www.tsa.gov/travel/passenger-volumes and the yearly archive pages (for example https://www.tsa.gov/travel/passenger-volumes/2025).
  • License: TSA states that information presented on its website is public information and may be distributed or copied (https://www.tsa.gov/privacy-policy). The numbers are U.S. federal government data.
  • Not affiliated: This Actor is an independent project. It is not affiliated with, endorsed by or sponsored by the TSA, the U.S. Department of Homeland Security, or Kalshi. It does not use any TSA logos or seals.
  • Access: The Actor reads only the public passenger-volumes pages (normally 1–3 pages per run, at most 8), identifies itself in the User-Agent, and does not bypass any protection.
  • No personal data: only nationwide daily totals and dates.
  • Not financial advice. Verify numbers on tsa.gov before relying on them for trading or settlement.

Known limitations

  • Update timing. TSA updates the page Monday–Friday by about 9 a.m. U.S. Eastern time. Saturday's and Sunday's numbers usually appear on Monday morning, so a Monday–Sunday week is normally complete only on the following Monday. During holiday weeks updates may be a day or more late.
  • Revisions. TSA occasionally corrects published numbers. Every run reads the live page, so a re-run returns the corrected value; older run results are not changed.
  • Nationwide totals only. No airport-, checkpoint- or hour-level numbers.
  • Early January 2019. Data starts on 2019-01-01 (a Tuesday), so the first week (2018-12-31 to 2019-01-06) shows daysPublished: 6 and isComplete: false.
  • Early January each year. Right after New Year, the Actor combines the new year's page with the previous year's archive page. If TSA changes how it splits pages around the new year, the first days of January may be delayed until the next run.
  • Page changes. tsa.gov has no official API; if TSA redesigns the page, the Actor returns one error row (not charged) and the run is marked as failed until it is fixed.
  • Cost limit. If your maximum cost per run is lower than the price of one row, the dataset stays empty and the status message explains why.

More from Japan Open Data

Feedback

Found a wrong number or need another field? Open an issue on the Actor's Issues tab with your input and what you expected.