Elastic IP not associated
Low riskManaged in Terraform, so the fix is a pull request that removes the resource block.
Spendsaw for AWS finds the idle resources in your accounts, prices each one from your own bill, and makes the cut the way your team already ships: an approval in Slack or a Terraform pull request. Then it checks the next bill to see what was saved.
Pre-launch. The code is built and tested against mocked AWS, and live validation in our own organization comes next. The trust page says what is proven and what is not.
Remove unused Elastic IP aws_eip.nat_spare
terraform plan, run by your CI0 to add, 0 to change, 1 to destroyaws_eip.nat_spare changes$3.65/mo us-east-2A dashboard shows you the idle NAT gateway and leaves the ticket to you. Spendsaw is for dev agencies and small MSPs that run AWS without a FinOps person, so it carries each cut through to a merged change and a line on the bill.
A read-only role scans more than 25 resource types across every enabled region and account. Each result is a typed finding: the resource, what it costs, the evidence, and who owns it.
Cost Optimization Hub and Compute Optimizer recommendations are merged in and de-duplicated, so you see a superset of what AWS already tells you.
Managed in Terraform, so the fix is a pull request that removes the resource block.
Every amount says where it came from. When your Cost and Usage Report is connected, the billed cost of that specific resource replaces the list price, discounts included.
Estimates read "about $47/mo". "Verified savings" is kept for amounts confirmed against the bill.
| Cost source | What the number is |
|---|---|
cur | Billed cost of the resource from your Cost and Usage Report |
list_price | Price List API rate for the resource's own region |
aws_recommendation | Estimate supplied by an AWS recommendation service |
fallback_list_price | Built-in rate table, used when the Price List API cannot be reached |
Ownership decides the route. A Terraform-managed resource gets a pull request, because a CLI delete would come back on the next apply. A click-ops resource gets a reviewed command that a named person approves. If ownership is unknown, it stays a recommendation.
The Slack message shows the exact commands that approving will run. Nothing else runs.
3 new cuts in prod-agency, worth about $47/mo.
aws ec2 create-snapshot --volume-id vol-0a1b2c3d4e5f --region us-east-1
aws ec2 delete-volume --volume-id vol-0a1b2c3d4e5f --region us-east-1
Verified savings since August: $1,318 · 2 more in the console
Each cut records what the resource cost before. A monthly job compares that with the Cost and Usage Report, counting only full months after the change, so a partial month never inflates the number.
That verified figure is what the digest and the monthly report lead with.
| Resource | Cut made | Expected | On the bill |
|---|---|---|---|
eipalloc-0f3e91a2c4 | PR merged, Sep 3 | $3.65/mo | $3.65 verified |
vol-0a1b2c3d4e5f | Approved in Slack, Oct 12 | $10.00/mo | Waiting for a full month |
The risk in this product is a deleted resource somebody needed. These are the rules the code enforces to prevent that.
One reviewed template per waste type, rendered from validated identifiers only. The model explains findings in plain English; code decides their order. Anything command-like in its output is removed before you see it.
A resource tagged Keep=true, or listed in your allow-list, is left out of findings and remediation. The tag is read again from live AWS immediately before an approved action runs, and the write role denies actions on keep-tagged resources in IAM.
Deleting an unattached volume takes a snapshot and waits for it to complete before the delete. A medium-risk action with no possible backup needs an explicit acknowledgement that it cannot be undone.
Low risk and Medium risk actions run after approval. High risk findings (RDS, NAT gateways, load balancers, stopped instances) are recommendations only. The command is shown for reference and there is no button.
The approval records who approved, when, and the command text. At run time the plan is rendered again and must match what was approved. An approval expires after 72 hours.
Scanning uses a role that can read metadata and metrics only. Changes use a second role that you deploy only in the accounts where you want remediation, and never in the management account.
The bill shows Bedrock by model, not by the service that called it. Spendsaw reads tokens per model from CloudWatch and billed cost from Cost Explorer, then works out which Lambda functions and ECS services hold Bedrock permissions.
The report shows tokens and cost by model and by caller, and labels every number as billed, estimated or allocated. AWS does not record which function made a call, so a caller's share is allocated from its own activity, and the report says so.
| Model | Input tokens | Output tokens | Cost | Basis |
|---|---|---|---|---|
anthropic.claude-3-5-haiku | 12.6M | 3.1M | $22.48 | Billed |
amazon.nova-lite-v1:0 | 41.2M | 6.8M | $4.10 | Billed |
| Caller | Type | Cost | Basis |
|---|---|---|---|
ticket-summarizer | Lambda | $16.21 | Allocated |
intake-api | ECS service | $10.37 | Allocated |
spendsaw-mcp is a local, read-only MCP server for Claude Desktop, Claude Code and Cursor. It scans with your own AWS profile, prices what it finds, and answers inside the assistant you already use.
There is no hosted backend, no account to create, and the server makes no model call of its own. It never changes anything in AWS: it prints the commands for you to review and run.
# add the server to Claude Code
claude mcp add spendsaw \
--env AWS_PROFILE=default \
--env AWS_REGIONS=us-east-1 \
-- uvx spendsaw-mcp
# then ask
What are my top 5 savings?
| Tool | Returns |
|---|---|
list_findings | Findings, largest monthly saving first |
explain_finding | Evidence, cost and its source, risk tier, and the commands to fix it |
get_costs | Billed cost by service, account, region or usage type |
bedrock_usage | Bedrock tokens by model, billed cost, and which services can call it |
Draft early-access pricing. These numbers come from our build plan and may change before launch. Billing is not live yet, and design partners use Spendsaw free during the pilot.
$0
For solo developers.
spendsaw-mcp$49 per month, draft
For agencies with 5–20 developers.
$15 per managed account per month, draft
For IT consultants and small MSPs.
We are onboarding 3 to 5 design partners before any public launch: dev agencies and small MSPs running AWS without a FinOps person.