Skip to main content

FinOps AI

Enterprise-Grade Multi-Cloud Cost Optimization Platform

Features • Quickstart • Providers • AI Engine • Configuration • Contributing


Python Multi-Cloud

Stop paying for cloud resources nobody uses. FinOps AI scans your multi-cloud infrastructure, detects orphaned resources, estimates waste, and provides AI-powered recommendations , saving enterprises an average of 30% on cloud spend. check out: https://pypi.org/project/finops-ai/0.1.2/

Features

Feature Description
Multi-Cloud Scanning Azure, AWS, and GCP — one unified interface
14+ Resource Types Snapshots, disks, VMs, IPs, NICs, LBs, RDS, App Services, and more
AI/ML Engine Isolation Forest anomaly detection + Prophet cost forecasting
Smart Recommendations Prioritized, actionable savings with effort/risk ratings
Policy Engine YAML-driven governance with approval workflows
Dependency Graph NetworkX-powered safe-deletion analysis
Rich Reports HTML (dark theme), JSON, CSV, and Slack notifications
Beautiful CLI Click + Rich with color-coded output and progress bars

Quickstart

Install

# Core package
pip install finops-ai

# With cloud providers
pip install finops-ai[azure]     # Azure only
pip install finops-ai[aws]       # AWS only
pip install finops-ai[gcp]       # GCP only
pip install finops-ai[all]       # All providers + ML

# Development
pip install finops-ai[dev]

First Scan

# Generate a config file
finops-ai init

# Scan Azure (uses CLI auth by default)
finops-ai scan --provider azure

# Scan all providers
finops-ai scan --provider all

# Scan with JSON report
finops-ai scan --provider azure --output json --report my_report.json

# Check version and installed providers
finops-ai version

Python API

from finops_ai.core.auth_manager import AuthManager
from finops_ai.providers.azure.snapshot_manager import AzureSnapshotManager

# Authenticate
credential = AuthManager.get_azure_credential()

# Scan for orphaned snapshots
manager = AzureSnapshotManager(credential)
result = manager.scan()

print(f"Found {result.total_resources} orphaned snapshots")
print(f"Estimated savings: ${result.total_estimated_cost:.2f}/month")

for resource in result.resources:
    print(f"  {resource.name}: ${resource.estimated_monthly_cost:.2f}/mo ({resource.age_days} days old)")

Providers

Azure (7 Resource Types)

  • Snapshots — Orphaned managed snapshots (source disk deleted)
  • Disks — Unattached managed disks (with SKU-aware pricing)
  • Network — Unused public IPs, detached NICs, idle load balancers
  • VMs — Zombie VMs (stopped/deallocated > N days)
  • Storage — Idle blob containers (>90 days no modification)
  • App Service Plans — Plans with zero web apps
  • Resource Groups — Empty resource groups

AWS (4 Resource Types)

  • EC2 — Stopped instances (zombie VMs) + unused security groups
  • EBS — Unattached volumes + orphaned snapshots (source volume deleted)
  • Network — Unassociated Elastic IPs + idle ALBs/NLBs
  • RDS — Orphaned manual snapshots (source DB deleted)

GCP (3 Resource Types)

  • Compute — Orphaned snapshots + unattached disks + stopped VMs
  • Network — Reserved (unused) static IPs (regional + global)
  • Storage — Empty Cloud Storage buckets

AI Engine

from finops_ai.ml.anomaly_detector import AnomalyDetector
from finops_ai.ml.cost_forecaster import CostForecaster
from finops_ai.ml.recommender import SmartRecommender

# Anomaly detection (Isolation Forest)
detector = AnomalyDetector(contamination=0.1)
anomalies = detector.detect(resources)

# Cost forecasting (Linear/Prophet)
forecaster = CostForecaster()
forecast = forecaster.forecast_from_snapshots(historical_data, forecast_days=30)

# Smart recommendations
recommender = SmartRecommender()
report = recommender.analyze(resources)
print(f"Total savings: ${report.total_annual_savings:,.2f}/year")

Configuration

Generate a config file with finops-ai init, then customize:

dry_run: true
log_level: INFO

providers:
  azure:
    enabled: true
    auth:
      method: cli  # cli | managed_identity | service_principal
    subscription_id: ""

  aws:
    enabled: true
    auth:
      method: profile
    regions: [us-east-1, us-west-2]

  gcp:
    enabled: true
    auth:
      method: adc
    project_id: my-project

policies:
  policies_dir: ./policies
  enforce: false

ml:
  enabled: true
  anomaly_detection: true
  cost_forecasting: true

Architecture

src/finops_ai/
├── __init__.py              # Package root
├── cli.py                   # Click + Rich CLI
├── config.py                # Pydantic Settings configuration
├── core/
│   ├── auth_manager.py      # Multi-cloud authentication
│   ├── base_manager.py      # Abstract base + data models
│   ├── graph_analyzer.py    # Dependency graph (NetworkX)
│   └── policy_engine.py     # YAML governance policies
├── providers/
│   ├── azure/               # 7 Azure resource managers
│   ├── aws/                 # 4 AWS resource managers
│   └── gcp/                 # 3 GCP resource managers
├── ml/
│   ├── anomaly_detector.py  # Isolation Forest
│   ├── cost_forecaster.py   # Prophet / linear regression
│   └── recommender.py       # Smart recommendations
├── reporters/
│   ├── json_reporter.py     # JSON export
│   ├── csv_reporter.py      # CSV export
│   ├── html_reporter.py     # Standalone dark-theme HTML
│   └── slack_reporter.py    # Slack webhook (Block Kit)
└── utils/
    ├── logger.py             # Rich logging + JSON audit
    └── cost_calculator.py    # Cross-cloud pricing

Testing

# Run tests
pytest tests/ -v

# With coverage
pytest tests/ --cov=finops_ai --cov-report=html

Migrating from TerraSnap-Govern

The original TerraSnap-Govern code has been preserved in legacy/. To migrate:

# Old way
python scripts/azure_snapshot_cleanup.py --subscription-id $SUB_ID

# New way
finops-ai scan --provider azure --resource-type snapshot -s $SUB_ID

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Install dev dependencies: pip install -e ".[dev]"
  4. Make changes and add tests
  5. Run linting: ruff check src/
  6. Run tests: pytest tests/ -v
  7. Submit a pull request

License

ApacheLicense — see LICENSE for details.


Built By Samvardhan Singh for FinOps practitioners everywhere

Metadata

Release files for finops-ai 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for finops-ai 0.1.4
File Size Uploaded
finops_ai-0.1.4.tar.gz 100.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for finops-ai 0.1.4
File Interpreter ABI Platform
finops_ai-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 184.4 kB

Release files / finops_ai-0.1.4.tar.gz

Download URL finops_ai-0.1.4.tar.gz
Size 100.2 kB
Tags Source
SHA-256 checksum
How to use checksums
fbc7ef4897ad10f6c03b312aee955aeb04c3029a55bcd6fd92638b56df7d57f9
BLAKE2b-256 checksum
How to use checksums
8b92dc58714410867abe09de95e8b739f79148e05452f79824550c20e50c37ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release files / finops_ai-0.1.4-py3-none-any.whl

Download URL finops_ai-0.1.4-py3-none-any.whl
Size 84.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f709d0e898503395b9f5d3e0ce776087125ad74dca7add2f969844d0d09eb615
BLAKE2b-256 checksum
How to use checksums
5e4306e5aab139cf0cd91f287b9369c9eb8cf26015e2bf2875c765794d77ff96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page