Skip to main content

Financial infrastructure toolkit: banking connections, market data, credit, cashflows, and brokerage integrations

Project description

fin-infra

Financial data infrastructure for fintech apps

PyPI Python 3.11+ License: MIT Downloads

Banking, investments, market data, credit scores, and financial calculations in one toolkit.

Documentation · Examples · PyPI


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.


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

fin_infra-0.1.86.tar.gz (329.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fin_infra-0.1.86-py3-none-any.whl (425.7 kB view details)

Uploaded Python 3

File details

Details for the file fin_infra-0.1.86.tar.gz.

File metadata

  • Download URL: fin_infra-0.1.86.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

Hashes for fin_infra-0.1.86.tar.gz
Algorithm Hash digest
SHA256 451793adf1187359f540780ba145cdef68045f12a5c0d647fd5cc8637af03e33
MD5 c3fd24a9addb31050493fc439af072fd
BLAKE2b-256 4468ff15d597f834ecd0ae614422d9bc667d95e868c159769fd61094352ebee0

See more details on using hashes here.

Provenance

The following attestation bundles were made for fin_infra-0.1.86.tar.gz:

Publisher: publish-pypi.yml on nfraxlab/fin-infra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fin_infra-0.1.86-py3-none-any.whl.

File metadata

  • Download URL: fin_infra-0.1.86-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

Hashes for fin_infra-0.1.86-py3-none-any.whl
Algorithm Hash digest
SHA256 884ea0ad4ce86a93cb92fc963846ed9191967957956015d49d03459b8cbb9a58
MD5 db12d9deea82cab704eaea135b250dc3
BLAKE2b-256 2fb6e9c1199dac3ef2bf93fa1ab72f14c0f2631e60f70af5c097f0233b5c96bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for fin_infra-0.1.86-py3-none-any.whl:

Publisher: publish-pypi.yml on nfraxlab/fin-infra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page