CoolFace
Datasetpublic

Nason/eoir-database

EOIR Immigration Court Database A clean, queryable DuckDB database built from the EOIR FOIA data dump -- the most comprehensive public dataset on U.S. immigration court proceedings. 173,278,686 rows across 97 tables covering every immigration court case since the 1970s. Built with eoir-database. Quick Start DuckDB CLI INSTALL httpfs; LOAD httpfs; ATTACH 'https://huggingface.co/datasets/Nason/eoir-database/resolve/main/eoir.duckdb' AS eoir… See the full description on the dataset page: https://huggingface.co/datasets/Nason/eoir-database.

sourceHugging Faceotherupdated 9d agoView on Hugging Face
0likes430downloads
Dataset Card

EOIR Immigration Court Database

A clean, queryable DuckDB database built from the EOIR FOIA data dump -- the most comprehensive public dataset on U.S. immigration court proceedings.

173,278,686 rows across 97 tables covering every immigration court case since the 1970s.

Built with eoir-database.

Quick Start

DuckDB CLI

sql
INSTALL httpfs;
LOAD httpfs;
ATTACH 'https://huggingface.co/datasets/Nason/eoir-database/resolve/main/eoir.duckdb' AS eoir (READ_ONLY);

-- Query immediately
SELECT court_name, COUNT(*) as cases
FROM eoir.v_proceedings_full
WHERE CASE_TYPE = 'RMV'
GROUP BY court_name
ORDER BY cases DESC
LIMIT 10;

Python

python
import duckdb
con = duckdb.connect()
con.sql("INSTALL httpfs; LOAD httpfs;")
con.sql("""
    ATTACH 'https://huggingface.co/datasets/Nason/eoir-database/resolve/main/eoir.duckdb'
    AS eoir (READ_ONLY)
""")
con.sql("SELECT * FROM eoir._metadata").show()

DuckDB uses HTTP range requests, so only the pages needed for your query are downloaded.

Tables

TableDescriptionRows
scheduleHearing schedule entries with calendar type and adjournments48,049,351
representativesAttorney representation records26,890,405
chargesIndividual charges per proceeding19,176,677
proceedingsProceedings: hearings, decisions, judges, charges16,817,359
applicationsApplications for relief (asylum, cancellation, etc.)16,370,148
casesCase-level demographics, custody, dates, attorney info12,821,375
custody_historyCustody status change records10,219,825
motionsMotions filed in proceedings9,025,261
juvenile_historyJuvenile designation records3,176,275
lead_riderLead/rider case relationships2,667,982
case_identifiersCase ID cross-references2,633,378
bondsBond hearing records and amounts1,643,732
appealsAppeals to Board of Immigration Appeals1,569,505
appeal2Loaded from tblAppeal2.csv1,272,470
attorneysAttorney registry410,696
appeal_fed_courtsLoaded from tblAppealFedCourts.csv183,070
case_priority_historyPriority code changes151,124
three_mbr_referralsLoaded from tblThreeMbrReferrals.csv84,810
pro_bonoPro bono screening records67,909
lu_judge_base_cityLoaded from tblLookupJudgeBaseCity.csv12,565
lu_instaLoaded from tblLookupINSTA.csv9,611
lu_inmateLoaded from tblLookupInmate.csv4,850
lu_inmate_housingLoaded from tblInmateHousing.csv4,752
lu_responsible_partyLoaded from tblResponsibleParty.csv3,381
lu_judgeImmigration judge codes1,785
lu_insaddressLoaded from tblLookUpINSAddress.csv1,469
lu_hearing_locationHearing location codes1,373
lu_inslocLoaded from tblLookupINSLOC.csv1,020
lu_biaLoaded from tblLookupBIA.csv878
lu_languageLanguage codes743
lu_holidaysLoaded from tblLookupHolidays.csv613
lu_noticeLoaded from tblLookupNOTICE.csv598
lu_district_locationLoaded from tblLookupDistrictLocation.csv289
lu_office_locationLoaded from tblLookupOfficeLocation.csv265
lu_alien_natLoaded from tblLookupAlienNat.csv256
lu_countryLoaded from tblLookupCountry.csv254
lu_chargesCharge codes and descriptions252
lu_nationalityNationality/country codes251
lu_appeal_issuesLoaded from tblLookupAppealIssues.csv248
lu_biaclusterLoaded from tblLookup_BIACluster.csv243
lu_court_decisionCourt decision codes (by case type)217
lu_bar_code_typeLoaded from tblBarCodeType.csv141
lu_adjournmentAdjournment reason codes124
lu_case_identifierLoaded from tblLookUpCaseIdentifier.csv122
lu_base_cityImmigration court locations97
lu_in_tr_prLoaded from tblLookupInTrPr.csv94
lu_insofficeLoaded from tblINSoffice.csv74
lu_motion_typeMotion type codes72
lu_stateU.S. state codes59
lu_bia_decisionBIA decision codes55
lu_special_issueLoaded from tblLookupSpecialIssue.csv43
lu_applicationApplication type codes40
lu_teamsLoaded from tblTeams.csv37
lu_hold_reasonLoaded from tblLookupHoldReason.csv37
lu_schedule_typeSchedule type codes36
lu_callup_reasonsLoaded from tblLookupCallup_Reasons.csv30
lu_cal_typeCalendar type codes29
lu_dddecision_typesLoaded from tblLookUpDDDecisionTypes.csv23
lu_panelsLoaded from tblPanels.csv20
lu_appeal_typeLoaded from tbllookupAppealType.csv19
lu_board_motionsLoaded from tblLookupBoardMotions.csv18
lu_priorityLoaded from tblLookupPriority.csv16
lu_br_deduct_codesLoaded from tblbrDeductCodes.csv15
lu_app_decisionApplication decision codes14
lu_intr_pr_langLoaded from tblLookupIntrPrLang.csv14
lu_transcribersLoaded from tblLookupTranscribers.csv14
lu_case_typeCase type codes13
lu_dec_codeLoaded from tblDecCode.csv12
lu_filing_method_partyLoaded from tblLookupFilingMethodParty.csv10
lu_filed_byLoaded from tblLookupFiledBy.csv9
lu_comment_type_boardLoaded from tblLookupCommentTypeBoard.csv9
lu_contact_changeLoaded from tblLookupContactChange.csv9
lu_torture_conv_idLoaded from tblTortureConvID.csv8
lu_ins_clock_entry_statusLoaded from tblLookupINSClockEntryStatus.csv8
lu_3_mbr_referred_reasonLoaded from tblLookup3MbrReferredReason.csv7
lu_categoryLoaded from tbllookup_Category.csv7
lu_voteLoaded from tblLookupVote.csv7
lu_juvenileLoaded from tblLookup_Juvenile.csv6
lu_service_methodLoaded from tblLookupService_Method.csv6
lu_case_priorityLoaded from tblLookup_CasePriority.csv6
lu_fee_statusLoaded from tblLookupFeeStatus.csv5
lu_consulted_withLoaded from tblLookupConsultedWith.csv5
lu_biadecision_typeLoaded from tblLookupBIADecisionType.csv5
lu_in_tr_pr_agendaLoaded from tblLookupInTrPrAgenda.csv5
lu_fed_court_decisionLoaded from tblLookupFedCourtDecision.csv4
lu_oaresponseLoaded from tblLookupOAResponse.csv4
lu_componentsLoaded from tblLookupComponents.csv4
lu_filing_methodLoaded from tblLookupFiling_Method.csv4
lu_final_dispositionLoaded from tblLookupFinalDisposition.csv4
lu_claimed_issueLoaded from tblLookupClaimedIssue.csv4
lu_custody_statusCustody status codes3
lu_fee_typeLoaded from tblLookupFeeType.csv3
lu_allegation_stmtLoaded from tblLookUpAllegationStmt.csv3
lu_regionLoaded from tblLookupRegion.csv2
lu_sexLoaded from tblLookupSex.csv2
lu_in_tr_pr_lang_groupLoaded from tblLookupInTrPrLangGroup.csv2
lu_fed_court_remand_toLoaded from tblLookupFedCourtRemandTo.csv2

Data Source

EOIR FOIA Library -- updated monthly by the Executive Office for Immigration Review (U.S. Department of Justice). This is public domain U.S. government data.

License

Database build code: MIT. Underlying data: public domain (U.S. government work).

GitHub

Full source code, build instructions, and example analyses: github.com/ian-nason/eoir-database

Changelog

2026-09-14 — Data refresh (DOJ August 2026 file)

  • —Rebuilt from the EOIR FOIA case-data file dated 2026-09-01 (the "August 2026" release). Total rows 169,184,982 → 173,278,686 across 97 tables (+3 views); cases 12,821,375, proceedings 16,817,359, charges 19,176,677, schedule 48,049,351. Proceedings filed in 2026 to date: 426,758.
  • —Value normalization (trim, strip NUL bytes, blank → NULL) is applied at load, so charge-code and language lookups join at 100.00% without the July in-place repair. The builder now fails instead of silently loading a table untyped (--allow-untyped-fallback to override), always starts from an empty file, and exits non-zero if any audit check fails (lookup coverage, NUL bytes, padding, core tables non-empty).
  • —DuckDB memory capped at 6 GB with 4 threads for the 10 GB build VM (overridable via DATAPONDMEMORYLIMIT / DATAPONDTHREADS); `publishto_hf.py --card-only`.
  • —Known caveats unchanged: a handful of upstream dates are in the future (one proceeding dated 2029); cap dates to 1950-2035 in analysis.

2026-07-06 — Full refresh + data-quality audit

Rebuilt from the latest DOJ EOIR FOIA release (proceedings through 2026) and repaired after an independent SQL-verified audit.

Data changes

  • —169,184,982 rows across 97 tables (data through 2026; 248k proceedings filed in 2026).
  • —All VARCHAR values normalized: trailing-space padding trimmed, literal NUL bytes stripped, blank strings converted to NULL (214 columns affected).

Fixes

  • —Charge-code lookup joins went from 76.97% to 100.00% coverage — the gap was whitespace padding in the source export, not missing lookup codes as previously documented.
  • —Language lookups no longer silently drop 1.7M trailing-space 'SP ' (Spanish) rows.
  • —README quickstart query corrected (filing dates live on proceedings, not cases).

Known caveats (see README for the full list)

  • —cases.C_BIRTHDATE is 100% NULL (redacted at source) — no age analyses.
  • —~45% of proceedings have no usable decision code once blanks are counted.
  • —Proceedings (16.5M) vs cases (12.7M): counting proceedings overcounts people ~1.3x. Cap dates to 1950-2035 before computing durations.