Examples & Interactive Tutorials
Interactive Jupyter Notebook Demos
📓 Comprehensive Tutorial Notebooks
The library includes two detailed Jupyter notebook tutorials with executable examples and real data:
- 🚀 REST API Demo (
ffiec_data_connect_rest_demo.ipynb) Complete walkthrough of the modern REST API including:
OAuth2 credential setup and JWT token management
Authentication troubleshooting and token validation
All 7 REST API endpoints with real banking data examples
Performance optimization and rate limiting strategies
Advanced features: batch operations, error handling
Migration from SOAP to REST API
- 🔧 SOAP API Demo (
ffiec_data_connect_soap_demo.ipynb) Legacy SOAP API implementation covering:
WebserviceCredentials setup and session management
Connection handling and error recovery
Historical data collection examples
Comparison with REST API functionality
Step-by-step migration guidance
- 💡 Getting Started with Notebooks
Install the library:
pip install ffiec-data-connectOpen the notebooks in your preferred environment (Jupyter Lab, VS Code, Colab)
Follow the step-by-step instructions with executable code cells
Experiment with your own credentials and data queries
Code Examples
Loading credentials and starting a connection to the FFIEC Webservice
When using the package, credentials to the Webservice may be loaded from environment variables, or through the instantiation of the WebserviceCredentials class.
The following example shows how to load credentials from instantiation (note that the username and password included are placeholders):
from ffiec_data_connect import credentials, ffiec_connection
creds = credentials.WebserviceCredentials(username="user1234", password="password1234")
conn = ffiec_connection.FFIECConnection()
Collecting the reporting periods
The following example shows how to collect the reporting periods from the FFIEC Webservice.
These reporting periods may be utilized for subsequent queries to the FFIEC Webservice, and to determine when new reporting periods are available for query.
Output is returned as a list of dates in the format of mm/dd/YYYY, which is the “native” format of the FFIEC Webservice.
This code example assumes that a FFIECConnection object named conn and WebserviceCredentials object named creds has been instantiated. (See previous example)
from ffiec_data_connect import methods
reporting_periods = methods.collect_reporting_periods(
session=conn,
creds=creds,
output_type="list",
date_output_format="string_original"
)
print(reporting_periods[0:5])
>> ['6/30/2022', '3/31/2022', '12/31/2021', '9/30/2021', '6/30/2021']
Collect the list of filers for a particular reporting period
The following example shows how to collect the list of filers for a particular reporting period.
This list of filers may be utilized for subsequent queries to the FFIEC Webservice, and to determine which filers are available for query.
Output is returned as a list of filers, with the “rssd” (the name of the Federal Reserve’s ID for regulations) as the primary key.
Note that due to the nature of the FFIEC Webservice, the list of filers may be very large. As a result, the wall time for this query may be very long, depending on the size of the list of filers, the speed of the connection, and the server load of the FFIEC Webservice.
A data dictionary for the output is provided below the output
This code example assumes that a FFIECConnection object named
connand WebserviceCredentials object namedcredshas been instantiated. (See previous example)from ffiec_data_connect import methods filers = methods.collect_filers_on_reporting_period( session=conn, creds=creds, reporting_period="6/30/2022", output_type="list" ) print(filers[100:102]) >> [{'id_rssd': '5752005', 'fdic_cert_number': '59322', 'occ_chart_number': '25264', 'ots_dock_number': None, 'primary_aba_rout_number': None, 'name': 'PEAK TRUST COMPANY, NATIONAL ASSOCIATION', 'state': 'AK', 'city': 'ANCHORAGE', 'address': '3000 A STREET, SUITE 200', 'filing_type': '041', 'has_filed_for_reporting_period': False}, {'id_rssd': '114260', 'fdic_cert_number': '16130', 'occ_chart_number': '12072', 'ots_dock_number': None, 'primary_aba_rout_number': '125200060', 'name': 'FIRST NATIONAL BANK ALASKA', 'state': 'AK', 'city': 'ANCHORAGE', 'address': '360 K STREET', 'filing_type': '041', 'has_filed_for_reporting_period': False}]
Output Fields Field
Description
Data Type
id_rssd
The ID of the financial institution, as provided by the FFIEC.
string
fdic_cert_number (optional)
The FDIC certificate number of the financial institution.
string
occ_chart_number (optional)
The OCC ID of the financial institution.
string
ots_dock_number (optional)
The OTS docket number of the financial institution.
string
primary_aba_rout_number (optional)
The primary ABA routing number of the financial institution.
string
name
The name of the financial institution.
string
state
The state of the financial institution.
string
city
The city of the financial institution.
string
address
The address of the financial institution.
string
filing_type
The type of filing for the financial institution (FFIEC 031, 041, or 051).
string
has_filed_for_reporting_period
Whether or not the financial institution has filed for the reporting period.
boolean
Collect the rssd IDs and submission datetimes of all filers who have filed for a particular reporting period, since a particular date.
The following example shows how to collect the rssd IDs of all filers who have filed for a particular reporting period, since a particular date.
This method is useful for determining how many filers have completed their reporting for the reporting period.
Filers may also re-submit their filings for the reporting period, so this method may also be useful for determining which and how many filers have re-submitted.
This code example assumes that a FFIECConnection object named
connand WebserviceCredentials object namedcredshas been instantiated. (See previous example)from ffiec_data_connect import methods last_filing_date_time = methods.collect_filers_submission_date_time( session=conn, creds=creds, since_date="6/30/2022", reporting_period="6/30/2022", ) print(last_filing_date_time) >> [{'rssd': 688556, 'datetime': '7/1/2022 12:15:06 AM'}, {'rssd': 175458, 'datetime': '7/1/2022 8:00:37 AM'}, {'rssd': 92144, 'datetime': '7/1/2022 12:25:04 PM'}, {'rssd': 750444, 'datetime': '7/1/2022 4:41:37 PM'}, {'rssd': 715630, 'datetime': '7/2/2022 12:08:13 PM'}]The method outputs a list of rssd(s), which represents the Federal Reserve’s ID for regulated institutions, and the date and time of the last filing for the reporting period.
Note that the date and time of the last filing is in Washington DC time. If the requested date output format is python_format, the date and time will be converted to a
datetimeobject, with the time zone set explicitly toAmerica/NewYork.
Collect the list of rssd(s) that have filed in a reporting period since a particular date.
The following example shows how to collect the list of rssd(s) that have filed in a reporting period since a particular date.
This list of rssd(s) may be utilized for subsequent queries to the FFIEC Webservice, and to determine which rssd(s) have filed for the reporting period.
The difference between this example and the prior example is that this example only returns a list of RSSDs, not a list of RSSDs and the RSSD’s last filing date and time.
This code example assumes that a FFIECConnection object named
connand WebserviceCredentials object namedcredshas been instantiated. (See previous example)from ffiec_data_connect import methods inst_list = methods.collect_filers_since_date( session=conn, creds=creds, since_date="6/30/2022", reporting_period="6/30/2022", ) print(inst_list) >> [688556, 175458, 92144, 750444, 715630]
REST API Examples
The package also supports the modern REST API using OAuth2 credentials. Here are examples using the REST API:
Loading OAuth2 credentials and connecting:
from ffiec_data_connect import OAuth2Credentials
from datetime import datetime, timedelta
# Create OAuth2 credentials for REST API
rest_creds = OAuth2Credentials(
username="your_username",
bearer_token="your_bearer_token",
token_expires=datetime.now() + timedelta(days=90)
)
# No connection object needed for REST - pass None as session
Collecting reporting periods via REST:
from ffiec_data_connect import methods
reporting_periods = methods.collect_reporting_periods(
session=None, # None for REST API
creds=rest_creds,
output_type="list",
date_output_format="string_original"
)
print(reporting_periods[0:5])
>> ['2024-09-30', '2024-06-30', '2024-03-31', '2023-12-31', '2023-09-30']
Collecting data via REST with force_null_types:
# Collect data with pandas null handling (better for integer display)
time_series = methods.collect_data(
session=None,
creds=rest_creds,
rssd_id="37",
reporting_period="2024-06-30",
series="call",
force_null_types="pandas" # Use pd.NA for nulls
)
# Or force numpy nulls for compatibility
time_series_compat = methods.collect_data(
session=None,
creds=rest_creds,
rssd_id="37",
reporting_period="2024-06-30",
series="call",
force_null_types="numpy" # Use np.nan for nulls
)
REST API Advantages:
Better performance and reliability
Modern authentication with OAuth2
Automatic retry logic built-in
No session management required
Collect the time series data associated with a particular rssd and reporting period.
With the metadata collected from the earlier examples, the following example shows how to collect the time series data associated with a particular rssd and reporting period.
There are two time series that may be collected: “Call [Report]” and “UBPR” (Universal Bank Performance Report) data. Call Report data reflects the rolling data submissions of banks submitting their FFIEC 031, FFIEC 041, and FFIEC 051 filings. UBPR data is released en masse for all banks mid-month, each month.
(For more information on these reports and data, visit https://call.report)
This code example assumes that a FFIECConnection object named
connand WebserviceCredentials object namedcredshas been instantiated. (See previous example)from ffiec_data_connect import methods time_series = methods.collect_data( session=conn, creds=creds, rssd_id="37", reporting_period="6/30/2022", series="call" ) print(time_series[0:2]) >> [{'mdrm': 'RCONK280', 'rssd': '37', 'quarter': '6/30/2022', 'int_data': 0, 'float_data': None, 'bool_data': None, 'str_data': None, 'data_type': 'int'}, {'mdrm': 'RCONB834', 'rssd': '37', 'quarter': '6/30/2022', 'int_data': 0, 'float_data': None, 'bool_data': None, 'str_data': None, 'data_type': 'int'}]
Output Fields Field
Description
Data Type
mdrm
The ID code for the time series
string
rssd
The Federal Reserve’s ID for the reporting institution
string
quarter
The quarter of the reporting period
string or datetime
int_data
If present, the integer data for the time series
integer
float_data
If present, the floating point data for the time series
float
bool_data
If present, the boolean data for the time series
boolean
str_data
If present, the string data for the time series
string
data_type
The data type of the time series
string
Note on output:
The output is a list of dictionaries.
For information on mapping the MDRM field to a descriptive data dictionary, visit https://call.report
Each row/record within a row/DataFrame will contain only one data_type, with the data type indicating which field within the dict/Series contains the data.
The data_type field will be one of the following: * int * float * bool * str