Free & open source
CostGoblin mascot

Know every dollar
in your cloud

CostGoblin syncs your AWS billing data locally and queries it with DuckDB. No servers. No SaaS fees. Your data never leaves your machine.

Download for macOS View on GitHub
macOS Apple SiliconAll platforms
CostGoblin dashboard filtered by environment with AWS Service filter open, showing cost breakdown with stacked bar chart and pie charts
💻

Zero servers

No infrastructure to provision or maintain. CostGoblin runs entirely on your laptop as a native desktop app.

🔒

Your data stays local

Billing data is downloaded to your machine as Parquet files. Nothing is sent to any third party. Ever.

DuckDB-powered

Analytical queries over months of billing data complete in milliseconds. Filter, drill down, and slice by any dimension.

Works offline

Once synced, your data lives on your machine. Analyze cloud costs from a plane at 10,000 meters — no Wi-Fi required.

Drill into every line item

Filter, sort, and explore the raw CUR dataset. See daily totals at a glance, slice by any dimension, and click any cell to drill deeper. Thousands of line items queried in milliseconds.

CostGoblin explorer view showing filterable data table with daily cost bar chart

Map tags to cost dimensions

Normalize messy tags with aliases and casing rules applied at query time. Create custom allocation dimensions from any tag key. Changes take effect instantly — no re-processing.

CostGoblin dimensions configuration showing built-in and custom tag dimensions with drag-to-reorder

Build your own dashboards

Compose custom views from a library of widgets — summary cards, stacked bars, pie charts, tables. Drag to reorder, resize, and group. Export and share as YAML.

CostGoblin view builder showing configurable dashboard with summary, chart, and table widgets

Find untagged spend instantly

See which resources are missing allocation tags, grouped by actionable vs. untaggable. Filter by dimension, minimum cost, or fallback owner. Copy findings to Slack or Jira in one click.

CostGoblin missing tags view showing untagged resources grouped by actionability with cost and category data

Spot what's moving, fast

Period-over-period bubble chart shows cost increases and savings at a glance. Bubble size maps to current spend. Filter by minimum dollar or percent change, drill into any entity.

CostGoblin trends view with bubble chart showing period-over-period cost increases and savings by service

Actionable savings, ranked

AWS optimization recommendations sorted by monthly savings. See effort level, expand for full resource details, and filter by action type — rightsizing, reserved instances, deletions.

CostGoblin cost optimization view showing AWS savings recommendations with effort badges and expandable details

Talk to your costs with AI

Connect any AI assistant via the Model Context Protocol. 10 tools let agents query costs, explore trends, and drill into details — all backed by your local DuckDB data.

costgoblin-mcp
$ mcp list-tools
get_cost_overview Total spend, top services, dimensions
query_costs Breakdown by any dimension
query_trends Period-over-period changes
query_daily_costs Time series by group
run_sql Ad-hoc SQL with pre-built costs CTE
...and 5 more tools
Cloud cost visibility without the cloud
01

S3 billing sync

Downloads AWS Cost and Usage Reports from S3 and stores them as optimized daily Parquet files.

02

Cost breakdown by any dimension

Slice costs by account, service, region, team, product, environment, or any custom tag.

03

Tag normalization

Aliases and normalization rules applied at query time. Fix messy tags without re-processing data.

04

Drill-down analytics

Click through from service to service family. Filter by environment. Cross-chart interactions update everything.

05

Period-over-period trends

See which accounts, services, or teams are trending up. Spot anomalies before they become incidents.

06

Multi-account org tree

Map all your AWS accounts with aliases and hierarchy. Drill into any account or roll up across the org.

07

MCP server for AI agents

Expose cost data to Claude, ChatGPT, or any MCP-compatible AI. 10 tools for querying, trends, and ad-hoc SQL.

08

CSV & YAML export

Export any view to CSV for reporting and budgeting. Share dashboard configurations as portable YAML files.

Get CostGoblin
All builds are unsigned. macOS users: right-click > Open on first launch.
View all assets on GitHub Releases.
Set up your AWS data exports
0

Activate your cost allocation tags

Before setting up any exports, make sure the tags you want to slice costs by are activated in the AWS Billing Console → Cost Allocation Tags.

Activate any user-defined tag you plan to use as a dimension in CostGoblin (e.g. team, environment, service). Tags that aren't activated here won't appear in the CUR exports, no matter how they're configured.

Newly activated tags only appear in data generated after activation — they are not backfilled. Activate them as early as possible.
1

Create your S3 bucket

Pick a dedicated bucket (or prefix) for all CostGoblin data. We recommend this structure so each export lands in its own namespace:

s3://your-company-billing/ ├── cur_daily/ # Daily Cost & Usage Report ├── cur_hourly/ # Hourly Cost & Usage Report └── cost_optimization/ # Cost Optimization Hub export
Use any bucket name. The three prefixes are what matters.
2

Create the CUR exports

In the AWS Billing Console → Data Exports, create two exports. Select Cost and usage report (CUR) as the data table and configure each one as follows:

Data table content settings ───────────────────────────────────── Time granularity: Daily (or Hourly for the second export) Additional export content: Include resource IDs on by default Split cost allocation data ECS/EKS shared costs Include caller identity (IAM principal) not needed Include capacity reservation columns not needed Data export delivery options ───────────────────────────────────── Compression & format: Parquet (not gzip/CSV) Data export overwriting: Overwrite existing data export file Data export storage settings ───────────────────────────────────── S3 bucket: your-company-billing S3 path prefix: cur_daily (or cur_hourly for the second export)

Under Column selection, enable these and disable the rest to keep file sizes small:

# Identity & timeline_item_usage_start_date usage timestampline_item_usage_account_id AWS account IDline_item_usage_account_name account display name # What was usedproduct_servicecode service (EC2, RDS, S3…)product_product_family family (Compute, Storage…)product_region_code regionline_item_resource_id resource ARNline_item_operation API operationline_item_usage_type usage typeline_item_usage_amount usage quantityline_item_line_item_type Usage, Tax, Credit…line_item_line_item_description line item description # Cost columnsline_item_unblended_cost raw costline_item_blended_cost blended across accountsline_item_net_unblended_cost cost after discountspricing_public_on_demand_cost on-demand list price # RI & Savings Plan amortizationreservation_effective_cost RI amortized costreservation_net_effective_cost RI net amortized costsavings_plan_savings_plan_effective_cost SP amortized costsavings_plan_net_savings_plan_effective_cost SP net amortized cost # Tagsresource_tags your cost allocation tags
CostGoblin auto-detects available columns — missing optional ones are silently skipped. But including them all unlocks amortized views, net cost perspectives, and resource-level drill-down.
Pro tip: New CUR exports only include data from the day they're created. To get historical data, open an AWS Support case requesting a backfill for your export — AWS can typically reload up to 12 months of past billing data into your S3 bucket.
3

Enable Cost Optimization Hub export

In the AWS Billing Console → Cost Optimization Hub → Preferences, enable the S3 data export:

# Cost Optimization Hub export S3 path: s3://your-company-billing/cost_optimization/ Format: Parquet
This feeds the Cost Optimization view with rightsizing, RI, and deletion recommendations.
4

Connect and configure dimensions

Open CostGoblin, go to Sync and point each data source to its S3 prefix. Once the first sync completes, head to Dimensions to map your tags to cost allocation dimensions. This is where CostGoblin shines — for each dimension you can:

  • Normalize — merge inconsistent casing and spelling (prod, Prod, production → one value)
  • Define aliases — group multiple tag values under a single label across all views
  • Define fallbacks — fill missing resource tags with the account-level tag
  • No data reprocessing — changes take effect instantly across all views.
First sync takes a few minutes depending on billing history size. Subsequent syncs only re-download the current month (AWS regenerates the full month's data with each export refresh).
What's next
Planned

Anomaly detection

Automatic alerts when spending deviates from historical patterns. Catch surprises before the bill lands.

Planned

Team budgets

Set spending targets per team, product, or environment. Track burn rate against budget in real time.

Planned

Collaboration

Share dashboards and cost reports with your team. Collaborative triage for cost spikes.

Maybe

Multi-cloud

GCP and Azure billing support alongside AWS. One interface for all your cloud spend.

Subscribe for updates

New features, releases, and cloud cost insights. Low volume, high signal.