How Many Epstein Flights Appear in No Public Source? A Capture–Recapture Estimate
Status: analytical estimate, not a documented fact. Everything below is a model-based inference from the overlap structure of ~20 evidentiary sources. The assumptions of capture–recapture are all violated here to some degree; the honest deliverable is a range with stated directions of bias, not a number.
Analysis date: 2026-07-12. Inputs: network-analysis/data/flight_external.csv (34,919
records), scope-trimmed to 1991-01-01 – 2019-08-10.
Outputs: capture_matrix_summary.csv, estimates.csv (this directory).
Headline
- We observe ≈11,600 distinct flight events after cross-source deduplication (10,692–12,857 depending on merge strictness; main spec 11,563) [VALIDATED: out/capture_recapture/capture_matrix_summary.csv].
- Robust floor: Chao-type lower-bound estimators, after removing a known linkage
artifact, imply the true universe of flights of the kinds these sources can capture
is at least ≈14,000–15,000, i.e. at least ≈2,200–5,300 flights appear in no
source in this corpus [VALIDATED: out/capture_recapture/estimates.csv, rows
Chao2_lower_bound / loose+excl_unparseable / full]. - Central range: dependence-adjusted log-linear models and the better two-source pairs put the plausible total at ≈15,000–25,000 flight events (dark count ≈3,000–13,000). Models that fully parameterize pairwise source dependence permit far larger totals (50,000+), but those fits are weakly identified (see §6) and we do not headline them.
- For Epstein's own aircraft specifically (tail-verified fleet flights, 1999–2019,
the cleanest sub-population): observed 3,707; estimators imply ≈4,100–6,600 total
(≈400–2,900 dark fleet flights, i.e. roughly 10–40% of fleet activity in that period
is in no released record) [VALIDATED: estimates.csv, rows
family|FLEET_ONLY]. - For 1991–1998 the method returns no answer at all — and that non-answer is itself a finding (§5).
A one-sentence version that survives scrutiny: the overlap structure of the released records is consistent with several thousand flight events — a floor of roughly two to five thousand, plausibly on the order of five to fifteen thousand — that appear in no public release, concentrated in the post-2005 era and in travel booked around Epstein rather than flown on his own jets.
1. Observation unit and capture matrix
Unit: a flight event, keyed by (date, origin, destination), with tail-number conflicts splitting clusters. Airport strings were normalized through a cascade (ICAO→IATA, parenthesized codes, "X Airport" forms, a curated city-name dictionary, and a metro-area grouping: NYC = {JFK, LGA, EWR, TEB, HPN}, Palm Beach, Paris = {CDG, ORY, LBG}, USVI = {STT, LSJ, GSJ}, etc.). Three merge levels bound the key-definition uncertainty:
| Key | Definition | Distinct flights |
|---|---|---|
| strict | exact airport, exact date | 12,857 |
| loose (main spec) | metro area, exact date | 11,563 |
| loose±1 | metro area, dates within 1 day | 10,692 |
28,755 of 31,923 in-scope records had a usable date+route. Two sources
(amex_subject, 2,630 records; dojogr_tecsii, 276) contain no route information
(person + date only) and are excluded from the capture matrix entirely — their flights
are simply invisible to this analysis.
Lists. Sources were analyzed at three granularities: raw source (17 lists), source family (5 lists — main spec), and custodian/production (4 lists):
| Family | Sources | What it can see |
|---|---|---|
| LOGBOOK | epsteinexposed, carstensen, dleerdefi | pilot-logbook legs of the fleet |
| OVERSIGHT | jmail, ho_vision | House Oversight release: emails + manifest/logbook pages |
| ESTATE_MAIL | travel_sweep, scheduling_emails, fbo_emails | estate (EFTA) email production |
| BOOKING | amex_invoice, commercial_itinerary, eticket_orbitz, jetsuite, charter_confirmation | commercial/charter bookings, mostly AmEx-derived |
| GOV | dojogr_tecs, pbc_sa_manifest, deposition, dojogr_person_encounter | DHS TECS border crossings, Palm Beach SA manifests, sworn testimony |
2. The singleton signal
Capture–recapture logic in one line: if most observed flights were caught by only one source, the sources are sampling a much larger universe; if most were caught repeatedly, the universe is nearly exhausted. The estimate is driven by the shape of this distribution (main spec, family level):
| Seen by k families | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| flights | 8,051 (69.6%) | 2,777 | 655 | 80 |
Nearly 70% singletons is a strong signal that the corpus has not saturated the flight universe. But two artifacts inflate singletons and must be dealt with before believing any number:
- Linkage failure masquerading as darkness. 2,010 clusters (17.4%) contain an airport string that could not be normalized to a code; 99.4% of those are singletons — almost certainly duplicates of flights in other records that failed to link, not new flights. All "floor" figures above exclude them; naive figures that include them run ≈30–50% higher.
- Under-merging across date conventions (email date vs flight date). The loose±1 key bounds this: it removes ~900 clusters (~8%).
3. Source dependence is severe — and it biases simple estimators downward
The largest pairwise overlaps are within families, i.e. between sources that are re-descriptions of the same underlying paper:
ho_vision × jmail: 1,666 shared flights — same House Oversight production;amex_invoice × travel_sweep: 1,698 — both from the estate (EFTA) production;carstensen × epsteinexposed: 1,386 — both transcribe the pilot logbooks;epsteinexposed × dleerdefi(1991–94): overlap 495 of ~555 each (89%). A Lincoln–Petersen estimate on this pair returns N̂ = 621 vs 614 observed — i.e. it measures transcription completeness of the same logbook, not the flight universe.
Positive dependence inflates observed overlap, which deflates N̂: simple two-source
estimates on dependent pairs are lower bounds on top of lower bounds. Conversely,
pairs of lists with nearly disjoint catchability domains explode upward: the
BOOKING × OVERSIGHT Chapman estimate is 89,323 — not because 89k flights exist, but
because commercial bookings and fleet manifests barely can see the same flights.
Both failure modes are shown in estimates.csv deliberately, as calibration for how
seriously to take any single pair.
The defensible pairs sit between different custodians with overlapping domains:
| Pair (window, domain) | Observed | N̂ (95% CI) | Reading |
|---|---|---|---|
| carstensen × DHS TECS (2000–15, international routes) | 298 | 678 (523–834) | the logbook missed roughly half the border-crossing legs TECS saw, and vice versa |
| epsteinexposed × TECS (2000–19, intl) | 544 | 1,783 (1,358–2,208) | same story, wider window |
| carstensen × Palm Beach SA manifests (2004–05) | 245 | 293 (269–317) | near-saturation where an official manifest exists |
| ESTATE_MAIL × OVERSIGHT (2006–19) | 7,175 | 18,048 (17,068–19,028) | two custodians, both email-heavy → residual dependence; read as a soft lower estimate |
4. Multi-list log-linear models (the proper machinery, honestly reported)
Poisson GLMs on the 2^k−1 capture-pattern counts, fitted per era, with the all-zero
cell extrapolated; model set: independence, all two-way interactions, forward-AIC
selection of interaction terms, and a heterogeneity (capture-count) term; checked by
deviance/df and compared by AIC (selected rows in estimates.csv).
1999–2005 (S = 1,833): independence N̂ ≈ 2,909; heterogeneity model ≈ 2,157; dependence-adjusted ≈ 14,800–16,900 (bootstrap 95% ≈ 11,700–28,100). With only 3 effective lists the dependence-adjusted model is saturated-adjacent: it fits perfectly (dev ≈ 0.4 on 1 df) and is barely identified. Era range: ≈2,200–17,000; Chao floor (parseable subset) 4,032 (3,676–4,451).
2006–2019 (S = 8,630): independence 12,183; heterogeneity 11,544; heterogeneity + two-way 46,619 (bootstrap 21,500–109,700; dev/df ≈ 5.0 — a poor fit, flagged); all-two-way 152,892 (unstable, rejected). Production-level grouping (4 custodians) gives 8,977–15,434 for the stable models. Chao floor (parseable subset) 9,152 (8,966–9,356). Era range: ≈9,200–46,600, with weight on 12,000–20,000.
Fleet-only stratum (tail-verified aircraft; the population where all of LOGBOOK, OVERSIGHT, GOV, ESTATE_MAIL genuinely could capture every flight, so heterogeneity is mildest and fits are good, dev/df 0.4–0.7): best models give 1,743–5,603 vs 1,693 observed (1999–2005) and 2,169–6,303 vs 2,014 observed (2006–2019); Chao floors 3,973 and 2,645. This is the most defensible cell in the whole analysis: even for Epstein's own aircraft, the released record is plausibly missing several hundred to a few thousand legs.
5. The 1991–1998 non-answer is a finding
For 1991–1998 the corpus contains essentially one independent custodian — the pilot logbooks (three transcriptions of them) — plus 9 government records. Family-level f₂ = 0: no flight in that era is attested by two independent custodians. Capture– recapture is mathematically silent: the dark count for the first eight years is unbounded by these data. Any flight not entered in the pilots' logbooks in the 1990s is invisible to every source we have. The pattern of what does not exist — no financial production, no border records, no manifests for an eight-year span of heavy documented activity — is itself informative about where document discovery has and has not reached.
6. Sensitivity analysis (what moves N̂ and which way)
| Perturbation | Effect on N̂ | Direction/meaning |
|---|---|---|
| strict → loose → loose±1 key | observed 12,857 → 11,563 → 10,692; floors move ~proportionally | under-merging inflates N̂; bounded at ≈±10% |
| exclude unparseable-airport clusters | era-3 Chao 13,472 → 9,152 | the single largest artifact; floors quoted post-exclusion |
drop travel_sweep |
era-3 Chao 13,472 → 20,828 | the sweep is what connects lists; removing it shows how much the floor leans on one extraction effort |
drop epsteinexposed (aggregator) |
era-3 Chao → 13,085 | small; aggregation dependence is mostly within the LOGBOOK family |
| source vs family vs production lists | full-span Chao 11,720 / 14,857 / 49,609 | finer lists = more within-family dependence = lower floor; production level mixes disjoint domains = inflated; family level is the reasoned middle |
| independence → dependence terms (log-linear) | N̂ rises 3–10× | positive dependence hides dark flights from simple estimators; truth likely between the heterogeneity model and the two-way model |
The stable ordering across every specification: heterogeneity-only < independence < Chao floor < dependence-adjusted, which is exactly the ordering theory predicts when lists are positively dependent and catchability is heterogeneous.
7. Assumptions and limitations (read before quoting any number)
- Closed population — violated. Sources cover different eras (logbooks 1991–2015, AmEx 2011–19, TECS 2000–19). Mitigation: all estimates era-stratified; pooled-era fits reported only as sensitivity. Residual within-era coverage drift remains.
- List independence — violated, direction known. Sources within a family are re-descriptions of the same documents; even across families, the estate emails discuss the same trips the AmEx statements bill. Positive dependence ⇒ simple estimators biased downward ⇒ our floors are genuinely floors. Log-linear two-way terms absorb pairwise dependence, but three-way dependence is unidentified without further assumptions — irreducible with these data.
- Homogeneous catchability — violated, direction known. A subpoenaed 2004 leg is far more catchable than a 2015 helicopter hop or a guest's commercial ticket. Heterogeneity ⇒ N̂ biased downward (the unseen flights are precisely the low-catchability ones). Mitigation: Chao estimators (heterogeneity-robust lower bounds) and the fleet-only stratum.
- Record linkage is itself inference. Merge errors move N̂ in both directions; bounded by the strict/loose/±1 grid (~±10%) plus the unparseable-string exclusion (~30–50% on naive floors — corrected in the headline figures).
- The estimand is conditional. Capture–recapture estimates the universe of flights catchable by at least one list in principle. It says nothing about categories no source covers: aircraft never logged anywhere, travel never booked through captured channels, movements never crossing a US border, and everything in 1991–1998 beyond the logbooks. The true total of all Epstein-network movement is strictly larger than any number here.
- The population is heterogeneous in kind. "Flight events" mixes fleet legs, staff and guest commercial tickets, and charters. The fleet-only stratum is the clean subset; the all-events figures should be read as "travel events within the evidentiary record's domain."
- ~2,900 records from route-less sources (
amex_subject,dojogr_tecsii) and ~3,200 date/route-incomplete records could not enter the matrix at all.
8. Documents/Bates dimension — assessed, deferred
The production dimension (EFTA vs HOUSE_OVERSIGHT vs DOJ-OGR vs public web) was used
above as a source grouping for flights. A true document-level capture–recapture (how
many documents exist in no production) requires establishing that the same underlying
document appears in multiple productions — content-hash or Bates-crosswalk linkage that
this dataset does not contain (each record carries a single source_doc). The
flight-level production overlap is suggestive: only 16 of 11,563 flights are attested
by all 4 productions, and 9,956 by just one [VALIDATED: capture_matrix_summary.csv,
production rows]. Building a document crosswalk (e.g., duplicate-text detection
across the EFTA / HOUSE_OVERSIGHT / DOJ-OGR corpora) is the natural next step; flagged
as future work.
9. Files
capture_matrix_summary.csv— k-source distribution for every (key × list-level) spec; family-pair and source-pair overlap counts (loose key).estimates.csv— 72 estimator rows: Chapman pairs (with window/domain restrictions and dependence annotations), Chao2 floors (all specs, incl. artifact-corrected and drop-source runs), log-linear model selections with bootstrap CIs, fleet-stratum models.loglinear_models_detail.csv— full model grid (all fits with AIC, deviance, df).pairwise_source_overlap_loose.csv— full 17×17 source overlap matrix.code/— the four analysis scripts (cr_prep.pynormalization+clustering,cr_estimate.pyestimator suite,cr_sensitivity.py,cr_finalize.py), runnable againstnetwork-analysis/data/flight_external.csv.