accounts

curated/accounts — one row per credit union, per account code, per quarter, from the newest filing.

accounts — curated/accounts/quarter=YYYYQn/data.parquet
columntypenotes
quarterVARCHAR2026Q1 (also the Hive partition)
cycle_dateDATEquarter-end, 2026-03-31
cu_numberINTEGERcharter number (the CU key)
submission_idBIGINTunique per filing
versionSMALLINTamendment version; curated contains newest only (see §5)
account_codeVARCHARraw NCUA code, exactly as filed — no remapping/series logic
account_valueDECIMAL(24,8)money-exact and ratio-exact — see the note below
ingested_atTIMESTAMPwhen callbase last built this cycle's file — one value for every row of a cycle, not a per-filing time. A cycle is rebuilt only when something it is built from changed (§0), so this moves when the cycle's content may have. For when a filing arrived, use first_seen on the index
cuidINTEGERNCUA's entity id — the key that survives a charter conversion; see Which key below. NULL for the two filings whose payload has no Profile block

Before you read a NULL, read gotcha 1: a NULL accounts.account_value means published as text when accounts_text has the row and not reported when it does not. A code a credit union did not file has no row at all. None of these is zero.

Rows are sorted by accounts.cu_number, so a filter on it lets DuckDB skip most of a file. A filter on accounts.cuid reads the whole file; the one credit union over time recipe looks the charters up in the index first. accounts.ingested_at is one value for the whole quarter: when its file was built, not when a filing arrived.

Contract schema 1.2 · docs built 2026-10-29 from platform 4894823