Downloading Data
download_data() fetches a quarterly FCA Call Report archive from Ketchbrook Analytics’ public AWS S3 mirror and extracts it locally.
Basic usage
import fcall
fcall.download_data(
year=2025,
month="September",
dest="fcadata/sep2025/",
)Month argument
month accepts either the full month name or its integer equivalent:
# Both of these download September 2025
fcall.download_data(
year=2025,
month="September",
dest="sep_by_name/",
)
fcall.download_data(
year=2025,
month=9,
dest="sep_by_int/",
)Valid quarters are 3 (March), 6 (June), 9 (September), 12 (December).
Selective extraction
Use the files argument to extract only the specific file(s) you want to download.
fcall.download_data(
year=2025,
month=9,
dest="inst_only/",
files=["D_INST.TXT", "INST_Q202509_G20251112.TXT"],
)Suppressing output
Pass quiet=True to suppress the progress messages:
fcall.download_data(
year=2025,
month=9,
dest="data/",
quiet=True,
)URL convention
FCA’s archive URL format changed in 2015:
| Period | URL format | Example |
|---|---|---|
| 2015 - present | {year}{MonthName}.zip |
2020March.zip |
| Before 2015 | {AbbrevMonth}{year}.zip |
Sept2011.zip |
download_data() handles this automatically.
Handling failed downloads
download_data() returns True if the data was downloaded and unzipped successfully. If it can’t download the data (e.g., there is no internet connection, the S3 bucket is unavailable, or there is no data for the requested year and month) or can’t unzip it, download_data() prints an informative message and returns False instead of raising an error. Invalid arguments, such as a non-quarter month, still raise a ValueError. A name in files that is not in the archive raises a KeyError, because that is a mistake in the call and not an unavailable resource.
Check the return value before processing:
if fcall.download_data(year=2025, month=9, dest="data/"):
result = fcall.process_data("data/")Data availability
Check https://www.fca.gov/bank-oversight/call-report-data-for-download to confirm a quarter’s data has been published before attempting a download. Typically each quarter’s data appears 5-6 weeks after the period ends.
FCA’s posted 2024 RCR7 data files are missing rows, so process_data() fails on them. The 2024 files in Ketchbrook’s S3 bucket (which download_data() uses) have been corrected to add the missing rows. All other files are identical to FCA’s. See ketchbrookanalytics/fcall#23 for details. If you need FCA’s original 2024 files, download them directly from the FCA website.