Skip to main content

quartercall

Read QuarterCall Data — the NCUA Form 5300 Call Reports, republished as Parquet at data.quartercall.com — into pandas. No account or API key is needed.

pip install quartercall
import quartercall

quartercall.quarters()

quarters() returns one row per published quarter, newest first:

Column Holds
quarter the cycle, such as 2026Q3
cycle_date the cycle's last day
status open while filings may still arrive; dormant once NCUA has validated none for over a year
cu_count credit unions that have filed for the cycle
updated_at when the quarter's files were last rebuilt, in UTC

No quarter is final: NCUA accepts an amendment to a cycle of any age, and a dormant quarter becomes open again when one arrives. A recent quarter is published while many credit unions have yet to file.

Read a quarter

import quartercall as qc

# Assets and members for one institution, from its latest filing for the quarter.
accounts = qc.accounts("2026Q2", codes=["A010", "A083"], cuid=5163)

# The ten largest credit unions by total assets.
largest = qc.accounts("2026Q2", codes="A010").nlargest(10, "account_value")

profiles = qc.profiles(
    "2026Q2",
    columns=["quarter", "cu_number", "submission_id", "cuid", "credit_union_name", "state"],
)

# Non-numeric values, such as the filed net-worth classification.
text = qc.accounts_text("2026Q2", codes="A700")

Each reader returns a pandas DataFrame with the published column names and Arrow-backed types, as does quarters(), so their frames merge on quarter and cycle_date. A missing value is <NA>, never zero. account_value is a float64, which arithmetic, ranking, plotting and export expect; exact=True keeps the published decimal128(24, 8), whose values are Python Decimal objects, for reconciling to the cent. Nullable integers stay integers. Dates and timestamps retain their Parquet types, and NCUA profile strings stay strings, including dates, leading zeros and Yes/No values.

Argument Readers Behavior
quarter all One explicit quarter, such as "2026Q2"
codes accounts, accounts_text One raw account-code string or a sequence, preserving leading zeros
cu_number all One charter number or a sequence of integers
cuid accounts, profiles One institution identifier or a sequence of integers
columns all A sequence of output column names, in the requested order; omitted means all
exact accounts True returns account_value as the published decimal; the default is float64
cache_dir all Optional directory for verified files; omitted means no disk cache
base_url, timeout all Alternate data root and timeout in seconds per network operation; defaults match quarters()

Filters combine with AND, and an empty sequence selects no rows. Filtering works even when its column is absent from columns. A missing account or value is never filled with zero. A numeric NULL means published as text only when a matching accounts_text row exists. A published quarter without a text file returns a typed empty DataFrame.

Use cuid to follow an institution across charter conversions; cu_number identifies a charter. The text table has no cuid, so filter it by charter. Profile names and profile_charter_number reflect when NCUA supplied the profile and do not necessarily describe the historical quarter.

Some filings have no profile. Keep them with a left join on the filing's keys:

named_accounts = accounts.merge(
    profiles,
    on=["quarter", "cu_number", "submission_id"],
    how="left",
    suffixes=("", "_profile"),
    validate="many_to_one",
)

Each call reads its own manifest, so separate calls may see different amendments. Including submission_id in the join prevents attaching another filing's profile. For a text join, use those same keys plus account_code.

Downloads and caching

Readers follow paths in the manifest and download the whole quarter file before applying filters and column selection. Selection reduces the returned data, not the network download. They check the file's SHA-256 and byte count before reading Parquet. If a publication changes mid-read, they fetch a fresh manifest and retry, at most three attempts total.

assets = qc.accounts("2026Q2", codes="A010", cache_dir=".quartercall-cache")
# Reuses the verified quarter file if its manifest digest has not changed.
members = qc.accounts("2026Q2", codes="A083", cache_dir=".quartercall-cache")

The manifest is fetched on every call, even for dormant quarters. Cached files are checked before reuse and retained by digest; old versions are not automatically removed. The cache can be deleted when no reader is using it. It does not provide offline access.

Schema 1.2 and later require digests and byte counts. Older 1.0/1.1 manifests without them remain readable, but those files cannot be verified against the manifest and are not cached.

  • DataUnavailableError: the requested quarter or table has not been published.
  • DataIntegrityError: invalid digest metadata, an incomplete download, or a mismatch that persists after retries. Files are replaced before the manifest that names them is published, so a mismatch most often means the quarter is being republished: try again in a few minutes.
  • UnsupportedSchemaError: a major data schema version this package cannot read.
  • ValueError / TypeError: invalid quarter, filters or column selection.
  • OSError: a network or HTTP failure, as urllib.error.URLError (including HTTPError), or as TimeoutError when a response stalls. A missing file that the manifest says exists raises an error; it is never returned as an empty table.

Malformed Parquet raises the underlying PyArrow error. Filesystem errors from an explicitly requested cache are also propagated.

QuarterCall is a registered trademark of QuarterCall Holdings Inc. The code is licensed under the Apache License 2.0.

Metadata

Release files for quartercall 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quartercall 0.0.2
File Size Uploaded Provenance Actions
quartercall-0.0.2.tar.gz 18.9 kB With provenance Details for quartercall-0.0.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for quartercall 0.0.2
File Interpreter ABI Platform Actions
quartercall-0.0.2-py3-none-any.whl Python 3 none any Details for quartercall-0.0.2-py3-none-any.whl

Total release size: 33.5 kB

Release files / quartercall-0.0.2.tar.gz

Download URL quartercall-0.0.2.tar.gz
Size 18.9 kB
Tags Source
SHA-256 checksum
How to use checksums
fbc740a66f1ea9c26421b76a3d74f684d91bbeb819072ee78a4db4688c5a60ff
BLAKE2b-256 checksum
How to use checksums
21209e5e1c77f42db037080d9f933086ad76f1925d8796d4104dfa82cd9ddb3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.

Transparency log

Release files / quartercall-0.0.2-py3-none-any.whl

Download URL quartercall-0.0.2-py3-none-any.whl
Size 14.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e837f5059c18b81a25558cb103958835608c5e81278ea9babd71d2d27fb0fad9
BLAKE2b-256 checksum
How to use checksums
9be3710f357762dc989bdaad4627b3d5dbad75896d91539782c3a28c5052e455
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.

Transparency log

Security for quartercall 0.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for quartercall-0.0.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page