Getting Started

fcall is a Python package for parsing Farm Credit Administration (FCA) Call Report data into tidy Polars DataFrames.

It is a Python re-implementation of the R package {fcall} by Ketchbrook Analytics.

Installation

pip install fcall
# or with uv:
uv add fcall

Quick start

The package exposes three functions that mirror the R package’s public API.

1. Download a quarter

import fcall

fcall.download_data(
    year = 2025,
    month = "September",   # or month=9
    dest = "fcadata/",
)

This downloads the September 2025 archive from Ketchbrook’s public AWS S3 bucket and unzips it into fcadata/. Valid quarters are March, June, September, and December (or integers 3, 6, 9, 12).

2. Parse the data

result = fcall.process_data("fcadata/")

# Access a specific dataset
rcb_df = result["data"]["RCB"]    # Debt Securities
inst_df = result["data"]["INST"]  # Institution information

# Access the schema / metadata for that dataset
rcb_meta = result["metadata"]["RCB"]
print(rcb_meta["scenario"])        # "single_multiple"
print(rcb_meta["vars_info"])       # Polars DataFrame of column definitions

3. Compare two quarters

fcall.download_data(year=2023, month=9, dest="fcadata_2023/")
fcall.download_data(year=2025, month=9, dest="fcadata_2025/")

diffs = fcall.compare_metadata(
    dir1="fcadata_2023/",
    dir2="fcadata_2025/",
)

# Files added or removed
print(diffs["file_differences"])

# Line-level content diffs for shared files that changed
for filename, diff_lines in diffs["content_differences"].items():
    print(filename)
    print("\n".join(diff_lines))

What data is available?

FCA publishes Call Report data quarterly. As of March 2026 there are 36 datasets per quarter (72 files: one metadata D_*.TXT and one data file per dataset). See fcall.file_metadata for the full list with descriptions:

import fcall

print(fcall.file_metadata)
Warning2024 data is broken

FCA’s 2024 posted files contain a known defect. If you try to process 2024 data, fcall will emit a warning and point you to ketchbrookanalytics/fcall-py/issues/1 for details and workarounds.