US Immigration Visa Dashboard

28 years of nonimmigrant visa data from the U.S. Department of State — every visa, every country, every trend.

V5 Interactive
204.0M
Visas Issued All-Time
14.2M
FY2024 Applications
11.0M
FY2024 Issued
3.3M
FY2024 Refused
202
Countries
📊

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.

151K
India H-1B
32K
China H-1B
+96.3%
China YoY
Education

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.

Work Visa

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.

All-time issued: 4.1M | FY2024 refusal rate: 2.8%
Student 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.

All-time issued: 9.9M | FY2024 refusal rate: 41.0%
Tourist / Business

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.

FY2024: 9M applications | 27.8% refusal rate
Intracompany Transfer

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.

FY2024 refusal rate: 6.0%
Exchange Visitor

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.

FY2024: 362K applications | 11.0% refusal rate
Fiancé(e) Visa

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.

FY2024: 53.7K applications | 11.4% refusal rate
Overview

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.

H-1B Deep Dive

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.

Note: H-1B data is broken down by country of origin, not by occupation. Occupation-level data (e.g., Software Engineers, Mechanical Engineers) is published separately by USCIS and is planned for a future update.
FY2024 Snapshot

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.

Note: India's H-1B dominance (150K+) is real data, not a display bug. The color scale uses logarithmic normalization so smaller countries remain visible. Values shown as text labels on each bar.
Refusals & Rejections

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).

By the Numbers

Stats That Tell a Story

54%
COVID Collapse
Visa issuances dropped 54% from FY2019 to FY2020 — from 8.7M to 4.0M. The biggest single-year drop in modern immigration history.
+96%
China's Comeback
China's total NIV issuances nearly doubled from FY2023 to FY2024, surging 96.3% year-over-year as post-COVID travel demand exploded.
82.8%
Highest Refusal Rate
Laos has the highest B-visa adjusted refusal rate in FY2024. Over 4 in 5 Laotian tourist/business visa applicants are denied.
1.5%
Lowest Refusal Rate
UAE citizens enjoy the lowest B-visa refusal rate at just 1.5%. Wealth, stability, and strong return rates make the difference.
41%
Student Visa Rejections
F-1 student visas have a 41% refusal rate — 278,553 applicants were denied in FY2024 alone. Consular officers must be convinced you'll return home.
204.0M
All-Time Visas Issued
Over 200 million nonimmigrant visas issued from FY1997 to FY2024. That's more than the combined populations of the UK, France, and Canada.
4.7x
India vs China H-1B
India received 4.7x more H-1B visas than China in FY2024. India's dominance in tech outsourcing and IT services drives this gap.
9M
Tourist Visa Apps
B-1/B-2 (tourist/business) visas alone generated 9 million applications in FY2024 — 63% of all NIV applications worldwide.
Interactive Explorer

Build Your Own Chart

Pick any visa type and any combination of countries to explore 28 years of data.

Behind the Scenes

AI & Pipeline Stats

This entire dashboard — data pipeline, analysis, and visualization — was built in a single session with AI assistance.

Model
Claude Opus 4.6
Anthropic's frontier reasoning model
Pipeline
5 ETL Scripts, 6 DuckDB Tables
3 data sources ingested and normalized
Data Points Processed
5,878 Total
5,564 visa issuance rows + 81 workload rows + 199 refusal rates + 34 country mappings
PDF Pages Parsed
10 Pages
3 workload + 7 refusal rate tables extracted via pdfplumber
Country Standardization
34 Mappings
Cross-referenced across 3 tables with different naming conventions
Dashboard Versions
V1 → V2 → V3 → V4 → V5
V1 (broken) → V2 (fixed) → V3 (storytelling) → V4 (interactive) → V5 (editorial)
Session
Single Session
February 14, 2026
Tech Stack
Python 3.13 + DuckDB
Plotly.js + pdfplumber for full pipeline
Architecture

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.

Raw Sources
State Dept ExcelFYs97-24_NIVDetailTable.xlsx — 28 sheets, one per fiscal year
NIV Workload PDFFY2024 workload by visa category — 3 pages of tables
B-Visa Refusal PDFFY2024 adjusted refusal rates by nationality — 7 pages
▼ ▼ ▼
ETL Scripts
merge_niv_sheets.pyReads 28 Excel sheets → standardizes columns → single CSV (5,564 rows)
extract_refusal_data.pypdfplumber extracts tables from PDF → cleans rates → CSV
standardize_countries.py34 name mappings across 3 tables with different naming conventions
▼ ▼ ▼
DuckDB Tables
visa_issuances5,564 rows · 28 FYs × 199 countries · Primary fact table
niv_workload81 rows · FY2024 applications, issued, refused by category
b_visa_refusals199 rows · Adjusted refusal rates by nationality
country_mapping34 rows · Bridge table for name standardization
b_visa_workload_by_countryDerived · issued × rate / (1 - rate) = estimated refused
niv_workload_by_countryDerived · National totals disaggregated by country proportion
Output
dashboard.htmlSingle-file static site → GitHub Pages · All data embedded as JSON

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.

Methodology

How This Dashboard Was Built

Data Sources

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).

Estimated Refusals

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.

Tech Stack

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.