Skip to main content

bankregreports — BankRegAPI Python SDK

PyPI version Python 3.8+ Typed Swagger Docs Docs

Python client for the BankRegReports Data API — clean, validated, cross-source regulatory data on every US bank, credit union, and holding company, sourced from FFIEC Call Reports, UBPR, FDIC, Federal Reserve, NCUA, and SEC EDGAR.

Full SDK docs  ·  Swagger / OpenAPI  ·  Get API key  ·  bankregreports.com


Why BankRegReports

Raw US bank regulatory data is public but arrives as pipe-delimited bulk files with cryptic MDRM codes, four competing unit conventions, silent schema changes between quarters, and no linkage between FDIC, FFIEC, Federal Reserve, and SEC identifiers. Cleaning it to a usable state takes months. Enterprise data platforms solve this — at $20K–$200K+/year with multi-year contracts.

BankRegReports is the middle ground: the same cleaned, validated, cross-source-linked data through a modern REST API with a Python SDK, at a fraction of the cost. Built by practitioners who have been in ALCO, been through regulatory exams, and needed this data to actually exist.

Read the full background: Why We Built BankRegReports →


Installation

pip install bankregreports
# with pandas (recommended)
pip install "bankregreports[pandas]"

Requires: Python 3.8+ · requests>=2.25


Quick start

import bankregreports

# Set BANKREG_API_TOKEN env var, or pass the token directly
brr = bankregreports.BankReg("brr_xxx")

# Screen every US bank — returns a pandas DataFrame
df = brr.screener(state="GA", min_assets=500_000)
print(df[["legal_name", "total_assets", "cet1_ratio", "roa"]].head(10))

Works as a context manager:

with bankregreports.BankReg("brr_xxx") as brr:
    df_banks = brr.screener(state="TX")
    df_rates = brr.rates("mortgage")

Authentication

Get a free API key at bankregreports.com/api. All keys begin with brr_.

# Explicit token
brr = bankregreports.BankReg("brr_xxx")

# Environment variable (recommended)
# export BANKREG_API_TOKEN=brr_xxx
brr = bankregreports.BankReg()

Coverage — 101 datasets across 16 domains

Domain What you get
Banks — snapshot & trends Latest metrics, 20-quarter time series, full Call Report/UBPR detail
Banks — scores & peers CAMELS-style scores, percentile ranks, peer benchmarks
Banks — sub-books Deposits, securities (HTM/AFS/unrealized G/L), loans, HMDA
Banks — structure Parent chain, subsidiaries, NIC events, FDIC history, FRY-15
Branches FDIC SoD + NIC combined, rollup stats, map-ready lat/lon
Risk & compliance ML failure prediction + feature attribution, enforcement actions, CFPB complaints
Screeners Full-universe filter, M&A target scoring, CRE concentration, growth
SEC / EDGAR 10-K/10-Q/8-K, XBRL facts, insider Form-4, exec comp, 13D/G, 13F
Industry & macro Aggregates, rate environment, credit spreads, VIX
Rates & yield curve Mortgage, T-bill, real yield, consumer, FDIC national deposit rates
Failures & events FDIC failure feed, M&A/charter events, enforcement feed
Credit unions (NCUA) 5300 Call Report, trends, branches, ATMs, peer benchmarks
Holding companies Y-9C BHC snapshot and quarterly trends
CECL & analytics Macro-conditioned lifetime ECL, DFAST scenarios
Watchlist & alerts Track institutions, threshold alerts on any metric
Reference & catalog MDRM definitions, metric catalog with formulas

API reference (selected methods)

# ── Banks ──────────────────────────────────────────────────────────────────
brr.bank(852218)                                # latest snapshot
brr.bank_trends(852218, quarters=12)            # quarterly time series
brr.bank_deep_dive(852218)                      # full Call Report/UBPR detail (~150 fields)
brr.bank_profile(852218)                        # snapshot + scorecard + ranks + ML prediction
brr.bank_compare([852218, 480228, 37])          # side-by-side comparison
brr.screener(state="GA", min_assets=500_000)    # filter the full ~4,400-bank universe
brr.scorecard(852218)                           # CAMELS-style letter grade + component scores
brr.peer_comparison(852218)                     # bank vs. peer benchmarks

# ── Sub-books ──────────────────────────────────────────────────────────────
brr.bank_deposits(852218, trends=True)          # deposit composition trends
brr.bank_securities(852218)                     # HTM/AFS, unrealized G/L, OTTI
brr.loan_portfolio(852218)                      # CRE, C&I, consumer, ag concentrations
brr.bank_hmda(852218)                           # HMDA mortgage lending

# ── Risk & analytics ───────────────────────────────────────────────────────
brr.prediction(852218, detail=True)             # ML failure probability + feature attribution
brr.ma_screener()                               # M&A target scoring + valuation
brr.enforcement_actions(852218)                 # FDIC/OCC/FRB/CFPB enforcement history

# ── SEC / EDGAR ────────────────────────────────────────────────────────────
brr.sec_filings(852218)                         # 10-K, 10-Q, 8-K, proxy index
brr.sec_insider_txns(852218)                    # Form-4 insider buy/sell
brr.sec_13f(852218)                             # institutional holdings
brr.executive_comp(852218)                      # NEO compensation from proxy

# ── Credit unions (NCUA) ───────────────────────────────────────────────────
brr.credit_union(5536, trends=True)             # 5300 Call Report snapshot + trends
brr.cu_peer_benchmarks()                        # CU peer benchmarks by asset tier

# ── Rates & macro ──────────────────────────────────────────────────────────
brr.rates("mortgage")                           # Freddie Mac 30yr/15yr series
brr.yield_curve(latest=True)                    # current yield curve snapshot
brr.industry(trends=True, quarters=20)          # 20-quarter industry aggregate trend

# ── Generic accessor ───────────────────────────────────────────────────────
brr.list_datasets()                             # all 101 datasets: name, path, tier
brr.dataset("screener", state="GA")             # forward-compatible generic accessor

Full reference: www.bankregreports.com/api/  ·  Interactive REST docs: api.bankregreports.com/api/v1/docs/


Pagination

import pandas as pd

# Iterate pages, 200 rows at a time
for page in brr.pages("screener", page_size=200, state="CA"):
    process(page)

# Collect all pages into one DataFrame
all_banks = pd.concat(brr.pages("screener", page_size=500))

Error handling

All errors subclass BankRegError. GET requests auto-retry with exponential backoff on 429 and 5xx (default 3 retries).

from bankregreports import (
    BankReg, BankRegError,
    AuthenticationError, UpgradeRequiredError, NotFoundError,
    RateLimitError, ValidationError, ServerError,
)

try:
    df = brr.ma_screener()
except UpgradeRequiredError:
    print("Upgrade at bankregreports.com/api/")
except RateLimitError as e:
    time.sleep(e.retry_after)
except NotFoundError:
    print("Institution not found")
Exception HTTP Meaning
AuthenticationError 401 Missing or revoked API key
UpgradeRequiredError 403 Plan doesn't cover this dataset
NotFoundError 404 Institution or resource not found
ValidationError 422 Invalid parameters
RateLimitError 429 Throttled — check e.retry_after
ServerError 5xx Server error (auto-retried)

Configuration

brr = bankregreports.BankReg(
    token="brr_xxx",               # or BANKREG_API_TOKEN env var
    base_url="http://localhost:8000",
    timeout=30,
    max_retries=3,
)

Response format

All list-returning methods return a pandas.DataFrame by default (requires pandas extra). Date columns are coerced to datetime64. The server response envelope is available on df.attrs["meta"].

Pass as_dataframe=False to any method for raw decoded JSON with no pandas dependency.


Resources

Platform bankregreports.com
API sign-up bankregreports.com/api
Swagger / REST docs api.bankregreports.com/api/v1/docs/
SDK docs www.bankregreports.com/api/
Changelog CHANGELOG.md
Support admin@bankregreports.com

License

Copyright © 2024–2026 BankRegReports LLC. Proprietary — see LICENSE.

Metadata

Release files for bankregreports 0.2.0

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

Source distribution (sdist)

Source distribution for bankregreports 0.2.0
File Size Uploaded Provenance
bankregreports-0.2.0.tar.gz 23.2 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 45.8 kB

Release files / bankregreports-0.2.0.tar.gz

Download URL bankregreports-0.2.0.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8a9922ac11d592f6e0a0a7b4e3973f93d879e2bd8228d32acbf0e52a22af4718
BLAKE2b-256 checksum
How to use checksums
d68123d0121481e474af76e0f70f4fed5094c6f420523bfd604fa5881caceb95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.13

Release files / bankregreports-0.2.0-py3-none-any.whl

Download URL bankregreports-0.2.0-py3-none-any.whl
Size 22.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f0ac05e54ebb25409a6e9b31c3164018fa3a7c7ac0d2ca3084dd507c18985aed
BLAKE2b-256 checksum
How to use checksums
20140716f51d685a0a461687f72ac2ab83fa9fe5d87fc14f613bbc2dadaac68c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.13

Security for bankregreports 0.2.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No 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