io.github.bnovarini/ncua-data-analysis

NCUA credit union data

NCUA call report data for US credit unions, 2018-2026: profiles, peer comparison, time series.

0.1.7
Version
remote
Transport
6
Tools

Security review

Review passed

Reviewed 1d ago.

  • tools: 6 tools scanned
  • metadata: scanned

No findings.

Tools (6)

  • list_fields

    List available fields with plain-language definitions from the data dictionary. Filter by table ('metrics' = computed ratios, 'fact_call_report_curated' = reported amounts, 'dim_credit_union' = attributes), by search text, or both. Fields marked basis=year_to_date reset each January; metric_series can de-cumulate them. Computed metrics available: asset_growth_yoy (Total assets versus the same quarter one year earlier); loan_growth_yoy (Total loans versus the same quarter one year earlier); share_growth_yoy (Total shares and deposits versus one year earlier); member_growth_yoy (Members versus one year earlier); auto_loan_growth_yoy (New plus used vehicle loans versus one year earlier); first_lien_growth_yoy (First-lien 1-4 family loans versus one year earlier); loan_to_share (Loans divided by total shares and deposits); loans_to_assets (Loans divided by total assets); net_worth_to_assets (Net worth divided by total assets (1.0 = 100%)); allowance_to_loans (Allowance for credit losses di

  • find_credit_union

    Find credit unions by name, state, charter type (federal/state) or asset peer group, in a given quarter (default: latest). Name matching ignores case, punctuation and the words 'federal credit union' / 'FCU', so 'SRP Federal Credit Union' finds 'SRP'; partial names work. It also matches former names (a credit union that was renamed shows up under the old name, match = former_name, with its current name) and a few brand names (BECU, PenFed, SECU). Results are ranked: match = exact, starts_with, contains, former_name, then larger assets first. Each row has 'ambiguous': true when several different credit unions fit the name. In that case ask the user which one they mean (use city and state to tell them apart) rather than picking the first. If nothing matches, the result is one row with 'no_match' explaining why (for example the credit union merged or closed, with its last reported quarter). Returns cu_number, name, location, total assets, members. Use the returned cu_number in the other t

  • credit_union_profile

    Profile of one credit union for one quarter (default latest): attributes, size, and every computed metric with its plain-language definition available through list_fields. Returns null values where NCUA data has none.

  • metric_series

    Time series of one metric or reported field. Give cu_number for one credit union. Otherwise it aggregates all federally insured credit unions matching the optional state (2-letter code) / peer_group (1-6) / min_assets filters: aggregate='median' (default for ratios), 'mean', 'sum' (default for dollar and count fields; not allowed on ratios), 'count' (how many credit unions report the field), 'ratio_of_sums' (sum of field / sum of the denominator field, e.g. shares_certificates over total_shares_and_deposits), or 'pooled' (the system-wide version of a ratio metric: total numerators over total denominators, not a median of credit unions; available for efficiency_ratio, delinquency_rate, loan_to_share, loans_to_assets, net_worth_to_assets, net_worth_ratio_ex_cecl, allowance_to_loans, mix_auto, net_chargeoff_rate, roa_year_end_assets, nim_year_end_assets, loan_yield, cost_of_shares, opex_to_assets, the NCUA-basis ratios (roa_ncua_ytd, nim_ncua_ytd, loan_yield_ncua_ytd, cost_of_funds_ncua_y

  • peer_compare

    Compare one credit union with its peers on chosen metrics or fields (default: a standard set). peer_basis: 'peer_group' (same asset-size group, default), 'state', 'charter_type', or 'peer_group_and_state'. Returns the credit union's value, peer median, 25th/75th percentiles, percentile rank (0-100, higher = larger value) and peer count, for the quarter (default latest). Metrics: asset_growth_yoy (Total assets versus the same quarter one year earlier); loan_growth_yoy (Total loans versus the same quarter one year earlier); share_growth_yoy (Total shares and deposits versus one year earlier); member_growth_yoy (Members versus one year earlier); auto_loan_growth_yoy (New plus used vehicle loans versus one year earlier); first_lien_growth_yoy (First-lien 1-4 family loans versus one year earlier); loan_to_share (Loans divided by total shares and deposits); loans_to_assets (Loans divided by total assets); net_worth_to_assets (Net worth divided by total assets (1.0 = 100%)); allowance_to_loan

  • query_metrics

    Constrained table query, one quarter at a time (default latest), federally insured credit unions only. Pick fields to return, optional filters as [{'field':..., 'op': one of = != > >= < <= in contains, 'value':...}], an order_by field and limit (1 to 200). If more rows match than the limit, the last row is {'truncated': true, ...}. No raw SQL. When order_by is set, credit unions under $10M in assets are left out by default, because tiny credit unions produce extreme ratios (a $1M credit union can show a 34% ROA); rows carry assets_floor_applied. Set min_assets (0 to include everyone) to change it. Year-to-date fields (basis year_to_date in list_fields) are cumulative since January; use the *_quarter metrics for single quarters. Ratios are fractions (0.05 = 5%). Example: top 10 by members_per_fte in peer_group 5. Results over limit end with a truncated row giving total_matching and next_offset; pass offset to page. Field names come from list_fields. Metrics: asset_growth_yoy (Total asse