Each resolves to a physical file inside the quarterly zip. The line in
grey is the regulator's own wording, copied verbatim. About 3,376 codes exist in the 5300 and most are zero for most
institutions; these are the ones this pipeline reads.
Size and membership
everything the credit union ownsfiled
ACCT_010 FS220.txt · assets
The regulator calls itTOTAL ASSETS
total loans and leases outstandingfiled
ACCT_025B FS220.txt · loans
The regulator calls itTotal amount of Loans and Leases
total member depositsfiled
ACCT_018 FS220.txt · shares
The regulator calls itTotal Amount of Shares and Deposits
what it owns minus what it owes, the members' cushionfiled
ACCT_997 FS220A.txt · networth
The regulator calls itTotal Net Worth
headcount of people with an accountfiled
ACCT_083 FS220.txt · members
The regulator calls itNumber of current members (not number of accounts)
full-time stafffiled
ACCT_564A FS220A.txt · fte
The regulator calls itNumber of credit union employees who are Full-Time (26 hours or more)
people eligible to joinfiled
ACCT_084 FS220.txt · pot_members
The regulator calls itNumber of potential members
share accounts excluding depositsfiled
ACCT_013 FS220.txt · shares_only
The regulator calls itTotal Amount of Shares
Earnings
profit this year to datefiled
ACCT_661A FS220A.txt · net_income_ytd
The regulator calls itNet Income (Loss) (line 11 plus line 17 less line 28)
interest earned on loans this yearfiled
ACCT_110 FS220A.txt · int_loans_ytd
The regulator calls itInterest on Loans (Gross-before interest refunds)
all interest income this yearfiled
ACCT_115 FS220A.txt · int_income_ytd
The regulator calls itTotal Interest Income
interest paid to members and lenders this yearfiled
ACCT_350 FS220A.txt · int_exp_ytd
The regulator calls itTotal Interest Expense (Sum of items 6-8)
fee and other non-interest incomefiled
ACCT_117 FS220A.txt · nonint_income_ytd
The regulator calls itTotal Non-Interest Income
fee income specificallyfiled
ACCT_131 FS220A.txt · fee_income_ytd
The regulator calls itFee Income
cost of running the place: staff, rent, systemsfiled
ACCT_671 FS220.txt · nonint_exp_ytd
The regulator calls itTotal Non-Interest Expense (Sum of items 18-27)
salaries and benefitsfiled
ACCT_210 FS220A.txt · comp_ytd
The regulator calls itEmployee Compensation and Benefits
Credit
all loans 60+ days past duefiled
ACCT_041B FS220.txt · total_dq_amt
The regulator calls itTotal Amount of Delinquent Loans & Leases (Two or more months)
all loans charged off this yearfiled
ACCT_550 FS220.txt · total_co_ytd
The regulator calls itTotal Amount of All Loans Charged Off Year-to-Date
all recoveries this yearfiled
ACCT_551 FS220.txt · total_rec_ytd
The regulator calls itTotal Amount of All Year-to-Date Recoveries on Charged-Off Loans
money set aside for expected loan losses, legacy standardfiled
ACCT_719 FS220.txt · allowance
The regulator calls itLess: Allowance for Loan & Lease Losses
loss reserve under CECL, the standard that replaced the legacy onefiled
ACCT_AS0048 FS220N.txt · cecl_allowance
The regulator calls it(CECL) Allowance for Credit Losses on Loans and Leases
loss reserve added this year, legacy standardfiled
ACCT_300 FS220.txt · provision_ytd
The regulator calls itProvision for Loan & Lease Losses
loss expense under CECLfiled
ACCT_IS0017 FS220N.txt · cecl_cle_ytd
The regulator calls it(CECL) Total Credit Loss Expense ?
The vehicle book
used vehicle loansfiled
ACCT_370 FS220A.txt · veh_used
The regulator calls itAmount of Used Vehicle Loans
new vehicle loansfiled
ACCT_385 FS220A.txt · veh_new
The regulator calls itAmount of New Vehicle Loans
all loans originated through a third party (dealer auto paper, dealer leases, point-of-sale and merchant programs, online platforms); NCUA's line is not vehicle-onlyfiled
ACCT_618A FS220A.txt · indirect
The regulator calls itTotal Amount of Outstanding Indirect Loans
indirect_nfiled
ACCT_617A FS220A.txt · indirect_n
The regulator calls itNumber of Outstanding Indirect Loans
indirect vehicle loans 60+ days past duefiled
ACCT_041E FS220A.txt · ind_dq_amt
The regulator calls itAmount of Delinquent Indirect Loans
new vehicle loans 60+ days past duefiled
ACCT_041C1 FS220I.txt · veh_dq_new
The regulator calls itAmount of Reportable Delinquent New Vehicle Loans
used vehicle loans 60+ days past duefiled
ACCT_041C2 FS220I.txt · veh_dq_used
The regulator calls itAmount of Reportable Delinquent Used Vehicle Loans
new vehicle loans charged off this yearfiled
ACCT_550C1 FS220I.txt · veh_co_new_ytd
The regulator calls itAmount of New Vehicle Loans YTD Charge Offs
used vehicle loans charged off this yearfiled
ACCT_550C2 FS220I.txt · veh_co_used_ytd
The regulator calls itAmount of Used Vehicle Loans YTD Charge Offs
indirect loans charged off this yearfiled
ACCT_550E FS220C.txt · ind_co_ytd
The regulator calls itTotal Amount of Indirect Loans Charged Off Year-to-Date
recovered on indirect charge-offs this yearfiled
ACCT_551E FS220C.txt · ind_rec_ytd
The regulator calls itTotal Amount of All Year-to-Date Recoveries on Charged-Off Indirect Loans
purchased vehicle participations still heldfiled
ACCT_SL0036 FS220Q.txt · veh_part
The regulator calls itParticipation Loans: Participations Purchased - Outstanding Balance - Amount - Vehicle - Non-commercial
repossessed vehicles sitting in inventory, not yet soldfiled
ACCT_AS0024 FS220P.txt · repo_veh
The regulator calls itConsumer Vehicle Foreclosed and Repossessed Assets
all repossessed collateral heldfiled
ACCT_798A FS220A.txt · repo_all
The regulator calls itForeclosed and Repossessed Assets
Loan mix
first-lien mortgagesfiled
ACCT_RL0016 FS220R.txt · re_first
The regulator calls it1- to 4-Family Residential Property Loans/lines of Credit Secured by 1st Lien - Amount of Loans Outstanding - Total
second mortgages and HELOCsfiled
ACCT_RL0030 FS220R.txt · re_junior
The regulator calls it1- to 4-Family Residential Property Loans/lines of Credit Secured by Junior Lien - Amount of Loans Outstanding - Total
other real estate loansfiled
ACCT_RL0044 FS220R.txt · re_other
The regulator calls itAll Other (Non-commercial) Real Estate - Amount of Loans Outstanding - Total
credit card balancesfiled
ACCT_396 FS220A.txt · cc_loans
The regulator calls itAmount of Unsecured Credit Card Loans
other unsecured lendingfiled
ACCT_397 FS220A.txt · unsec_other
The regulator calls itAmount of All Other Unsecured Loans/Lines of Credit
business loans not secured by propertyfiled
ACCT_400P FS220L.txt · comm_nonre
The regulator calls itAmount of Commercial Loans/Lines of Credit Not Real Estate Secured
commercial real estate loansfiled
ACCT_718A5 FS220L.txt · comm_re
The regulator calls itAmount of Commercial Loans/Lines of Credit Real Estate Secured
private student loansfiled
ACCT_698A FS220H.txt · student
The regulator calls itAmount of Non-Federally Guaranteed Student Loans
Funding
ordinary savings accountsfiled
ACCT_657 FS220.txt · sh_regular
The regulator calls itAmount of Regular Shares
checking accountsfiled
ACCT_902 FS220.txt · sh_drafts
The regulator calls itAmount of Share Drafts
money market accountsfiled
ACCT_911 FS220.txt · sh_mm
The regulator calls itTotal Amount of Money Market Shares
share certificates, shortest maturityfiled
ACCT_908A FS220.txt · sh_cert1
The regulator calls itShare Certificates - < 1 Year
share certificates, middle maturityfiled
ACCT_908B1 FS220B.txt · sh_cert2
The regulator calls itShare Certificates - 1-3 Years
share certificates, longest maturityfiled
ACCT_908B2 FS220B.txt · sh_cert3
The regulator calls itShare Certificates - > 3 Years
retirement accounts, shortest maturityfiled
ACCT_906A FS220.txt · sh_ira1
The regulator calls itIRA/KEOGH Accounts - < 1 Year
retirement accounts, middle maturityfiled
ACCT_906B1 FS220B.txt · sh_ira2
The regulator calls itIRA/KEOGH Accounts - 1-3 Years
retirement accounts, longest maturityfiled
ACCT_906B2 FS220B.txt · sh_ira3
The regulator calls itIRA/KEOGH Accounts - > 3 Years
all other share typesfiled
ACCT_630 FS220.txt · sh_other
The regulator calls itTotal Amount of All Other Shares
number of share accounts, used for the average balancefiled
ACCT_460 FS220A.txt · sh_accounts
The regulator calls itNumber of Accounts for Total Shares and Deposits (Sum of items 15-16)
cash and deposits at other institutionsfiled
ACCT_AS0009 FS220P.txt · cash_total
The regulator calls itTotal Cash and Other Deposits
investment securitiesfiled
ACCT_AS0013 FS220P.txt · invest_sec
The regulator calls itTotal Investment Securities
money borrowed rather than taken as depositsfiled
ACCT_860C FS220.txt · borrowings
The regulator calls itTotal Borrowings
Participations
participations bought this yearfiled
ACCT_690 FS220C.txt · part_buy_ytd
The regulator calls itAmount of Participation Loans Purchased Year-to-Date
participations sold this yearfiled
ACCT_691 FS220C.txt · part_sell_ytd
The regulator calls itAmount of Participation Loans Sold Year-to-Date
participation losses this yearfiled
ACCT_550F FS220C.txt · part_co_ytd
The regulator calls itTotal Amount of All Participation Loans Charged Off Year-to-Date
recovered on participation losses this yearfiled
ACCT_551F FS220C.txt · part_rec_ytd
The regulator calls itTotal Amount of All Year-to-Date Recoveries on Charged-Off Participation Loans
The regulator's own ratio
NCUA's own net worth ratio in basis points, used only to check our mathfiled
ACCT_998 FS220A.txt · nwr_bps
The regulator calls itNet Worth Ratio
Other filed fields
total number of loans and leases outstanding (ACCT_025A)filed
ACCT_025A FS220.txt · loans_n
The regulator calls itTotal number of Loans and Leases
number of loans granted year to date (ACCT_031A)filed
ACCT_031A FS220.txt · granted_n_ytd
The regulator calls itLoans Granted Year-to-Date
granted_ytdfiled
ACCT_031B FS220.txt · granted_ytd
The regulator calls itAmount of Loans Granted Year-to-Date
ind_veh_nfiled
ACCT_IN0001 FS220P.txt · ind_veh_n
The regulator calls itNumber of Indirect Loans - New and Used Vehicle Loans
indirect loans secured by vehicles (FS220P, filed since March 2022; the product split of 618A)filed
ACCT_IN0002 FS220P.txt · ind_veh
The regulator calls itAmount of Indirect Loans - New and Used Vehicle Loans
indirect residential loans (since March 2022)filed
ACCT_IN0004 FS220P.txt · ind_re
The regulator calls itAmount of Indirect Loans - First Lien and Junio Lien Residential Loans
indirect commercial loans (since March 2022)filed
ACCT_IN0006 FS220P.txt · ind_comm
The regulator calls itAmount of Indirect Loans - Commercial Loans
indirect loans, all other products (since March 2022)filed
ACCT_IN0008 FS220P.txt · ind_other
The regulator calls itAmount of Indirect Loans - All Other Loans
part-time stafffiled
ACCT_564B FS220A.txt · pte
The regulator calls itNumber of credit union employees who are Part-Time (25 hours or less per week)
number of share draft (checking) accounts (ACCT_452)filed
ACCT_452 FS220A.txt · sh_draft_n
The regulator calls itNumber of Accounts for Share Drafts
charterderived
np.where(panel.CU_TYPE == 1, "Federal", "State")
vehiclederived
panel.veh_used + panel.veh_new
veh_dqderived
panel.veh_dq_new + panel.veh_dq_used
veh_co_annderived
(panel.veh_co_new_ytd + panel.veh_co_used_ytd) * panel.ann_factor
thirdpartyderived
panel.indirect + panel.veh_part
nwrderived
P(panel.networth, panel.assets)
What it is forthe capital cushion, and the flag line at 9 and 7
Why built this wayAssets, not loans, is the denominator because net worth has to absorb losses on everything the institution owns, not only the lending. It also matches the regulator's own ratio exactly, which is how the pipeline validates itself.
roaderived
P(panel.net_income_ytd * panel.ann_factor, panel.assets)
What it is forwhether it earns; the only way net worth grows
Why built this wayYear-to-date income is annualized so a March filing and a December filing can sit in the same column. Period-end assets are used rather than average assets, so a fast-growing institution reads very slightly better than the regulator's own figure. The gap is a few basis points, close enough to screen with and not examiner-identical.
ltoaderived
P(panel.loans, panel.assets)
veh_pct_loansderived
P(panel.vehicle, panel.loans)
What it is foris the product the institution
Why built this wayOver loans rather than over assets, because the question is what kind of lender this is, not how much of the balance sheet is lending.
ind_basisderived
np.where(panel.cycle >= "2022-03", "vehicle", "all channels")
ind_pct_vehderived
np.where(panel.cycle >= "2022-03", P(panel.ind_veh, panel.vehicle), P(panel.indirect, panel.vehicle))
What it is forhow much third-party paper sits against the car book
Why built this wayIndirect VEHICLE loans (IN0002, filed since March 2022) over the vehicle book; the four product lines on FS220P reconcile to the 618A total for every filer. Before March 2022 only the all-channel total exists, so earlier quarters use 618A and the drawer says so. In those quarters the numerator is ALL indirect loans, so a credit union with a dealer lease program, a solar program or an online lending partner and no dealer auto program can still read high here, and the ratio can exceed 100%. Read it as third-party originated paper relative to the auto book. A San Jose credit union that ran leases through dealers and no indirect auto program is the case that taught us this.
ind_pct_loansderived
P(panel.indirect, panel.loans)
loan_penderived
P(panel.loans_n, panel.members)
granted_penderived
P(panel.granted_n_ytd * panel.ann_factor, panel.members)
granted_annderived
panel.granted_ytd * panel.ann_factor
avg_loan_balderived
np.where(panel.loans_n > 0, panel.loans / panel.loans_n, np.nan)
loans_per_ftederived
np.where(panel.fte > 0, panel.loans_n / panel.fte, np.nan)
tp_pct_nwderived
P(panel.thirdparty, panel.networth)
What it is forpaper written by someone else, against the cushion that absorbs it
Why built this wayAgainst net worth rather than against loans, because the question is what a loss on someone else's underwriting would do to the cushion. The NCUA's own removed cap was written against net worth for the same reason.
veh_dq_pctderived
P(panel.veh_dq, panel.vehicle)
What it is fordelinquency inside the vehicle book
veh_nco_pctderived
P(panel.veh_co_ann, panel.vehicle)
What it is forrealized vehicle losses
Why built this wayGross of recoveries, because the 5300 has no vehicle-specific recovery field. This is the one place a charge-off rate on this desk is not net, and it is flagged wherever it appears.
ind_dq_pctderived
P(panel.ind_dq_amt, panel.indirect)
ind_nco_pctderived
P((panel.ind_co_ytd - panel.ind_rec_ytd) * panel.ann_factor, panel.indirect)
repo_pct_vehderived
P(panel.repo_veh, panel.vehicle)
What it is forthe leading indicator: cars come back before losses are booked
Why built this wayOver the vehicle book, not over total loans, so a mortgage-heavy institution with a small car book is not flattered. The stock of unsold vehicles is used rather than a flow, because it leads charge-offs by roughly a year: the car comes back before the loss is booked.
veh_per_ftederived
np.where(panel.fte > 0, panel.vehicle / panel.fte, np.nan)
total_dq_pctderived
P(panel.total_dq_amt, panel.loans)
What it is forthe regulator's headline credit measure
Why built this wayOver total loans rather than over net worth, because this measures the loan book's condition. The delinquency-to-net-worth version exists too, and answers a different question: how much of the cushion is already at risk.
dq_to_nwderived
P(panel.total_dq_amt, panel.networth)
ltosderived
P(panel.loans, panel.shares)
What it is forhow much of member money is already lent out; the seller's pressure line
Why built this wayShares rather than assets in the denominator, because the question is whether member money still covers the lending. Above 100% the difference is borrowed, and selling participations is the usual way back down. That is why this line, not loans over assets, is the seller's pressure signal.
cash_pctderived
P(panel.cash_total, panel.assets)
What it is fordry powder; high cash with low loans is the natural buyer
Why built this wayCash and deposits only, not investment securities. Securities can be sold but not always at book value, and the 5300 does not carry the fair-value split that would let us tell. Keeping the measure narrow keeps it honest.
allowance_effderived
panel.allowance + panel.cecl_allowance
What it is forlegacy and CECL reserves summed, because a filer reports one or the other
Why built this wayLegacy and CECL fields summed rather than picked, because a credit union reports one or the other and never both. Summing gives every filer one usable value without a branch.
provision_eff_ytdderived
panel.provision_ytd + panel.cecl_cle_ytd
What it is forsame coalesce for the expense side
Why built this waySame coalesce as the allowance, for the same reason.
provision_pctderived
P(panel.provision_eff_ytd * panel.ann_factor, panel.assets)
opex_pctderived
P(panel.nonint_exp_ytd * panel.ann_factor, panel.assets)
What it is forcost of running the place before any loan goes bad
Why built this wayOver assets rather than over revenue. The revenue version, the efficiency ratio, moves when either half moves, so a shrinking institution looks worse without spending a dollar more. Over assets isolates cost.
nim_pctderived
P((panel.int_income_ytd - panel.int_exp_ytd) * panel.ann_factor, panel.assets)
What it is forthe spread the institution earns
Why built this wayOver total assets rather than earning assets, which is the convention a bank would use. It runs slightly below a bank-style margin as a result, and is consistent across every credit union here, which is what matters for ranking.
yield_loansderived
P(panel.int_loans_ytd * panel.ann_factor, panel.loans)
total_nco_pctderived
P((panel.total_co_ytd - panel.total_rec_ytd) * panel.ann_factor, panel.loans)
What it is forlosses actually realized, not expected
Why built this wayNet of recoveries, because a loss that was later collected was not a loss. Vehicle charge-offs have no matching recovery field on the 5300, so that one is gross and the two are not comparable.
re_totalderived
panel.re_first + panel.re_junior + panel.re_other
re_pct_loansderived
P(panel.re_total, panel.loans)
re1_pct_loansderived
P(panel.re_first, panel.loans)
cc_pct_loansderived
P(panel.cc_loans, panel.loans)
unsec_pct_loansderived
P(panel.cc_loans + panel.unsec_other, panel.loans)
comm_totalderived
panel.comm_nonre + panel.comm_re
comm_pct_loansderived
P(panel.comm_total, panel.loans)
comm_pct_nwderived
P(panel.comm_total, panel.networth)
What it is forone bad business loan against the whole cushion
Why built this wayAgainst net worth rather than loans, because a single large commercial default is a capital event at a small institution. The statutory member business lending cap is written against net worth too.
sh_certsderived
panel.sh_cert1 + panel.sh_cert2 + panel.sh_cert3
sh_iraderived
panel.sh_ira1 + panel.sh_ira2 + panel.sh_ira3
cert_pct_sharesderived
P(panel.sh_certs, panel.shares)
What it is fordeposits that were bought rather than earned
core_pct_sharesderived
P(panel.sh_regular + panel.sh_drafts, panel.shares)
What it is forsticky funding versus rate-chasing money
Why built this wayRegular shares plus share drafts only. Certificates and money market are deliberately excluded because they are the balances that leave when a competitor pays more.
mm_pct_sharesderived
P(panel.sh_mm, panel.shares)
avg_share_balderived
np.where(panel.sh_accounts > 0, panel.shares / panel.sh_accounts, np.nan)
What it is forwho the members are, in one number
Why built this wayShares over the number of accounts rather than over members, because one member can hold several accounts and the account count is what the form actually gives us.
part_buy_annderived
panel.part_buy_ytd * panel.ann_factor
What it is forbuy side of the participation market
Why built this wayAnnualized from year to date so a first-quarter filing can be compared with a full year. Labelled as annualized everywhere it appears, because a Q1 figure times four is a pace, not an outcome.
part_sell_annderived
panel.part_sell_ytd * panel.ann_factor
What it is forsell side; eight of eight quarters is a habitual seller
Why built this waySame annualization. Read beside the count of quarters sold in: one large sale and eight consecutive quarters of selling are different behaviours that produce a similar annual number.
part_nco_pctderived
P((panel.part_co_ytd - panel.part_rec_ytd) * panel.ann_factor, panel.veh_part)
borrow_pctderived
P(panel.borrowings, panel.assets)
What it is forreliance on borrowed rather than member money
Why built this wayOver assets so it is comparable across sizes. Borrowed money is priced by markets and can be called; member shares are neither, which is the whole distinction this line draws.
comp_per_ftederived
np.where(panel.fte > 0, panel.comp_ytd * panel.ann_factor / panel.fte, np.nan)
members_per_ftederived
np.where(panel.fte > 0, panel.members / panel.fte, np.nan)
lidderived
pd.to_numeric(panel.LIMITED_INC, errors="coerce").fillna(0).astype(int)
mdiderived
panel.IsMDI.astype(str).str.lower().isin(["true","1","yes"]).astype(int)
openedderived
pd.to_numeric(panel.YEAR_OPENED, errors="coerce")
regionderived
pd.to_numeric(panel.REGION, errors="coerce")
chk_penderived
P(panel.sh_draft_n, panel.members)
fom_penderived
np.where((panel.pot_members > 0) & (panel.pot_members >= panel.members), panel.members / panel.pot_members * 100, np.nan)
bandderived
panel.assets.apply(lambda a: next(l for lo,hi,l in BANDS if lo <= a/1e6 < hi))
flag_ind_gt_loansderived
panel.indirect > panel.loans * 1.001
flag_ind_gt_vehderived
panel.indirect > panel.vehicle * 1.05
flag_jumpderived
(panel.indirect > prev.indirect * 1.5) & (panel.loans < prev.loans * 1.10) & (panel.indirect >= 5e6)
flag_clean_dqderived
(panel.indirect >= 25e6) & (panel.ind_dq_pct < 0.10)
n_flagsderived
panel[FLAGS].fillna(False).sum(axis=1)