Documentation

Everything you need to install, configure, and get the most out of Zerobillbot.

Documentation

1 Getting Started

Install the GitHub App

Visit the Zerobillbot GitHub App page and click "Install". Choose your organization or personal account, then select which repositories to enable.

Your first cost analysis

Once installed, Zerobillbot automatically monitors pull requests for infrastructure-as-code changes. Open a PR that adds, modifies, or removes Terraform (.tf), CloudFormation, ARM templates, or Deployment Manager files.

Zerobillbot will:

  1. Detect IaC resource changes in the diff
  2. Look up current cloud pricing for each resource (AWS, Azure, GCP)
  3. Post a cost impact comment with a detailed breakdown table
  4. Create a GitHub Check Run (pass/warn/fail based on thresholds)

No config required

Zerobillbot works out of the box with sensible defaults. However, you can customize behavior by adding a .costbot.yml file to your repository root.

2 Configuration Reference

Create a .costbot.yml file in your repository root to customize Zerobillbot's behavior. All fields are optional.

.costbot.yml
# Cost thresholds (in USD per month)
thresholds:
  warn: 10      # Post a warning if cost delta exceeds this
  fail: 25      # Block the PR if cost delta exceeds this

# Resources to ignore (glob patterns)
ignore:
  - "aws_cloudwatch_log_group.*"
  - "aws_iam_*"
  - "aws_s3_bucket_policy.*"

# Notification settings (Pro plan)
notifications:
  slack:
    webhook: "https://hooks.slack.com/services/..."
    channel: "#infra-costs"
    on: ["warn", "fail"]
  teams:
    webhook: "https://outlook.office.com/webhook/..."
    on: ["fail"]

# Regions to use for pricing lookup
regions:
  - us-east-1
  - ap-southeast-1

# Comment settings
comment:
  collapse_unchanged: true    # Collapse resources with no cost change
  show_total: true            # Show total monthly estimate
  currency: "USD"             # Currency for display

Configuration options

Option Type Default Description
thresholds.warn number 10 Monthly cost delta to trigger a warning
thresholds.fail number 50 Monthly cost delta to block the PR
ignore string[] [] Glob patterns for resources to ignore
regions string[] ["us-east-1"] Default regions for pricing lookup
notifications.slack.webhook string Slack webhook URL (Pro)
notifications.slack.on string[] ["fail"] Events to notify on
notifications.teams.webhook string Microsoft Teams webhook URL (Pro)
comment.collapse_unchanged boolean true Collapse zero-delta resources
comment.show_total boolean true Show total monthly estimate
comment.currency string "USD" Display currency

3 Supported Resources

Zerobillbot supports benchmarked pricing analysis across AWS, Azure, and GCP resource families.

AWS

  • aws_instance — EC2 instances (all instance types)
  • aws_ebs_volume — EBS volumes (gp2, gp3, io1, io2, st1, sc1)
  • aws_nat_gateway — NAT Gateways
  • aws_db_instance — RDS instances

Azure

  • azurerm_linux_virtual_machine / azurerm_windows_virtual_machine
  • azurerm_managed_disk, azurerm_sql_database, azurerm_kubernetes_cluster
  • azurerm_public_ip, azurerm_nat_gateway, azurerm_lb

GCP

  • google_compute_instance, google_compute_disk, google_compute_address
  • google_sql_database_instance, google_container_cluster
  • google_storage_bucket, google_cloud_run_service

Template support

For CloudFormation templates, Zerobillbot maps AWS::EC2::Instance, AWS::RDS::DBInstance, AWS::ECS::Service, and other resource types to equivalent pricing models. ARM and Deployment Manager templates are parsed with the same benchmark workflow used for Terraform-based changes.

💡 Missing a resource? Open an issue on our GitHub repo and we'll prioritize adding support.

4 Threshold Configuration

Thresholds control how Zerobillbot responds to cost changes in your pull requests.

How thresholds work

Zerobillbot calculates the total estimated monthly cost delta for all infrastructure changes in a PR. This delta is compared against your configured thresholds:

  • Below warn threshold: ✅ Check passes. Comment posted with cost breakdown.
  • Between warn and fail: ⚠️ Check passes with a warning. Comment highlights the cost increase.
  • Above fail threshold: ❌ Check fails. PR is blocked from merging (if branch protection is enabled).

Setting thresholds

Add thresholds to your .costbot.yml:

thresholds:
  warn: 10    # Warn if monthly delta > $10
  fail: 25    # Fail if monthly delta > $25

Recommended thresholds by team size

Team size Warn Fail Notes
Startup (1–10) $5 $25 Tight budgets, catch everything early
Growth (10–50) $25 $100 Balance speed with cost awareness
Enterprise (50+) $100 $500 Focus on large changes, avoid noise

5 Troubleshooting

Zerobillbot isn't posting comments on my PRs

  1. Verify the GitHub App is installed on the correct repository
  2. Check that the PR contains .tf, .yaml, .yml, .json, or .template files with infrastructure changes
  3. Ensure the Zerobillbot App has "Pull requests: Read & write" and "Checks: Read & write" permissions
  4. Look at the GitHub App's delivery history for webhook errors: Settings → Developer settings → GitHub Apps → Zerobillbot → Advanced

Cost estimates seem incorrect

  • Zerobillbot uses on-demand pricing. Reserved Instance or Savings Plan pricing requires an Enterprise plan.
  • Verify the correct region is configured in .costbot.yml (defaults to us-east-1).
  • Some resources have usage-based pricing (e.g., data transfer) that can't be estimated from config alone. These are noted as "usage-based" in the comment.

The check is blocking my PR but I want to override it

  • Repository admins can bypass branch protection rules and merge anyway
  • Adjust the fail threshold in .costbot.yml to a higher value
  • Add specific resources to the ignore list if they're expected costs

Configuration file isn't being picked up

  • Ensure the file is named exactly .costbot.yml (not .costbot.yaml)
  • The file must be in the repository root, not in a subdirectory
  • YAML syntax must be valid — use a YAML linter to check

Still having issues? Reach out to us at support@Zerobillbot.dev or open an issue on GitHub.