US Immigration Visa Dashboard
28 years of nonimmigrant visa data from the U.S. Department of State — every visa, every country, every trend.
India dominates H-1B at 4.7x China's volume
In FY2024, India received 151K H-1B visas vs China's 32K. Meanwhile, China's total NIV issuances surged +96.3% year-over-year — the biggest jump of any major country.
What is a Nonimmigrant Visa (NIV)?
A nonimmigrant visa allows foreign nationals to enter the U.S. temporarily — for tourism, work, study, or cultural exchange. Unlike immigrant visas (green cards), NIVs do not grant permanent residency. There are over 90 NIV categories, each with different rules, quotas, and approval rates.
H-1B — Specialty Occupation
For professionals in fields like tech, engineering, medicine, and finance. Requires a bachelor's degree or equivalent. Subject to an annual cap of 65,000 (plus 20,000 for U.S. master's degrees). The most sought-after work visa.
F-1 — Academic Student
For full-time students at accredited U.S. colleges, universities, and language programs. Allows limited on-campus work and post-graduation OPT (Optional Practical Training) for up to 3 years in STEM fields.
B-1/B-2 — Visitor Visa
B-1 is for business (meetings, conferences, negotiations). B-2 is for tourism, medical treatment, or visiting family. B-1/B-2 combo is the most commonly issued visa in the world — 6.5 million in FY2024 alone.
L-1 — Intracompany Transferee
For employees transferring from a foreign office to a U.S. branch of the same company. L-1A for managers/executives, L-1B for specialized knowledge workers. No annual cap — popular with large multinationals.
J-1 — Exchange Visitor
For participants in approved exchange programs: research scholars, professors, au pairs, interns, and cultural exchange visitors. Some J-1 holders are subject to a 2-year home residency requirement before applying for other visas.
K-1 — Fiancé(e) of U.S. Citizen
Allows a foreign fiancé(e) to enter the U.S. to marry their American partner within 90 days of arrival. After marriage, the K-1 holder can apply for adjustment of status to permanent residence.
The Big Picture: 28 Years of NIV Trends
From the post-9/11 security tightening to the COVID-19 collapse and the 2024 recovery boom — every major policy shift shows up in the data. Select countries to compare individual trends.
The H-1B Race: Who's Getting America's Work Visas?
India has dominated H-1B for over two decades, receiving more visas than the next 9 countries combined. Use the dropdown to isolate individual countries.
Who Got the Most Visas in FY2024?
Mexico leads overall volume driven by proximity and B-1/B-2 tourist visas. India dominates work categories. Use the dropdown to explore different visa types.
The Other Side: Who Gets Denied?
In FY2024, the U.S. refused 3.3M visa applications out of 14.2M total — a 23% overall refusal rate. The "adjusted refusal rate" accounts for cases initially refused but later approved (overcomes).
Stats That Tell a Story
Build Your Own Chart
Pick any visa type and any combination of countries to explore 28 years of data.
AI & Pipeline Stats
This entire dashboard — data pipeline, analysis, and visualization — was built in a single session with AI assistance.
Data Model & Pipeline Architecture
From raw government PDFs and Excel files to interactive dashboard — here's how the data flows through 3 ETL scripts, 6 DuckDB tables, and one Python generator.
How the 6 Tables Connect
visa_issuances (Primary)
The core fact table. Every chart starts here. JOIN key: country + fiscal_year. Contains 90+ NIV category columns (H-1B, F-1, B-1,2, L-1, etc.) with issuance counts per country per year.
b_visa_refusals → b_visa_workload
Refusal rates by nationality are JOINed to B-visa issuance counts via country_mapping. Derived formula: est_refused = issued × rate / (1 - rate). This is an estimate — State Dept doesn't publish per-country refusal counts.
niv_workload → niv_workload_by_country
National-level workload totals (applications, issued, refused) are disaggregated to country-level using each country's share of issuances from visa_issuances.
country_mapping (Bridge)
Maps 34 different country names across tables. Example: "Korea, South" in visa_issuances matches "South Korea" in b_visa_refusals. Without this, JOINs fail silently — the worst kind of data bug.
How This Dashboard Was Built
U.S. Department of State
All data comes from officially published State Department statistics: NIV issuance tables (FY1997–2024), NIV Workload by Visa Category (FY2024), and B-Visa Adjusted Refusal Rates by Nationality (FY2024).
Derived Data Disclaimer
Country-level refusal counts are estimated using the B-visa adjusted refusal rate formula: refused = issued × rate / (1 - rate). The State Dept does not publish per-country refusal counts for all visa types.
DuckDB + Plotly + Python
Data pipeline: Python 3.13 + pandas + pdfplumber for extraction. Analytics: DuckDB as the query engine. Visualization: Plotly.js for interactive charts. All code is open source on GitHub.