Generated: 2026-09-15 00:57:45 Quality gate: PASSED Total rows (unique EINs): 3,698,197 Source files stacked: 121 Vintages contributing rows: 117
Summary
The Unified BMF is a single-row-per-EIN consolidation drawn from the most-recent vintage in which each EIN appears across both the current monthly BMF pipeline and the legacy 501CX-NONPROFIT-PX pipeline. See chapter 11 for the full design.
| Total rows |
3,698,197 |
| Distinct EINs |
3,698,197 |
| Rows == distinct EINs (uniqueness gate) |
✅ yes |
| Input CSV files |
121 |
| Vintages with at least one surviving row |
117 |
Rows by source pipeline
| current |
2,219,359 |
60.01 |
| legacy |
1,478,838 |
39.99 |
First / last year coverage
| Earliest first_year_in_bmf |
1989 |
| Latest first_year_in_bmf |
2026 |
| Earliest last_year_in_bmf |
1989 |
| Latest last_year_in_bmf |
2026 |
Vintages observed per EIN
How many distinct BMF vintages did each EIN appear in?
| Minimum |
1 |
| Average |
51.5 |
| Maximum |
217 |
| EINs that appear in only one vintage |
251,993 |
Vintage histogram
Number of surviving Unified BMF rows contributed by each vintage. A vintage with many rows contributed many EINs whose latest sighting was in that month.
| 2026-07 |
current |
1,974,830 |
| 1989-06 |
legacy |
193,977 |
| 2010-11 |
legacy |
135,449 |
| 2016-08 |
legacy |
97,725 |
| 2020-04 |
legacy |
94,013 |
| 2022-01 |
legacy |
54,622 |
| 2019-08 |
legacy |
42,662 |
| 1996-06 |
legacy |
42,534 |
| 2011-06 |
legacy |
42,405 |
| 2024-08 |
current |
39,453 |
| 2025-08 |
current |
36,835 |
| 1998-09 |
legacy |
34,539 |
| 2000-05 |
legacy |
32,316 |
| 2023-08 |
current |
28,233 |
| 2011-12 |
legacy |
26,568 |
| 2022-08 |
legacy |
25,035 |
| 1995-08 |
legacy |
23,316 |
| 1997-10 |
legacy |
22,987 |
| 2007-09 |
legacy |
22,461 |
| 2014-06 |
legacy |
20,202 |
| 2007-04 |
legacy |
20,010 |
| 2012-12 |
legacy |
19,596 |
| 2016-04 |
legacy |
19,364 |
| 2013-07 |
legacy |
18,723 |
| 2004-12 |
legacy |
18,217 |
| 2003-11 |
legacy |
18,166 |
| 2003-01 |
legacy |
18,140 |
| 2004-04 |
legacy |
16,696 |
| 2013-02 |
legacy |
16,376 |
| 2018-12 |
legacy |
16,284 |
| 1999-12 |
legacy |
15,076 |
| 2015-07 |
legacy |
13,418 |
| 2006-05 |
legacy |
12,673 |
| 2023-07 |
current |
12,449 |
| 2026-01 |
current |
11,824 |
| 2010-08 |
legacy |
11,729 |
| 2008-01 |
legacy |
10,789 |
| 2002-07 |
legacy |
10,686 |
| 2008-10 |
legacy |
10,668 |
| 2009-10 |
legacy |
10,530 |
| 2001-07 |
legacy |
9,979 |
| 2026-03 |
current |
9,423 |
| 2024-03 |
current |
9,018 |
| 2010-07 |
legacy |
8,988 |
| 2006-01 |
legacy |
8,963 |
| 2010-05 |
legacy |
8,946 |
| 2012-08 |
legacy |
8,890 |
| 2008-04 |
legacy |
8,790 |
| 2007-01 |
legacy |
8,768 |
| 2002-01 |
legacy |
8,568 |
| 2024-04 |
current |
8,401 |
| 2024-02 |
current |
8,257 |
| 2015-02 |
legacy |
8,235 |
| 2009-04 |
legacy |
8,046 |
| 2012-06 |
legacy |
7,982 |
| 2003-07 |
legacy |
7,964 |
| 2025-03 |
current |
7,951 |
| 2014-02 |
legacy |
7,685 |
| 2014-12 |
legacy |
7,537 |
| 2023-12 |
current |
6,963 |
| 2010-04 |
legacy |
6,932 |
| 2015-09 |
legacy |
6,894 |
| 2009-01 |
legacy |
6,613 |
| 2008-06 |
legacy |
6,585 |
| 2011-09 |
legacy |
6,498 |
| 2012-04 |
legacy |
6,300 |
| 2025-02 |
current |
6,282 |
| 2015-05 |
legacy |
6,221 |
| 2014-04 |
legacy |
6,136 |
| 2015-12 |
legacy |
6,054 |
| 2006-11 |
legacy |
6,009 |
| 2009-07 |
legacy |
5,812 |
| 2011-08 |
legacy |
5,750 |
| 2005-07 |
legacy |
5,634 |
| 2024-12 |
current |
5,518 |
| 2005-11 |
legacy |
5,423 |
| 2013-12 |
legacy |
5,395 |
| 2016-03 |
legacy |
5,017 |
| 2014-09 |
legacy |
4,651 |
| 2011-07 |
legacy |
4,606 |
| 2023-11 |
current |
4,549 |
| 2013-05 |
legacy |
4,528 |
| 2008-12 |
legacy |
4,224 |
| 2026-06 |
current |
4,127 |
| 2025-06 |
current |
4,078 |
| 2012-07 |
legacy |
4,069 |
| 2024-09 |
current |
3,777 |
| 2013-09 |
legacy |
3,741 |
| 2013-10 |
legacy |
3,740 |
| 2012-02 |
legacy |
3,626 |
| 2025-12 |
current |
3,584 |
| 2010-01 |
legacy |
3,578 |
| 2015-11 |
legacy |
3,539 |
| 2024-06 |
current |
3,522 |
| 2025-11 |
current |
3,442 |
| 2013-06 |
legacy |
3,408 |
| 2012-10 |
legacy |
3,377 |
| 2025-04 |
current |
3,312 |
| 2015-04 |
legacy |
3,259 |
| 2025-07 |
current |
3,120 |
| 2013-08 |
legacy |
3,109 |
| 2024-10 |
current |
3,109 |
| 2025-05 |
current |
3,079 |
| 2013-03 |
legacy |
3,077 |
| 2011-10 |
legacy |
3,052 |
| 2011-11 |
legacy |
2,964 |
| 2012-03 |
legacy |
2,872 |
| 2012-11 |
legacy |
2,766 |
| 2023-10 |
current |
2,668 |
| 2026-05 |
current |
2,667 |
| 2013-04 |
legacy |
2,433 |
| 2023-09 |
current |
2,432 |
| 2024-11 |
current |
2,431 |
| 2014-11 |
legacy |
2,058 |
| 2024-07 |
current |
2,053 |
| 2025-09 |
current |
1,972 |
| 2016-02 |
legacy |
1,595 |
Column completeness
Top 30 most-complete columns (highest non-null fraction):
| ein_raw |
100.00 |
100.00 |
100.00 |
| ein |
100.00 |
100.00 |
100.00 |
| org_name_raw |
100.00 |
100.00 |
100.00 |
| org_name_join |
100.00 |
100.00 |
100.00 |
| org_name_display |
100.00 |
100.00 |
100.00 |
| org_addr_zip_raw |
100.00 |
100.00 |
100.00 |
| org_addr_state_invalid |
100.00 |
100.00 |
100.00 |
| ntee_code_clean |
100.00 |
100.00 |
100.00 |
| ntee_common_code |
100.00 |
100.00 |
100.00 |
| ntee_common_code_definition |
100.00 |
100.00 |
100.00 |
| ntee_code_major_group |
100.00 |
100.00 |
100.00 |
| naics_code |
100.00 |
100.00 |
100.00 |
| ntee_code_definition |
100.00 |
100.00 |
100.00 |
| nteev2_code |
100.00 |
100.00 |
100.00 |
| nteev2_subsector |
100.00 |
100.00 |
100.00 |
| nteev2_org_type |
100.00 |
100.00 |
100.00 |
| nteev2 |
100.00 |
100.00 |
100.00 |
| nteev2_subsector_definition |
100.00 |
100.00 |
100.00 |
| bmf_source |
100.00 |
100.00 |
100.00 |
| bmf_vintages_observed |
100.00 |
100.00 |
100.00 |
| ein_prefixed |
100.00 |
100.00 |
100.00 |
| EIN2 |
100.00 |
100.00 |
100.00 |
| first_vintage_ym |
100.00 |
100.00 |
100.00 |
| last_vintage_ym |
100.00 |
100.00 |
100.00 |
| bmf_vintage_ym |
100.00 |
100.00 |
100.00 |
| first_year_in_bmf |
100.00 |
100.00 |
100.00 |
| last_year_in_bmf |
100.00 |
100.00 |
100.00 |
| org_addr_city_raw |
99.92 |
100.00 |
99.81 |
| org_addr_city |
99.92 |
100.00 |
99.81 |
| org_addr_state_raw |
99.88 |
99.93 |
99.80 |
Bottom 30 least-complete columns:
| org_parent_name |
3.06 |
2.68 |
3.64 |
| activity_code_definitions |
20.81 |
34.68 |
0.00 |
| activity_code_categories |
20.81 |
34.68 |
0.00 |
| dba_name_raw |
24.97 |
21.38 |
30.36 |
| dba_name |
24.97 |
21.38 |
30.36 |
| org_legal_suffix |
36.40 |
36.93 |
35.60 |
| in_care_of_name_clean |
38.61 |
64.34 |
0.00 |
| in_care_of_name_raw |
38.69 |
64.47 |
0.00 |
| revenue_amount |
52.74 |
70.32 |
26.36 |
| all_classifications_string |
59.99 |
99.96 |
0.00 |
| in_care_of_name_provided |
60.01 |
100.00 |
0.00 |
| org_addr_zip4 |
60.01 |
100.00 |
0.00 |
| classification_code |
60.01 |
100.00 |
0.00 |
| affiliation_code |
60.01 |
100.00 |
0.00 |
| affiliation_code_definition |
60.01 |
100.00 |
0.00 |
| deductibility_code |
60.01 |
100.00 |
0.00 |
| deductibility_code_definition |
60.01 |
100.00 |
0.00 |
| organization_code |
60.01 |
100.00 |
0.00 |
| organization_code_definition |
60.01 |
100.00 |
0.00 |
| status_code |
60.01 |
100.00 |
0.00 |
| status_code_definition |
60.01 |
100.00 |
0.00 |
| activity_code |
60.01 |
100.00 |
0.00 |
| asset_code |
60.01 |
100.00 |
0.00 |
| asset_code_definition |
60.01 |
100.00 |
0.00 |
| income_code |
60.01 |
100.00 |
0.00 |
| income_code_definition |
60.01 |
100.00 |
0.00 |
| pf_filing_requirement_code |
60.01 |
100.00 |
0.00 |
| pf_filing_requirement_code_definition |
60.01 |
100.00 |
0.00 |
| tax_period_ym_str |
61.74 |
77.55 |
38.03 |
| filing_requirement_code_definition |
68.49 |
100.00 |
21.19 |
Columns populated by only one source
Columns that are well populated in one pipeline’s rows and empty in the other’s. These are expected where a field exists in only one source (for example fields the legacy extracts never carried), and worth a look where it does not.
| in_care_of_name_provided |
60.01 |
100.00 |
0 |
| org_addr_zip4 |
60.01 |
100.00 |
0 |
| classification_code |
60.01 |
100.00 |
0 |
| affiliation_code |
60.01 |
100.00 |
0 |
| affiliation_code_definition |
60.01 |
100.00 |
0 |
| deductibility_code |
60.01 |
100.00 |
0 |
| deductibility_code_definition |
60.01 |
100.00 |
0 |
| organization_code |
60.01 |
100.00 |
0 |
| organization_code_definition |
60.01 |
100.00 |
0 |
| status_code |
60.01 |
100.00 |
0 |
| status_code_definition |
60.01 |
100.00 |
0 |
| activity_code |
60.01 |
100.00 |
0 |
| asset_code |
60.01 |
100.00 |
0 |
| asset_code_definition |
60.01 |
100.00 |
0 |
| income_code |
60.01 |
100.00 |
0 |
| income_code_definition |
60.01 |
100.00 |
0 |
| pf_filing_requirement_code |
60.01 |
100.00 |
0 |
| pf_filing_requirement_code_definition |
60.01 |
100.00 |
0 |
| all_classifications_string |
59.99 |
99.96 |
0 |
| in_care_of_name_raw |
38.69 |
64.47 |
0 |
| in_care_of_name_clean |
38.61 |
64.34 |
0 |
Notes
- All output columns are VARCHAR. The master build forces every column to string type so DuckDB’s
UNION ALL BY NAME can combine the legacy slim per-vintage schema with the current full schema without per-column type-mismatch errors. Cast in your downstream tool: as.numeric(asset_amount) in R, pd.to_numeric(df['asset_amount'], errors='coerce') in pandas, etc. Lat/lon in the geocoded master output are explicitly cast to DOUBLE.
- Legacy-only EINs have sparse columns. EINs whose latest appearance is in a pre-2014 legacy vintage carry only the legacy slim schema; current-pipeline-only columns (e.g. NTEEv2 fields, modern address quality flags) are NULL. The
bmf_source column flags the source of each surviving row.