Skip to main content

Enterprise-grade multi-cloud cost optimization platform

Project description

FinOps AI

Enterprise-Grade Multi-Cloud Cost Optimization Platform

FeaturesQuickstartProvidersAI EngineConfigurationContributing


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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finops_ai-0.1.4.tar.gz (100.2 kB view details)

Uploaded Source

Built Distribution

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

finops_ai-0.1.4-py3-none-any.whl (84.1 kB view details)

Uploaded Python 3

File details

Details for the file finops_ai-0.1.4.tar.gz.

File metadata

  • Download URL: finops_ai-0.1.4.tar.gz
  • Upload date:
  • Size: 100.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for finops_ai-0.1.4.tar.gz
Algorithm Hash digest
SHA256 fbc7ef4897ad10f6c03b312aee955aeb04c3029a55bcd6fd92638b56df7d57f9
MD5 306c9778fcf6777f6e8e3c830af648b5
BLAKE2b-256 8b92dc58714410867abe09de95e8b739f79148e05452f79824550c20e50c37ea

See more details on using hashes here.

File details

Details for the file finops_ai-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: finops_ai-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 84.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for finops_ai-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f709d0e898503395b9f5d3e0ce776087125ad74dca7add2f969844d0d09eb615
MD5 c557cc8e1319c1775bc195e32af6780b
BLAKE2b-256 5e4306e5aab139cf0cd91f287b9369c9eb8cf26015e2bf2875c765794d77ff96

See more details on using hashes here.

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