Enterprise-grade multi-cloud cost optimization platform
Project description
FinOps AI
Enterprise-Grade Multi-Cloud Cost Optimization Platform
Features • Quickstart • Providers • AI Engine • Configuration • Contributing
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
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Install dev dependencies:
pip install -e ".[dev]" - Make changes and add tests
- Run linting:
ruff check src/ - Run tests:
pytest tests/ -v - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbc7ef4897ad10f6c03b312aee955aeb04c3029a55bcd6fd92638b56df7d57f9
|
|
| MD5 |
306c9778fcf6777f6e8e3c830af648b5
|
|
| BLAKE2b-256 |
8b92dc58714410867abe09de95e8b739f79148e05452f79824550c20e50c37ea
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f709d0e898503395b9f5d3e0ce776087125ad74dca7add2f969844d0d09eb615
|
|
| MD5 |
c557cc8e1319c1775bc195e32af6780b
|
|
| BLAKE2b-256 |
5e4306e5aab139cf0cd91f287b9369c9eb8cf26015e2bf2875c765794d77ff96
|