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.71.tar.gz (327.2 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.71-py3-none-any.whl (424.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fin_infra-0.1.71.tar.gz
  • Upload date:
  • Size: 327.2 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.71.tar.gz
Algorithm Hash digest
SHA256 740f41ee904176f6b795f337581fd9f9bf21bfc22e4009242b5ce6c63f315213
MD5 5fc09d035970cd831f00a95dfae8dfa5
BLAKE2b-256 5e30a0a3c8c6eb12e21a8ef2f0c744b36e436920e9d77da394d1ad24527a5f32

See more details on using hashes here.

Provenance

The following attestation bundles were made for fin_infra-0.1.71.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.71-py3-none-any.whl.

File metadata

  • Download URL: fin_infra-0.1.71-py3-none-any.whl
  • Upload date:
  • Size: 424.3 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.71-py3-none-any.whl
Algorithm Hash digest
SHA256 d485565da63b74ec64ee8fdb007eb87bd106e878e8c42bf3fa595f5d2efc0a9d
MD5 27d2bb2021d94f5579ea76d94f09573b
BLAKE2b-256 a6c07e362f5f69995f752229733426eec81e597baf3167b345b3c650de3fbc99

See more details on using hashes here.

Provenance

The following attestation bundles were made for fin_infra-0.1.71-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