Financial infrastructure toolkit: banking connections, market data, credit, cashflows, and brokerage integrations
Project description
fin-infra
Financial data infrastructure for fintech apps
Banking, investments, market data, credit scores, and financial calculations in one toolkit.
Why fin-infra?
Building a fintech app means integrating Plaid, pulling market data, calculating portfolio returns, categorizing transactions... and doing it all securely.
fin-infra gives you production-ready financial infrastructure:
from fin_infra.banking import easy_banking
from fin_infra.markets import easy_market
# Connect to banks via Plaid
banking = easy_banking()
accounts = await banking.get_accounts(access_token)
transactions = await banking.get_transactions(account_id)
# Get market data
market = easy_market()
quote = market.quote("AAPL")
Quick Install
pip install fin-infra
What's Included
| Feature | What You Get | One-liner |
|---|---|---|
| Banking | Plaid/Teller integration, accounts, transactions | easy_banking() |
| Investments | Holdings, portfolio data, real P/L with cost basis | easy_investments() |
| Market Data | Stocks, crypto, forex quotes and history | easy_market() |
| Credit | Credit scores and monitoring | easy_credit() |
| Analytics | Cash flow, savings rate, spending insights | Built-in |
| Budgets | Multi-type budget tracking with templates | Scaffold included |
| Goals | Financial goal tracking with milestones | Scaffold included |
| Cashflows | NPV, IRR, loan amortization calculations | npv(), irr() |
30-Second Examples
Connect Bank Accounts
from fin_infra.banking import easy_banking
banking = easy_banking(provider="plaid")
# Get linked accounts
accounts = await banking.get_accounts(access_token)
for acc in accounts:
print(f"{acc.name}: ${acc.balance}")
# Get transactions
transactions = await banking.get_transactions(account_id)
Portfolio Holdings with Real P/L
from fin_infra.investments import easy_investments
investments = easy_investments(provider="plaid")
# Get holdings with cost basis
holdings = await investments.get_holdings(access_token)
for h in holdings:
print(f"{h.symbol}: {h.quantity} shares, P/L: ${h.unrealized_gain}")
# Asset allocation
allocation = await investments.get_allocation(access_token)
print(allocation) # {"stocks": 60, "bonds": 30, "cash": 10}
Real-Time Market Data
from fin_infra.markets import easy_market, easy_crypto
# Stock quotes
market = easy_market()
quote = market.quote("AAPL")
print(f"AAPL: ${quote.price} ({quote.change_percent}%)")
# Crypto
crypto = easy_crypto()
btc = crypto.ticker("BTC/USDT")
print(f"BTC: ${btc.price}")
Credit Scores
from fin_infra.credit import easy_credit
credit = easy_credit()
score = await credit.get_credit_score(user_id)
print(f"Credit Score: {score.value} ({score.rating})")
Financial Calculations
from fin_infra.cashflows import npv, irr, loan_payment
# Net Present Value
cashflows = [-100000, 30000, 30000, 30000, 30000]
value = npv(rate=0.08, cashflows=cashflows)
print(f"NPV: ${value:,.2f}")
# Internal Rate of Return
rate = irr(cashflows)
print(f"IRR: {rate:.2%}")
# Loan payments
monthly = loan_payment(principal=250000, rate=0.065, years=30)
print(f"Monthly payment: ${monthly:,.2f}")
FastAPI Integration
Use with svc-infra for a complete backend:
from fastapi import FastAPI
from svc_infra.api.fastapi.ease import easy_service_app
from fin_infra.banking import add_banking
from fin_infra.investments import add_investments
from fin_infra.markets import add_market_data
# Create app with svc-infra (auth, database, etc.)
app = easy_service_app(name="FinanceAPI", release="1.0.0")
# Add financial capabilities
add_banking(app, provider="plaid")
add_investments(app, provider="plaid")
add_market_data(app, provider="alphavantage")
# Automatic endpoints:
# GET /banking/accounts
# GET /banking/transactions
# GET /investments/holdings
# GET /investments/allocation
# GET /market/quote/{symbol}
Supported Providers
| Category | Providers |
|---|---|
| Banking | Plaid, Teller |
| Investments | Plaid |
| Market Data | Alpha Vantage, Yahoo Finance |
| Crypto | CoinGecko, Binance |
| Credit | Experian |
Scaffold Models
Generate production-ready models for your app:
# Generate budget models
fin-infra scaffold budgets --dest-dir app/models/ --include-tenant
# Generate goal tracking
fin-infra scaffold goals --dest-dir app/models/
# Generate net worth snapshots
fin-infra scaffold net-worth --dest-dir app/models/
What you get:
- SQLAlchemy models with proper indexes
- Pydantic schemas (Create, Read, Update)
- Repository pattern with async CRUD
- Type hints throughout
Wire CRUD in one call:
from svc_infra.api.fastapi.db.sql import add_sql_resources, SqlResource
from app.models.budgets import Budget
add_sql_resources(app, [
SqlResource(
model=Budget,
prefix="/budgets",
search_fields=["name", "description"],
)
])
# Creates: POST, GET, PATCH, DELETE /budgets/*
Configuration
# Banking (Plaid)
PLAID_CLIENT_ID=your_client_id
PLAID_SECRET=your_secret
PLAID_ENV=sandbox # or development, production
# Market Data
ALPHAVANTAGE_API_KEY=your_api_key
# Credit (Experian)
EXPERIAN_CLIENT_ID=your_client_id
EXPERIAN_CLIENT_SECRET=your_secret
Documentation
| Module | Description |
|---|---|
| Data Integration | |
| Banking | Account aggregation, transactions |
| Investments | Holdings, portfolio, P/L |
| Market Data | Stocks, crypto, forex |
| Credit | Credit scores and reports |
| Analytics | |
| Analytics | Cash flow, savings rate, insights |
| Net Worth | Net worth tracking |
| Cashflows | NPV, IRR, loan calculations |
| Features | |
| Budgets | Budget management |
| Goals | Financial goal tracking |
| Insights | AI-powered insights |
| Categorization | Transaction categorization |
| Infrastructure | |
| Persistence | Scaffold workflow |
| API Guide | Building fintech APIs |
| Compliance | GLBA, FCRA, PCI-DSS |
Architecture
fin-infra is the financial data layer. Use with svc-infra for backend infrastructure:
Your App
|
+-- fin-infra (financial data)
| Banking, investments, market data, credit
|
+-- svc-infra (backend infrastructure)
Auth, database, API framework, jobs, billing
This separation keeps financial logic clean and portable.
Running Examples
git clone https://github.com/nfraxlab/fin-infra.git
cd fin-infra
poetry install
# Market data (no auth needed)
poetry run python -c "
from fin_infra.markets import easy_market
market = easy_market()
print(market.quote('AAPL'))
"
# Run all tests
poetry run pytest -q
Related Packages
fin-infra is part of the nfrax infrastructure suite:
| Package | Purpose |
|---|---|
| fin-infra | Financial infrastructure (banking, portfolio, insights) |
| svc-infra | Backend infrastructure (auth, billing, jobs, webhooks) |
| ai-infra | AI/LLM infrastructure (agents, tools, RAG, MCP) |
License
MIT License - use it for anything.
Built by nfraxlab
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fin_infra-0.1.85.tar.gz.
File metadata
- Download URL: fin_infra-0.1.85.tar.gz
- Upload date:
- Size: 329.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95ae9ea4ff3d649d3fdb317ba1c0f1cbe5ad061eac7968ade2b3cb27fe5a6ab5
|
|
| MD5 |
dacf7b5f1d9d9d883d2f1bd0b8d83e58
|
|
| BLAKE2b-256 |
b2e5a0fc84f2cdefbd8fd90eab5e7535e0b1cc0153b37bab82c8f0099f7a96db
|
Provenance
The following attestation bundles were made for fin_infra-0.1.85.tar.gz:
Publisher:
publish-pypi.yml on nfraxlab/fin-infra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fin_infra-0.1.85.tar.gz -
Subject digest:
95ae9ea4ff3d649d3fdb317ba1c0f1cbe5ad061eac7968ade2b3cb27fe5a6ab5 - Sigstore transparency entry: 771681499
- Sigstore integration time:
-
Permalink:
nfraxlab/fin-infra@13fa26ca654f1c9df34ac7b487681143e215093c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nfraxlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@13fa26ca654f1c9df34ac7b487681143e215093c -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file fin_infra-0.1.85-py3-none-any.whl.
File metadata
- Download URL: fin_infra-0.1.85-py3-none-any.whl
- Upload date:
- Size: 425.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d3175efeac9824f46ef5d2147a243d991b54974242a234a5faf077d79936cb3
|
|
| MD5 |
54efe5fff60edb738783b77d6b2f6c69
|
|
| BLAKE2b-256 |
9dcd4d3dbd78b7e26d3ecd64262b920cc772f487d7d9d60d38a7a8b4dc36a08d
|
Provenance
The following attestation bundles were made for fin_infra-0.1.85-py3-none-any.whl:
Publisher:
publish-pypi.yml on nfraxlab/fin-infra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fin_infra-0.1.85-py3-none-any.whl -
Subject digest:
3d3175efeac9824f46ef5d2147a243d991b54974242a234a5faf077d79936cb3 - Sigstore transparency entry: 771681500
- Sigstore integration time:
-
Permalink:
nfraxlab/fin-infra@13fa26ca654f1c9df34ac7b487681143e215093c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nfraxlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@13fa26ca654f1c9df34ac7b487681143e215093c -
Trigger Event:
workflow_run
-
Statement type: