banksonsale-data 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- banksonsale_data-0.1.0/CITATION.cff +17 -0
- banksonsale_data-0.1.0/DATA_LICENSE.md +24 -0
- banksonsale_data-0.1.0/LICENSE +21 -0
- banksonsale_data-0.1.0/MANIFEST.in +7 -0
- banksonsale_data-0.1.0/PKG-INFO +190 -0
- banksonsale_data-0.1.0/README.md +153 -0
- banksonsale_data-0.1.0/docs/CONTINUE_IN_BANKSONSALE.md +25 -0
- banksonsale_data-0.1.0/docs/DATA_CONTRACT.md +55 -0
- banksonsale_data-0.1.0/docs/METRICS.md +24 -0
- banksonsale_data-0.1.0/docs/PUBLISHING.md +34 -0
- banksonsale_data-0.1.0/docs/SAMPLE_MANIFEST.json +120 -0
- banksonsale_data-0.1.0/examples/comparison-2026-q2.csv +4 -0
- banksonsale_data-0.1.0/examples/comparison-2026-q2.manifest.json +707 -0
- banksonsale_data-0.1.0/notebooks/01_bank_financials.ipynb +123 -0
- banksonsale_data-0.1.0/notebooks/02_compare_banks.ipynb +134 -0
- banksonsale_data-0.1.0/pyproject.toml +52 -0
- banksonsale_data-0.1.0/scripts/build_examples.py +58 -0
- banksonsale_data-0.1.0/scripts/refresh_samples.py +24 -0
- banksonsale_data-0.1.0/scripts/verify_notebooks.py +16 -0
- banksonsale_data-0.1.0/scripts/verify_openbb.py +27 -0
- banksonsale_data-0.1.0/setup.cfg +4 -0
- banksonsale_data-0.1.0/src/banksonsale_data/__init__.py +11 -0
- banksonsale_data-0.1.0/src/banksonsale_data/__main__.py +3 -0
- banksonsale_data-0.1.0/src/banksonsale_data/cli.py +47 -0
- banksonsale_data-0.1.0/src/banksonsale_data/client.py +236 -0
- banksonsale_data-0.1.0/src/banksonsale_data/models.py +193 -0
- banksonsale_data-0.1.0/src/banksonsale_data/py.typed +0 -0
- banksonsale_data-0.1.0/src/banksonsale_data/resources/metrics.json +160 -0
- banksonsale_data-0.1.0/src/banksonsale_data/resources/sample-3510.json +395 -0
- banksonsale_data-0.1.0/src/banksonsale_data/resources/sample-58665.json +395 -0
- banksonsale_data-0.1.0/src/banksonsale_data/resources/sample-628.json +395 -0
- banksonsale_data-0.1.0/src/banksonsale_data/sample.py +18 -0
- banksonsale_data-0.1.0/src/banksonsale_data.egg-info/PKG-INFO +190 -0
- banksonsale_data-0.1.0/src/banksonsale_data.egg-info/SOURCES.txt +38 -0
- banksonsale_data-0.1.0/src/banksonsale_data.egg-info/dependency_links.txt +1 -0
- banksonsale_data-0.1.0/src/banksonsale_data.egg-info/entry_points.txt +2 -0
- banksonsale_data-0.1.0/src/banksonsale_data.egg-info/requires.txt +19 -0
- banksonsale_data-0.1.0/src/banksonsale_data.egg-info/top_level.txt +1 -0
- banksonsale_data-0.1.0/tests/test_data.py +194 -0
- banksonsale_data-0.1.0/tests/test_optional_io.py +41 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use BanksOnSale Data, cite this software and the FDIC source and reporting dates recorded in the dataset manifest."
|
|
3
|
+
title: "BanksOnSale Data"
|
|
4
|
+
type: software
|
|
5
|
+
authors:
|
|
6
|
+
- name: "BanksOnSale"
|
|
7
|
+
version: 0.1.0
|
|
8
|
+
date-released: 2026-10-29
|
|
9
|
+
license: MIT
|
|
10
|
+
url: "https://www.banksonsale.com/data"
|
|
11
|
+
repository-code: "https://github.com/anshuman-pandey/banksonsale-data"
|
|
12
|
+
abstract: "Keyless U.S. bank financial panels with explicit calendar quarters, metric units, archived FDIC responses and portable source-linked exports."
|
|
13
|
+
keywords:
|
|
14
|
+
- bank data
|
|
15
|
+
- FDIC
|
|
16
|
+
- bank research
|
|
17
|
+
- reproducible research
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# BanksOnSale Data source and reuse
|
|
2
|
+
|
|
3
|
+
Original package code is licensed under MIT. BanksOnSale's original dataset
|
|
4
|
+
compilation and metadata in the pinned sample resources are offered under
|
|
5
|
+
[Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/).
|
|
6
|
+
FDIC BankFind Suite is the original regulatory data source. BanksOnSale does not
|
|
7
|
+
claim exclusive ownership of the underlying government observations or imply
|
|
8
|
+
FDIC endorsement. Consult the original source documentation for its terms.
|
|
9
|
+
|
|
10
|
+
Recommended credit: **BanksOnSale Data, sourced from FDIC BankFind Suite**, followed
|
|
11
|
+
by the bank CERT, reporting dates, package version and dataset ID. Raw source
|
|
12
|
+
responses, request URLs, source-index creation timestamps and retrieval timestamps
|
|
13
|
+
are retained in each sample. The bank's original reporting date is a different
|
|
14
|
+
thing from the source index or retrieval date.
|
|
15
|
+
|
|
16
|
+
These licenses do not cover unrelated market feeds, private BanksOnSale accounts,
|
|
17
|
+
saved research, subscription-only data or third-party material elsewhere on
|
|
18
|
+
BanksOnSale.com. This release contains only selected public FDIC observations and
|
|
19
|
+
original code/metadata. The source and the compilation may contain errors;
|
|
20
|
+
independently verify material conclusions against the filings.
|
|
21
|
+
|
|
22
|
+
Source definitions: https://api.fdic.gov/banks/docs/risview_properties.yaml
|
|
23
|
+
API documentation: https://api.fdic.gov/banks/docs/
|
|
24
|
+
Corrections: https://www.banksonsale.com/corrections
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 BanksOnSale
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
include LICENSE DATA_LICENSE.md CITATION.cff README.md
|
|
2
|
+
recursive-include src/banksonsale_data/resources *.json
|
|
3
|
+
recursive-include docs *.md *.json
|
|
4
|
+
recursive-include notebooks *.ipynb
|
|
5
|
+
recursive-include examples *.csv *.json
|
|
6
|
+
recursive-include tests *.py
|
|
7
|
+
recursive-include scripts *.py
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: banksonsale-data
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: BanksOnSale Data: source-linked U.S. bank financial panels for research, classes, and applications.
|
|
5
|
+
Author: BanksOnSale
|
|
6
|
+
License-Expression: MIT AND CC-BY-4.0
|
|
7
|
+
Project-URL: Homepage, https://banksonsale.com
|
|
8
|
+
Project-URL: Repository, https://github.com/anshuman-pandey/banksonsale-data
|
|
9
|
+
Project-URL: Documentation, https://github.com/anshuman-pandey/banksonsale-data#readme
|
|
10
|
+
Project-URL: Issues, https://github.com/anshuman-pandey/banksonsale-data/issues
|
|
11
|
+
Keywords: banksonsale,bank-data,fdic,banking,financial-data
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Education
|
|
15
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
License-File: DATA_LICENSE.md
|
|
22
|
+
Provides-Extra: pandas
|
|
23
|
+
Requires-Dist: pandas>=1.5; extra == "pandas"
|
|
24
|
+
Provides-Extra: parquet
|
|
25
|
+
Requires-Dist: pyarrow>=14; extra == "parquet"
|
|
26
|
+
Provides-Extra: polars
|
|
27
|
+
Requires-Dist: polars>=0.20; extra == "polars"
|
|
28
|
+
Provides-Extra: io
|
|
29
|
+
Requires-Dist: pandas>=1.5; extra == "io"
|
|
30
|
+
Requires-Dist: pyarrow>=14; extra == "io"
|
|
31
|
+
Provides-Extra: notebooks
|
|
32
|
+
Requires-Dist: pandas>=1.5; extra == "notebooks"
|
|
33
|
+
Requires-Dist: nbformat>=5; extra == "notebooks"
|
|
34
|
+
Requires-Dist: nbclient>=0.10; extra == "notebooks"
|
|
35
|
+
Requires-Dist: ipykernel>=6; extra == "notebooks"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# BanksOnSale Data
|
|
39
|
+
|
|
40
|
+
**U.S. bank financial data with the quarter, units and original source attached.**
|
|
41
|
+
|
|
42
|
+
[BanksOnSale.com](https://www.banksonsale.com) · [Public data catalog](https://www.banksonsale.com/data) · [Metric definitions](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/docs/METRICS.md) · [OpenBB extension](https://github.com/anshuman-pandey/banksonsale-data/tree/v0.1.0/integrations/openbb)
|
|
43
|
+
|
|
44
|
+
Get a bank's quarterly financial panel, inspect the source evidence, and export
|
|
45
|
+
CSV, JSON or Parquet. The core package uses Python's standard library: **no
|
|
46
|
+
BanksOnSale account, API key, paid subscription or background telemetry**.
|
|
47
|
+
|
|
48
|
+
Start offline with real, pinned samples. Use the same interface for a live FDIC
|
|
49
|
+
request when you want to choose another institution or reporting window.
|
|
50
|
+
|
|
51
|
+
## Install v0.1.0
|
|
52
|
+
|
|
53
|
+
Python 3.10 or newer. Install the versioned release wheel without requiring Git:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
python -m pip install https://github.com/anshuman-pandey/banksonsale-data/releases/download/v0.1.0/banksonsale_data-0.1.0-py3-none-any.whl
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or install the tagged source with Git:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
python -m pip install "banksonsale-data @ git+https://github.com/anshuman-pandey/banksonsale-data.git@v0.1.0"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
These instructions use the GitHub release; they do not assume a PyPI release exists.
|
|
66
|
+
Optional extras include `pandas`, `polars`, `parquet`, and `notebooks`.
|
|
67
|
+
For example, install `pandas` in the same environment to use `.to_pandas()`.
|
|
68
|
+
|
|
69
|
+
## Useful output in four lines
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
from banksonsale_data import load_sample
|
|
73
|
+
|
|
74
|
+
panel = load_sample(58665) # Live Oak Banking Company; eight quarters through 2026Q2
|
|
75
|
+
print(panel.rows[-1])
|
|
76
|
+
panel.export("live-oak.csv") # also writes live-oak.manifest.json with sources and units
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The offline sample covers **2024-09-30 through 2026-06-30**. It is a frozen
|
|
80
|
+
example, not a claim about the latest available filing. Three sample institutions
|
|
81
|
+
are included: CERT 628, 3510 and 58665. They demonstrate the interface across
|
|
82
|
+
bank sizes; they are not a matched peer group or a ranking.
|
|
83
|
+
|
|
84
|
+
## Choose a bank and an exact reporting window
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
from banksonsale_data import bank, search
|
|
88
|
+
|
|
89
|
+
matches = search("Live Oak", state="NC") # inspect matches and select a CERT
|
|
90
|
+
panel = bank(58665).financials(quarters=8, through="2026Q2")
|
|
91
|
+
print(panel.document["bank"]["name"], panel.document["coverage"])
|
|
92
|
+
print(panel.dataset_id)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Omitting `through` asks FDIC for that bank's latest available reporting date and
|
|
96
|
+
records that default in the manifest. Different banks can have different latest
|
|
97
|
+
dates. Select the same explicit quarter when comparing banks. Requests are
|
|
98
|
+
bounded and transient failures have capped retries.
|
|
99
|
+
|
|
100
|
+
## Use your existing analysis tools
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
frame = panel.to_pandas() # optional pandas; evidence retained in frame.attrs["banksonsale"]
|
|
104
|
+
records = panel.rows # independent copy of standard Python records
|
|
105
|
+
panel.export("live-oak.json") # self-contained snapshot with archived evidence
|
|
106
|
+
panel.export("live-oak.parquet") # optional pyarrow; evidence in schema metadata
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
CSV works in spreadsheets and DuckDB. `.to_polars()` is available with Polars
|
|
110
|
+
installed. See [the data contract](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/docs/DATA_CONTRACT.md) for nulls, units and
|
|
111
|
+
snapshot integrity. JSON from `panel.export()` is a BankPanel envelope; the
|
|
112
|
+
website's quarter-wide JSON download is a separate documented format.
|
|
113
|
+
|
|
114
|
+
## Run a real example
|
|
115
|
+
|
|
116
|
+
- [Bank financials and exports](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/01_bank_financials.ipynb) — [Open in Colab](https://colab.research.google.com/github/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/01_bank_financials.ipynb).
|
|
117
|
+
- [Same-quarter comparison and SQL](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/02_compare_banks.ipynb) — [Open in Colab](https://colab.research.google.com/github/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/02_compare_banks.ipynb).
|
|
118
|
+
- [Ready-to-open comparison CSV](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/examples/comparison-2026-q2.csv), with the [source manifest](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/examples/comparison-2026-q2.manifest.json).
|
|
119
|
+
|
|
120
|
+
The notebooks run locally without a cloud account. Their install cell retrieves
|
|
121
|
+
the tagged public release. Colab has its own sign-in requirements and limits.
|
|
122
|
+
|
|
123
|
+
## What you get
|
|
124
|
+
|
|
125
|
+
Fourteen reported fields cover assets, total and domestic deposits, equity,
|
|
126
|
+
intangibles, net loans, estimated uninsured deposits, core deposits, CET1,
|
|
127
|
+
leverage, annualized ROA/ROE, domestic offices and employees.
|
|
128
|
+
|
|
129
|
+
- Monetary columns end in `_usd` and are **U.S. dollars**, normalized once from FDIC's USD-thousands values.
|
|
130
|
+
- Ratios end in `_pct`: **12.5 means 12.5%**. ROA and ROE are already annualized by the source.
|
|
131
|
+
- CET1 uses **RBCT1CER**. Leverage uses **RBC1AAJ**. They remain distinct.
|
|
132
|
+
- Missing observations stay `None`. Reported zero and negative observations remain unchanged.
|
|
133
|
+
- Missing quarters remain explicit rows with `report_available=False`; older reports are never substituted.
|
|
134
|
+
- FDIC CERT identifies an institution, not a listed holding company, ticker or individual branch.
|
|
135
|
+
|
|
136
|
+
This is a small, versioned release of selected FDIC fields. It does not cover all
|
|
137
|
+
bank data, customers' accounts, live transactions, full Call Reports, transaction
|
|
138
|
+
prices or verified sale listings. Names and institution metadata reflect the
|
|
139
|
+
upstream source at retrieval, not a reconstructed historical identity timeline.
|
|
140
|
+
|
|
141
|
+
## Command line
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
banksonsale-data sample --cert 58665 --output live-oak.csv
|
|
145
|
+
banksonsale-data search "Live Oak" --state NC
|
|
146
|
+
banksonsale-data financials --cert 58665 --quarters 8 --through 2026Q2 --output live-oak.json
|
|
147
|
+
banksonsale-data definitions
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Continue the research in BanksOnSale
|
|
151
|
+
|
|
152
|
+
[Open Live Oak's public financial summary](https://www.banksonsale.com/banks/58665)
|
|
153
|
+
or [explore the BanksOnSale research workspace](https://www.banksonsale.com/discover).
|
|
154
|
+
The hosted product adds saved screens, watchlists, research dossiers, monitoring,
|
|
155
|
+
models and exports; some features require a subscription. Its data edition is
|
|
156
|
+
displayed separately and can differ from this package's selected period.
|
|
157
|
+
|
|
158
|
+
These are optional links. The package keeps working without an account, sends
|
|
159
|
+
no usage telemetry, and does not create a subscription. See [continuing your
|
|
160
|
+
research](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/docs/CONTINUE_IN_BANKSONSALE.md).
|
|
161
|
+
|
|
162
|
+
## OpenBB
|
|
163
|
+
|
|
164
|
+
The optional [independently maintained OpenBB V5 extension](https://github.com/anshuman-pandey/banksonsale-data/tree/v0.1.0/integrations/openbb)
|
|
165
|
+
adds `obb.banksonsale`. It reuses this package and its definitions. It is not
|
|
166
|
+
bundled with or endorsed by OpenBB. The core package does not require OpenBB.
|
|
167
|
+
|
|
168
|
+
## Source, license and citation
|
|
169
|
+
|
|
170
|
+
Original source: [FDIC BankFind Suite](https://api.fdic.gov/banks/docs/).
|
|
171
|
+
BanksOnSale is an independent compiler; no FDIC affiliation or endorsement is implied.
|
|
172
|
+
|
|
173
|
+
Original code: [MIT](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/LICENSE). Sample compilation and original metadata:
|
|
174
|
+
[CC BY 4.0, with separate source attribution](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/DATA_LICENSE.md).
|
|
175
|
+
Use [CITATION.cff](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/CITATION.cff) and record the bank CERT, report dates and dataset ID.
|
|
176
|
+
SHA-256 checks detect changes to a snapshot; they are not a government signature
|
|
177
|
+
or proof that a filing is economically correct.
|
|
178
|
+
|
|
179
|
+
## Contributing and verification
|
|
180
|
+
|
|
181
|
+
See [CONTRIBUTING.md](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/CONTRIBUTING.md). Offline checks:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
python -m pip install -e .
|
|
185
|
+
python -m unittest discover -s tests -v
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Network refreshes are explicit maintainer actions, not part of the default tests.
|
|
189
|
+
[Report a package issue](https://github.com/anshuman-pandey/banksonsale-data/issues)
|
|
190
|
+
or [a source-data correction](https://www.banksonsale.com/corrections).
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# BanksOnSale Data
|
|
2
|
+
|
|
3
|
+
**U.S. bank financial data with the quarter, units and original source attached.**
|
|
4
|
+
|
|
5
|
+
[BanksOnSale.com](https://www.banksonsale.com) · [Public data catalog](https://www.banksonsale.com/data) · [Metric definitions](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/docs/METRICS.md) · [OpenBB extension](https://github.com/anshuman-pandey/banksonsale-data/tree/v0.1.0/integrations/openbb)
|
|
6
|
+
|
|
7
|
+
Get a bank's quarterly financial panel, inspect the source evidence, and export
|
|
8
|
+
CSV, JSON or Parquet. The core package uses Python's standard library: **no
|
|
9
|
+
BanksOnSale account, API key, paid subscription or background telemetry**.
|
|
10
|
+
|
|
11
|
+
Start offline with real, pinned samples. Use the same interface for a live FDIC
|
|
12
|
+
request when you want to choose another institution or reporting window.
|
|
13
|
+
|
|
14
|
+
## Install v0.1.0
|
|
15
|
+
|
|
16
|
+
Python 3.10 or newer. Install the versioned release wheel without requiring Git:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
python -m pip install https://github.com/anshuman-pandey/banksonsale-data/releases/download/v0.1.0/banksonsale_data-0.1.0-py3-none-any.whl
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or install the tagged source with Git:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
python -m pip install "banksonsale-data @ git+https://github.com/anshuman-pandey/banksonsale-data.git@v0.1.0"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
These instructions use the GitHub release; they do not assume a PyPI release exists.
|
|
29
|
+
Optional extras include `pandas`, `polars`, `parquet`, and `notebooks`.
|
|
30
|
+
For example, install `pandas` in the same environment to use `.to_pandas()`.
|
|
31
|
+
|
|
32
|
+
## Useful output in four lines
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from banksonsale_data import load_sample
|
|
36
|
+
|
|
37
|
+
panel = load_sample(58665) # Live Oak Banking Company; eight quarters through 2026Q2
|
|
38
|
+
print(panel.rows[-1])
|
|
39
|
+
panel.export("live-oak.csv") # also writes live-oak.manifest.json with sources and units
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The offline sample covers **2024-09-30 through 2026-06-30**. It is a frozen
|
|
43
|
+
example, not a claim about the latest available filing. Three sample institutions
|
|
44
|
+
are included: CERT 628, 3510 and 58665. They demonstrate the interface across
|
|
45
|
+
bank sizes; they are not a matched peer group or a ranking.
|
|
46
|
+
|
|
47
|
+
## Choose a bank and an exact reporting window
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from banksonsale_data import bank, search
|
|
51
|
+
|
|
52
|
+
matches = search("Live Oak", state="NC") # inspect matches and select a CERT
|
|
53
|
+
panel = bank(58665).financials(quarters=8, through="2026Q2")
|
|
54
|
+
print(panel.document["bank"]["name"], panel.document["coverage"])
|
|
55
|
+
print(panel.dataset_id)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Omitting `through` asks FDIC for that bank's latest available reporting date and
|
|
59
|
+
records that default in the manifest. Different banks can have different latest
|
|
60
|
+
dates. Select the same explicit quarter when comparing banks. Requests are
|
|
61
|
+
bounded and transient failures have capped retries.
|
|
62
|
+
|
|
63
|
+
## Use your existing analysis tools
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
frame = panel.to_pandas() # optional pandas; evidence retained in frame.attrs["banksonsale"]
|
|
67
|
+
records = panel.rows # independent copy of standard Python records
|
|
68
|
+
panel.export("live-oak.json") # self-contained snapshot with archived evidence
|
|
69
|
+
panel.export("live-oak.parquet") # optional pyarrow; evidence in schema metadata
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
CSV works in spreadsheets and DuckDB. `.to_polars()` is available with Polars
|
|
73
|
+
installed. See [the data contract](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/docs/DATA_CONTRACT.md) for nulls, units and
|
|
74
|
+
snapshot integrity. JSON from `panel.export()` is a BankPanel envelope; the
|
|
75
|
+
website's quarter-wide JSON download is a separate documented format.
|
|
76
|
+
|
|
77
|
+
## Run a real example
|
|
78
|
+
|
|
79
|
+
- [Bank financials and exports](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/01_bank_financials.ipynb) — [Open in Colab](https://colab.research.google.com/github/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/01_bank_financials.ipynb).
|
|
80
|
+
- [Same-quarter comparison and SQL](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/02_compare_banks.ipynb) — [Open in Colab](https://colab.research.google.com/github/anshuman-pandey/banksonsale-data/blob/v0.1.0/notebooks/02_compare_banks.ipynb).
|
|
81
|
+
- [Ready-to-open comparison CSV](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/examples/comparison-2026-q2.csv), with the [source manifest](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/examples/comparison-2026-q2.manifest.json).
|
|
82
|
+
|
|
83
|
+
The notebooks run locally without a cloud account. Their install cell retrieves
|
|
84
|
+
the tagged public release. Colab has its own sign-in requirements and limits.
|
|
85
|
+
|
|
86
|
+
## What you get
|
|
87
|
+
|
|
88
|
+
Fourteen reported fields cover assets, total and domestic deposits, equity,
|
|
89
|
+
intangibles, net loans, estimated uninsured deposits, core deposits, CET1,
|
|
90
|
+
leverage, annualized ROA/ROE, domestic offices and employees.
|
|
91
|
+
|
|
92
|
+
- Monetary columns end in `_usd` and are **U.S. dollars**, normalized once from FDIC's USD-thousands values.
|
|
93
|
+
- Ratios end in `_pct`: **12.5 means 12.5%**. ROA and ROE are already annualized by the source.
|
|
94
|
+
- CET1 uses **RBCT1CER**. Leverage uses **RBC1AAJ**. They remain distinct.
|
|
95
|
+
- Missing observations stay `None`. Reported zero and negative observations remain unchanged.
|
|
96
|
+
- Missing quarters remain explicit rows with `report_available=False`; older reports are never substituted.
|
|
97
|
+
- FDIC CERT identifies an institution, not a listed holding company, ticker or individual branch.
|
|
98
|
+
|
|
99
|
+
This is a small, versioned release of selected FDIC fields. It does not cover all
|
|
100
|
+
bank data, customers' accounts, live transactions, full Call Reports, transaction
|
|
101
|
+
prices or verified sale listings. Names and institution metadata reflect the
|
|
102
|
+
upstream source at retrieval, not a reconstructed historical identity timeline.
|
|
103
|
+
|
|
104
|
+
## Command line
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
banksonsale-data sample --cert 58665 --output live-oak.csv
|
|
108
|
+
banksonsale-data search "Live Oak" --state NC
|
|
109
|
+
banksonsale-data financials --cert 58665 --quarters 8 --through 2026Q2 --output live-oak.json
|
|
110
|
+
banksonsale-data definitions
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Continue the research in BanksOnSale
|
|
114
|
+
|
|
115
|
+
[Open Live Oak's public financial summary](https://www.banksonsale.com/banks/58665)
|
|
116
|
+
or [explore the BanksOnSale research workspace](https://www.banksonsale.com/discover).
|
|
117
|
+
The hosted product adds saved screens, watchlists, research dossiers, monitoring,
|
|
118
|
+
models and exports; some features require a subscription. Its data edition is
|
|
119
|
+
displayed separately and can differ from this package's selected period.
|
|
120
|
+
|
|
121
|
+
These are optional links. The package keeps working without an account, sends
|
|
122
|
+
no usage telemetry, and does not create a subscription. See [continuing your
|
|
123
|
+
research](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/docs/CONTINUE_IN_BANKSONSALE.md).
|
|
124
|
+
|
|
125
|
+
## OpenBB
|
|
126
|
+
|
|
127
|
+
The optional [independently maintained OpenBB V5 extension](https://github.com/anshuman-pandey/banksonsale-data/tree/v0.1.0/integrations/openbb)
|
|
128
|
+
adds `obb.banksonsale`. It reuses this package and its definitions. It is not
|
|
129
|
+
bundled with or endorsed by OpenBB. The core package does not require OpenBB.
|
|
130
|
+
|
|
131
|
+
## Source, license and citation
|
|
132
|
+
|
|
133
|
+
Original source: [FDIC BankFind Suite](https://api.fdic.gov/banks/docs/).
|
|
134
|
+
BanksOnSale is an independent compiler; no FDIC affiliation or endorsement is implied.
|
|
135
|
+
|
|
136
|
+
Original code: [MIT](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/LICENSE). Sample compilation and original metadata:
|
|
137
|
+
[CC BY 4.0, with separate source attribution](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/DATA_LICENSE.md).
|
|
138
|
+
Use [CITATION.cff](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/CITATION.cff) and record the bank CERT, report dates and dataset ID.
|
|
139
|
+
SHA-256 checks detect changes to a snapshot; they are not a government signature
|
|
140
|
+
or proof that a filing is economically correct.
|
|
141
|
+
|
|
142
|
+
## Contributing and verification
|
|
143
|
+
|
|
144
|
+
See [CONTRIBUTING.md](https://github.com/anshuman-pandey/banksonsale-data/blob/v0.1.0/CONTRIBUTING.md). Offline checks:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
python -m pip install -e .
|
|
148
|
+
python -m unittest discover -s tests -v
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Network refreshes are explicit maintainer actions, not part of the default tests.
|
|
152
|
+
[Report a package issue](https://github.com/anshuman-pandey/banksonsale-data/issues)
|
|
153
|
+
or [a source-data correction](https://www.banksonsale.com/corrections).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Continue research in BanksOnSale
|
|
2
|
+
|
|
3
|
+
The open package works independently of a BanksOnSale subscription. You can keep
|
|
4
|
+
its samples, notebook results and source-linked exports without registering.
|
|
5
|
+
|
|
6
|
+
For a selected institution, open its public summary using its FDIC CERT:
|
|
7
|
+
|
|
8
|
+
```python
|
|
9
|
+
url = f"https://www.banksonsale.com/banks/{panel.document['bank']['cert']}"
|
|
10
|
+
print(url)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The public summary links to the bank's guarded research dossier. The hosted
|
|
14
|
+
workspace supports saved screens, watchlists, research dossiers, monitoring,
|
|
15
|
+
models and supported exports. Some features require Professional access. Current
|
|
16
|
+
plans and trial terms are at https://www.banksonsale.com/pricing.
|
|
17
|
+
|
|
18
|
+
The hosted workspace displays its own financial reporting date and release.
|
|
19
|
+
That edition can differ from this package's selected quarter. A bank identity
|
|
20
|
+
link is not a claim that the chosen period or every notebook filter will survive
|
|
21
|
+
an upgrade/checkout flow. Check the displayed coverage before continuing a
|
|
22
|
+
comparison; do not silently substitute a different bank or period.
|
|
23
|
+
|
|
24
|
+
Links in the package are optional and have no hidden telemetry. This library
|
|
25
|
+
never sends names, emails, saved research or usage events to BanksOnSale.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# BanksOnSale Data contract 1.0
|
|
2
|
+
|
|
3
|
+
`BankPanel` contains one explicitly selected FDIC institution and a contiguous
|
|
4
|
+
calendar-quarter window of 1–40 quarters. A report can be unavailable within the
|
|
5
|
+
window. Its row remains present with `report_available=false` and null metrics;
|
|
6
|
+
no prior or subsequent quarter is substituted.
|
|
7
|
+
|
|
8
|
+
## Identity and time
|
|
9
|
+
|
|
10
|
+
- `bank.cert`: FDIC CERT. This identifies an institution, not its listed parent, ticker or branch.
|
|
11
|
+
- `bank.rssd_id`: the source's RSSD ID, when reported.
|
|
12
|
+
- `bank.name`, city, state and activity metadata: institution attributes at retrieval. These are not a historical identity reconstruction. Consult `bank_class` when available; the API can cover different FDIC institution classes.
|
|
13
|
+
- `requested_dates` and `rows[].report_date`: exact financial reporting quarter ends.
|
|
14
|
+
- `sources[].retrieved_at`: UTC time this package fetched the response.
|
|
15
|
+
- `sources[].source_index_created_at`: FDIC index creation timestamp, not the report date.
|
|
16
|
+
- `report_date_defaulted`: true only when the caller omitted `through` and the client selected that bank's latest available report date.
|
|
17
|
+
|
|
18
|
+
## Numbers
|
|
19
|
+
|
|
20
|
+
Money is normalized from FDIC USD thousands to **USD** exactly once. Ratio
|
|
21
|
+
observations retain **percent** units: 12.5 is 12.5%, not 0.125%. ROA/ROE are
|
|
22
|
+
annualized by the source and never annualized again. The definition for each
|
|
23
|
+
column records its raw field, multiplier, reporting basis and documentation URL.
|
|
24
|
+
CET1 is RBCT1CER; leverage is RBC1AAJ. Equity/assets is a separate derived
|
|
25
|
+
accounting ratio and must not be relabeled as either regulatory ratio.
|
|
26
|
+
|
|
27
|
+
Blank/NA/absent observations become null. Reported zeros and negative values are
|
|
28
|
+
retained. Missing/inapplicable values are not inferred from nearby observations.
|
|
29
|
+
Malformed, boolean, infinite or nonnumeric financial values fail validation.
|
|
30
|
+
A reported zero's economic applicability is not inferred.
|
|
31
|
+
|
|
32
|
+
## Evidence and portability
|
|
33
|
+
|
|
34
|
+
Each panel carries the selected field definitions, coverage counts, exact FDIC
|
|
35
|
+
request URLs, retrieved raw JSON, source-response SHA-256 hashes, a content hash
|
|
36
|
+
and a branded dataset ID. Integrity checks detect byte/content changes; they are
|
|
37
|
+
not a digital signature from FDIC or independent verification of a filing.
|
|
38
|
+
|
|
39
|
+
`panel.export('file.json')` saves the self-contained envelope. Reload it with
|
|
40
|
+
`BankPanel.load('file.json')`. The website's all-institution quarter JSON is a
|
|
41
|
+
separate format; do not pass its raw array to `BankPanel.load()`.
|
|
42
|
+
|
|
43
|
+
CSV exports include a matching `.manifest.json` file carrying evidence, units,
|
|
44
|
+
coverage and a SHA-256 of the CSV bytes. Keep those files together. Parquet embeds
|
|
45
|
+
the manifest in schema metadata under `banksonsale`. pandas uses
|
|
46
|
+
`frame.attrs['banksonsale']`. Polars users should retain `panel.manifest()` or
|
|
47
|
+
export a self-contained artifact alongside the DataFrame.
|
|
48
|
+
|
|
49
|
+
## Scope
|
|
50
|
+
|
|
51
|
+
The current release exposes 14 selected FDIC financial fields. It does not
|
|
52
|
+
provide full Call Report/XBRL coverage, customer-level data, real-time balances,
|
|
53
|
+
complete ownership history, transaction valuations or verified sale intent.
|
|
54
|
+
Current upstream revisions are not information-as-known-at-the-time history.
|
|
55
|
+
This is research software, not an investment, regulatory or safety rating.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# BanksOnSale Data metric definitions
|
|
2
|
+
|
|
3
|
+
The package normalizes source monetary observations to USD. The website's raw FDIC downloads retain USD thousands; check the format before joining.
|
|
4
|
+
|
|
5
|
+
| Package column | FDIC field | Package unit | Multiplier | Basis |
|
|
6
|
+
| --- | --- | --- | --- | --- |
|
|
7
|
+
| `assets_usd` | `ASSET` | USD | 1000 | period_end |
|
|
8
|
+
| `deposits_usd` | `DEP` | USD | 1000 | period_end |
|
|
9
|
+
| `domestic_deposits_usd` | `DEPDOM` | USD | 1000 | period_end |
|
|
10
|
+
| `equity_usd` | `EQ` | USD | 1000 | period_end |
|
|
11
|
+
| `intangibles_usd` | `INTAN` | USD | 1000 | period_end |
|
|
12
|
+
| `net_loans_usd` | `LNLSNET` | USD | 1000 | period_end |
|
|
13
|
+
| `uninsured_deposits_usd` | `DEPUNINS` | USD | 1000 | period_end |
|
|
14
|
+
| `core_deposits_usd` | `COREDEP` | USD | 1000 | period_end |
|
|
15
|
+
| `cet1_ratio_pct` | `RBCT1CER` | percent | 1 | period_end |
|
|
16
|
+
| `leverage_ratio_pct` | `RBC1AAJ` | percent | 1 | period_end |
|
|
17
|
+
| `roa_pct` | `ROA` | percent | 1 | annualized_by_source |
|
|
18
|
+
| `roe_pct` | `ROE` | percent | 1 | annualized_by_source |
|
|
19
|
+
| `domestic_offices` | `OFFDOM` | count | 1 | period_end |
|
|
20
|
+
| `employees` | `NUMEMP` | count | 1 | period_end |
|
|
21
|
+
|
|
22
|
+
Original definitions: https://api.fdic.gov/banks/docs/risview_properties.yaml
|
|
23
|
+
|
|
24
|
+
Null observations are never converted to zero. Ratio values are already percentages. See [the data contract](DATA_CONTRACT.md) for time and identity rules.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Publishing BanksOnSale Data
|
|
2
|
+
|
|
3
|
+
The GitHub release is independently installable. A PyPI release is a separate
|
|
4
|
+
publication and must not be advertised as available before its project page and
|
|
5
|
+
clean index installation actually work.
|
|
6
|
+
|
|
7
|
+
## PyPI account setup
|
|
8
|
+
|
|
9
|
+
The repository has a manual `publish-pypi.yml` workflow using PyPI's trusted
|
|
10
|
+
publishing protocol; no API token belongs in source, issues, chat or workflows.
|
|
11
|
+
Before running it, the account owner must register the publisher on PyPI for both
|
|
12
|
+
`banksonsale-data` and `openbb-banksonsale`:
|
|
13
|
+
|
|
14
|
+
- Repository owner: `anshuman-pandey`
|
|
15
|
+
- Repository name: `banksonsale-data`
|
|
16
|
+
- Workflow filename: `publish-pypi.yml`
|
|
17
|
+
- Environment name: `pypi`
|
|
18
|
+
|
|
19
|
+
For an unpublished package, use PyPI's pending-publisher flow. Account creation,
|
|
20
|
+
2FA and new publishing trust require the account owner's action/authorization.
|
|
21
|
+
Reference: https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/
|
|
22
|
+
|
|
23
|
+
After registration, run the manual GitHub workflow against the tested tag. It
|
|
24
|
+
rebuilds and checks the core plus OpenBB distributions and publishes with short-
|
|
25
|
+
lived OIDC credentials. Verify both PyPI project pages and clean installations
|
|
26
|
+
before changing README/website instructions to registry shorthand.
|
|
27
|
+
|
|
28
|
+
## Release integrity
|
|
29
|
+
|
|
30
|
+
Build and run offline tests, notebook execution, installed-wheel checks and the
|
|
31
|
+
optional OpenBB integration before tagging. Pin source data and retain its
|
|
32
|
+
manifest; no silent replacement of sample bytes under an existing release tag.
|
|
33
|
+
Upload checksummed artifacts to the GitHub release. Never bundle private website
|
|
34
|
+
source, user records, prospect lists, API keys or account exports.
|