
CloudExpat brings cost optimization into pull requests — so engineers fix waste before it ships. The GitHub Action now posts a health-scored report with savings insights, budget tracking, and carbon data directly into your PRs.

Engineers don’t ignore cost data because they don’t care. They ignore it because it shows up in the wrong place, at the wrong time, with no clear action to take.
We rebuilt the CloudExpat GitHub Action around a simple idea: cost decisions happen during code review, not after deployment. Instead of a generic weekly cost dump, it now posts a health-scored report with specific savings opportunities — directly into your pull requests.

One bold headline: health grade, weekly spend, and how much you could save. Everything else collapses by default — expand what you need, skip what you don’t.
Most cost-in-CI tools show you a diff: “this PR will cost $X more.” That’s useful for infrastructure changes, but it misses the bigger picture. Your staging environment running 24/7 doesn’t show up in a Terraform diff. Neither does the unattached EBS volume from three sprints ago.
CloudExpat takes a different approach. Instead of estimating what a PR will cost, it shows what your infrastructure is costing — and what you can do about it right now.
| Cost diff tools | CloudExpat |
|---|---|
| Estimate future cost of IaC changes | Surface existing waste and optimization opportunities |
| Require Terraform/OpenTofu integration | Work with any repo — no IaC dependency |
| Show cost impact of the current PR | Show cost health across all connected accounts |
| Informational | Actionable — ranked insights with savings estimates |
Both approaches have value. But if your goal is to actually reduce cloud spend, knowing that “you have an oversized m5.2xlarge running at 12% CPU” is more actionable than “this PR adds $0.03/hour.”
Every report opens with a letter grade. The score is computed from:
An engineering team at A doesn’t need a FinOps review. A team at D does. One signal, no ambiguity.
The report surfaces the top 3 optimization opportunities by estimated monthly savings:
| # | Issue | Resource | Savings | Priority |
|---|---|---|---|---|
| 1 | Oversized Instances | i-0abc123 (m5.2xlarge) | $420/mo | High |
| 2 | Dev/Test Always-On | i-0def456 (staging-api) | $310/mo | Medium |
| 3 | Unattached EBS Volume | vol-0789abc | $160/mo | Medium |
These aren’t theoretical. They’re generated by CloudExpat’s insight engine, which analyzes actual resource usage across all connected accounts.
The engine evaluates resources against specific thresholds:
Each insight is classified by priority (high/medium/low) based on savings magnitude and confidence level.
Compute Waste
Storage Waste
Networking Waste
Database Optimization
Commitment Optimization
Each insight links to the CloudExpat dashboard for the full list and implementation details.
If you’ve configured budgets in CloudExpat, the report includes:
A team at 68% of budget on day 18 is on track. A team at 85% on day 12 is not — and now everyone on the PR knows it before the month-end surprise.
GitHub renders <details> tags natively. The report uses them for every section:
A PR might have 5 reviewers — the lead cares about budget, the platform engineer cares about the oversized instance, and the rest just want to see the grade and move on. Collapsible sections let each person engage at their level.
.cloudexpat.ymlScope reports to a specific service by adding a config file to your repo root:
service: payments-api
tags:
service: payments
environment: production
The action reads this automatically and passes the filters to the API. Different repos get reports scoped to the resources they own — not a global cost dump.
You can also pass service and tags as action inputs directly:
- uses: CloudExpat/cost-report@v1
with:
api-key: ${{ secrets.CLOUDEXPAT_API_KEY }}
service: payments-api
tags: 'environment:production,team:platform'
Most teams find their first savings opportunity within the first couple of pull requests. Setup takes under 5 minutes.
1. Get an API key from Settings > API Keys
2. Add it as a GitHub secret (CLOUDEXPAT_API_KEY) in your repo settings
3. Create the workflow at .github/workflows/cloudexpat.yml:
name: CloudExpat Cost Report
on:
pull_request:
workflow_dispatch:
permissions:
pull-requests: write
jobs:
cost-report:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: CloudExpat/cost-report@v1
with:
api-key: ${{ secrets.CLOUDEXPAT_API_KEY }}
Every PR now gets a cost report with savings insights. The action tries the enhanced endpoint first and falls back to the basic report automatically — existing workflows won’t break.
FinOps programs fail when cost visibility is separated from engineering workflows. Dashboards are useful for monthly reviews. But the day-to-day decisions — which instance type, whether to leave staging running, whether that EBS volume is still needed — happen in code, reviewed in PRs.
The pattern is simple: shift cost decisions left. Security moved into CI/CD years ago. Reliability followed. Cost is next.
Putting savings insights where engineers already look is the shortest path from “we should optimize” to “we did optimize.”
The CloudExpat Cost Report action is available now on GitHub Marketplace.
Related Reading: