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.67.tar.gz (327.4 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.67-py3-none-any.whl (424.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fin_infra-0.1.67.tar.gz
  • Upload date:
  • Size: 327.4 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.67.tar.gz
Algorithm Hash digest
SHA256 2e700bf33685b478fef07eb4a576afb39e35e746e8a89b5cff793768a575bc12
MD5 a6bc564e7de8a236843102d2e027f7fa
BLAKE2b-256 84a13ca20526a2bf4f5acf1eac6c8042fb4051db6b96b3c0e63adc0af264d1c4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: fin_infra-0.1.67-py3-none-any.whl
  • Upload date:
  • Size: 424.4 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.67-py3-none-any.whl
Algorithm Hash digest
SHA256 ba2fd6ae219921823ddc09e04239b15cc35f44edefe516b229190b931cacd4f3
MD5 b54a248354c751b35b254425d29fc6f6
BLAKE2b-256 c84006a72152659a551b4bb3ce5953ffba6603eeafa3bef276b09b612e6a2d40

See more details on using hashes here.

Provenance

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